yetone / yetone/alma-plugins

Claude Subscription cannot use Claude Fable 5.1 — User-Agent pinned to claude-cli/2.1.183 (needs ≥2.1.250)

Open
#28 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
53
Forks
17
Avg merge
2h 5m
Merged PRs (30d)
1

Description

## Summary

Alma's built-in `claude-subscription` provider lists **Claude Fable 5.1** (`claude-fable-5-1`) in the model picker, but the model cannot actually be used.

Alma spoofs Claude Code as **`claude-cli/2.1.183`**. Anthropic requires **Claude Code ≥ 2.1.250** for Fable 5.1 (Fable 5 only needed ≥ 2.1.170).

This is a **core Alma provider** issue, not a marketplace plugin. Opening here because `yetone/alma-plugins` is the public issue tracker.

## Environment

- Alma **v0.4.17** (latest; `alma update check` → already up to date)
- Provider: `claude-subscription` (Claude Subscription, OAuth)
- Model: `claude-fable-5-1` / Claude Fable 5.1 (released 2026-09-01)
- OS: macOS

## Expected

Selecting Claude Fable 5.1 on Claude Subscription should work the same way as Claude Fable 5 (`claude-fable-5`).

## Actual

- `claude-fable-5-1` **does appear** in the Claude Subscription model list (catalog comes from [models.dev](https://models.dev/api.json); Fable 5.1 is already there).
- Enabled models on this machine include both `claude-fable-5` and `claude-fable-5-1`.
- Requests through the subscription OAuth path still cannot use Fable 5.1.

## Root cause

In the packaged app (`app.asar`), the Claude Subscription client is pinned to an old Claude Code fingerprint:

```
Lp = "2.1.183"
Fp = "claude-cli/2.1.183 (external, cli)"
```

OAuth calls go to `https://api.anthropic.com` with that `User-Agent`.

Official docs:

- Fable 5 → Claude Code **≥ 2.1.170**
- **Fable 5.1 → Claude Code ≥ 2.1.250**
- The `fable` alias only resolves to Fable 5.1 starting with **Claude Code v2.1.255** (before that it still resolved to Fable 5)

Also: `claude-fable-5-1` does **not** appear as a string in Alma 0.4.17. Capability detection uses `modelId.includes('claude-fable-5')`, which would match `claude-fable-5-1` as a prefix, so adaptive-thinking handling is probably fine. The blocker is the **version gate**, not thinking/tool payload shape.

## Suggested fix

Bump the spoofed Claude Code version to **≥ 2.1.250** (ideally **≥ 2.1.255** so the `fable` alias maps to 5.1).

## Workaround

Use an Anthropic API-key / Bedrock / other compatible provider instead of `claude-subscription`.

## References

- [Claude Fable models on your plan](https://support.claude.com/en/articles/15424964-claude-fable-models-on-your-plan)
- [Claude Code model configuration](https://code.claude.com/docs/en/model-config)

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by locating the Claude Subscription client and the packaged app.asar references to the pinned `claude-cli/2.1.183` User-Agent. Check the version gate used for OAuth requests, then verify that `claude-fable-5-1` works through the subscription provider while existing Claude Fable 5 behavior remains unchanged.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
api
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
62/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.