Describe the bug
This appears to be the same externally visible failure reported in #1406, despite running a version of the action that includes the fix from #1407.
When Anthropic workload identity federation (WIF) is used together with the plugins and plugin_marketplaces inputs, Claude execution fails with a token-exchange authentication error. The plugin is installed from our own privately hosted Claude Code marketplace rather than a public marketplace.
API Error: Token exchange failed with status 401
{"error":{"type":"authentication_error","message":"Authentication failed"}}
The corresponding Anthropic authentication event reports:
After removing the plugin inputs while retaining WIF, a subsequent run completed successfully.
Version evidence
The failing run resolved anthropics/claude-code-action@v1 to be7b93b, which is three commits after the merged #1407 fix.
To reproduce
The relevant shape of the workflow is:
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: anthropics/claude-code-action@v1
with:
prompt: "Perform the requested task."
anthropic_federation_rule_id: "fdrl_***"
anthropic_organization_id: "***"
anthropic_service_account_id: "svac_***"
anthropic_workspace_id: "wrkspc_***"
plugin_marketplaces: |
<marketplace URL>
plugins: |
<plugin>@<marketplace>
Observed behaviour:
- WIF and a plugin from a privately hosted custom Claude Code marketplace are configured.
- The action starts but Claude execution subsequently fails with a token-exchange
401.
- The Anthropic authentication event identifies the failure as
jti_reused.
- Removing the plugin configuration while retaining WIF allows a subsequent run to succeed.
The repository, plugin identity, marketplace URL, federation identifiers, request IDs, and workflow run URLs are intentionally omitted because they are private. The marketplace is supplied through the action's documented plugin_marketplaces input. We can provide additional redacted logs or identifying details privately if required.
Expected behaviour
WIF should continue to work when marketplace plugins are configured.
The identity token should not be exchanged more than once by the separate Claude processes involved in marketplace setup, plugin installation, and the main query.
Additional context
This report follows:
We are not asserting that the internal cause is definitely identical to #1406. However, the observable conditions and failure are the same:
- WIF succeeds without plugin configuration.
- With plugin configuration, the run produces
jti_reused.
- The failure occurs on a revision containing the intended shared-credential-cache fix.
Describe the bug
This appears to be the same externally visible failure reported in #1406, despite running a version of the action that includes the fix from #1407.
When Anthropic workload identity federation (WIF) is used together with the
pluginsandplugin_marketplacesinputs, Claude execution fails with a token-exchange authentication error. The plugin is installed from our own privately hosted Claude Code marketplace rather than a public marketplace.The corresponding Anthropic authentication event reports:
After removing the plugin inputs while retaining WIF, a subsequent run completed successfully.
Version evidence
The failing run resolved
anthropics/claude-code-action@v1tobe7b93b, which is three commits after the merged #1407 fix.To reproduce
The relevant shape of the workflow is:
Observed behaviour:
401.jti_reused.The repository, plugin identity, marketplace URL, federation identifiers, request IDs, and workflow run URLs are intentionally omitted because they are private. The marketplace is supplied through the action's documented
plugin_marketplacesinput. We can provide additional redacted logs or identifying details privately if required.Expected behaviour
WIF should continue to work when marketplace plugins are configured.
The identity token should not be exchanged more than once by the separate Claude processes involved in marketplace setup, plugin installation, and the main query.
Additional context
This report follows:
We are not asserting that the internal cause is definitely identical to #1406. However, the observable conditions and failure are the same:
jti_reused.