Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Groups (`group` field):
- `src/overlay.ts` — overlay resolver. Exports `resolveSkillPath`, `loadSkillWithOverlay`, `appendOverlays`. Priority: `$FAB_SKILLS_DIR` > `~/.fab/skills/` > `<cwd>/.fab/skills/` > bundled `fab/skills/`. Two override styles: `<skill>.md` (replace) and `<skill>.append.md` (concatenate). See [`skills/README.md`](skills/README.md) for the user-facing explanation
- `src/workflows.ts` — 18 built-in workflows tagged `factory | firm | lab`, with parallel groups, review gates, revision support, and workflow-level merge gates (`gateProfile: 'code' | 'docs'`). `streamWithAdvisor` is the shared stream consumer. `runMergeGate` is the merge-gate finalizer.
- `src/repl.ts` — interactive REPL with `/quit`, `/status`, `/threads`, `/switch`. Prompts for tool confirmation when `always_ask` policy fires.
- `src/advisor.ts` — `ADVISOR_TOOL` (Opus 4.6 escalation) + `callAdvisor()`. Per-session call-budgeted.
- `src/advisor.ts` — `ADVISOR_TOOL` (Opus 4.8 escalation) + `callAdvisor()`. Per-session call-budgeted.
- `src/usage.ts` — token aggregation and cost estimation (local reporting)
- `src/state.ts` — local `.fab-state.json` persistence
- `src/stream.ts` — SSE event formatting for terminal output. Handles all event types including MCP tool use, thread events, and session status rescheduled/terminated.
Expand Down
1 change: 1 addition & 0 deletions __tests__/inference.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ describe('model id resolution', () => {

it('maps canonical ids to Bedrock ids for the bedrock backend', () => {
expect(resolveModelId('claude-sonnet-4-6', 'bedrock')).toBe('anthropic.claude-sonnet-4-6');
expect(resolveModelId('claude-opus-4-8', 'bedrock')).toBe('anthropic.claude-opus-4-8');
expect(resolveModelId('claude-opus-4-7', 'bedrock')).toBe('anthropic.claude-opus-4-7');
expect(resolveModelId('claude-opus-4-6', 'bedrock')).toBe('anthropic.claude-opus-4-6-v1');
expect(resolveModelId('claude-haiku-4-5', 'bedrock')).toBe('anthropic.claude-haiku-4-5-20251001-v1:0');
Expand Down
4 changes: 2 additions & 2 deletions __tests__/state.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ describe('state', () => {
authorization_token: 'ghp_test_token',
},
],
modelOverrides: { 'node-engineer': 'claude-opus-4-6' },
modelOverrides: { 'node-engineer': 'claude-opus-4-8' },
sprint: null,
vaultIds: [],
budgetLimit: null,
Expand All @@ -63,7 +63,7 @@ describe('state', () => {
expect(loaded.memory.enabled).toBe(false);
expect(loaded.memory.storeId).toBe('memstore_test');
expect(loaded.repos).toHaveLength(1);
expect(loaded.modelOverrides['node-engineer']).toBe('claude-opus-4-6');
expect(loaded.modelOverrides['node-engineer']).toBe('claude-opus-4-8');
expect(loaded.sourceDirs).toEqual(['src/api']);
});

Expand Down
4 changes: 2 additions & 2 deletions docs/transports.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ In **sdk** and **claude-cli** modes you do not run `fab deploy`. The role's syst

| Dimension | Managed Agents | SDK | Claude CLI |
| ----------------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Auth source** | `ANTHROPIC_API_KEY` (API account) | `ANTHROPIC_API_KEY` (API account); subscription support lands 2026-06-15 | Existing `claude` login — subscription credit today |
| **Auth source** | `ANTHROPIC_API_KEY` (API account) | `ANTHROPIC_API_KEY` (API account); monthly Agent SDK credit on Pro/Max/Team/Enterprise from 2026-06-15 | Existing `claude` login — subscription credit today |
| **Billing** | API per-token | API per-token | Claude Code subscription (or `--bare` + API key) |
| **Sessions** | Anthropic-hosted, durable, listable via API. Long-running async OK. | In-memory `Query` objects. End when the process exits. | Subprocess per role. Session id persists across invocations via `--resume`. |
| **Tools** | `agent_toolset_20260401` — managed sandbox. Cloud-mounted git resources. | Claude Code toolset (Read / Write / Edit / Bash / Grep / Glob / WebSearch / WebFetch). Cwd-mounted filesystem. | Same Claude Code toolset as the SDK runtime. Each subprocess inherits the local filesystem. |
Expand Down Expand Up @@ -162,4 +162,4 @@ A common pattern: prototype with `FAB_RUNTIME=claude-cli` to iterate fast on you

- **`--bare` is incompatible with subscription auth.** `--bare` forces `ANTHROPIC_API_KEY` and skips OAuth / keychain. If you want both bare mode AND subscription billing, that's a contradiction — pick one. Default (non-bare) flow is what carries subscription auth through.
- **Claude CLI parallelism.** A workflow with a 5-role parallel group spawns 5 `claude` subprocesses simultaneously. Memory + filehandle footprint is non-trivial but bounded by group size. Watch `ps aux | grep claude` if you're running on a small machine.
- **Subscription auth and the Agent SDK.** Anthropic ships official Agent SDK + subscription auth on 2026-06-15. When that lights up, `SdkRuntime` may pick up subscription billing automatically (no code change). `ClaudeCliRuntime` remains useful for the subprocess-isolation use case (per-role hooks, debugging via `claude /resume`) and as a fallback if the SDK + subscription path has gaps.
- **Subscription auth and the Agent SDK.** From 2026-06-15, Agent SDK and `claude -p` usage on Pro / Max / Team / Enterprise plans draws from a new monthly Agent SDK credit (Pro $20, Max 5x $100, Max 20x $200), separate from interactive chat usage limits; `ANTHROPIC_API_KEY` accounts stay pay-as-you-go. When it lights up, `SdkRuntime` and `ClaudeCliRuntime` pick up subscription billing automatically (no code change). `ClaudeCliRuntime` remains useful for the subprocess-isolation use case (per-role hooks, debugging via `claude /resume`) and as a fallback if the SDK + subscription path has gaps.
2 changes: 1 addition & 1 deletion fab.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
},
"model": {
"type": "string",
"description": "Preferred Claude model (e.g., 'claude-sonnet-4-6', 'claude-opus-4-6')."
"description": "Preferred Claude model (e.g., 'claude-sonnet-4-6', 'claude-opus-4-8')."
}
},
"additionalProperties": true
Expand Down
Loading
Loading