Personal Claude Code build. Routing comes from claude-code-subagent-models; this adds the subagent task-lifecycle QoL splices and the config.
npm install
./install.sh
ccdinstall.sh builds the patched bundle from the current claude binary into ~/.claude-ds/claude.js (routing + QoL + native addons + the execpath override, in one pass), and installs the launchers. Revert: delete ~/.claude-ds; the stock claude is never touched.
config.json lists providers and their models:
{
"providers": [
{
"id": "deepseek",
"prefix": "deepseek",
"baseUrl": "https://api.deepseek.com/anthropic",
"apiKeyEnv": "CC_DEEPSEEK_API_KEY",
"models": [
{ "name": "deepseek-v4-flash", "label": "DeepSeek V4 Flash", "description": "Cheap and fast, routed to DeepSeek" }
]
}
]
}The launchers (ccd / claude-ds) source ~/.claude-ds/env.sh (gitignored, holds CC_DEEPSEEK_API_KEY) and derive the routing payload, the Agent-tool model list, and the official /model picker entry from config.json, so config changes need no re-patch.
To run the raw extension command (ccr) without the launchers, the same env must reach the bundle at startup. Claude Code loads ~/.claude/settings.json "env" into the process, so put the provider key and routing vars there too:
claude/settings.json:
{
"cleanupPeriodDays": 36500,
"env": {
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"CC_DEEPSEEK_API_KEY": "",
"CC_PROVIDERS": "[{\"prefix\":\"deepseek\",\"baseUrl\":\"https://api.deepseek.com/anthropic\",\"apiKeyEnv\":\"CC_DEEPSEEK_API_KEY\"}]",
"CC_EXTRA_MODELS": "deepseek-v4-flash"
},
"hooks": {
"SubagentStop": [
{
"matcher": "*",
"hooks": [
{ "type": "command", "command": "/Users/dexdevlon/.claude-ds/subagent-keep.sh", "timeout": 120000 }
]
}
]
},
"viewMode": "verbose",
"effortLevel": "high",
"tui": "fullscreen",
"showThinkingSummaries": true,
"skipDangerousModePermissionPrompt": true,
"theme": "dark",
"verbose": true,
"agentPushNotifEnabled": true
}Sync claude/ into ~/.claude with:
./bin/sync-config.shsync-config.sh backs up the current ~/.claude/settings.json first (timestamped backups, newest 10 kept, never overwritten), so run it before filling in the key and you can always restore. Credentials and anything private are never part of the repo; sync-config.sh does not touch ~/.claude/.credentials.json.
patch-qol.mjs splices the task list: 60-minute retention for completed subagents, teammates, and in-process tasks, p/k pinning, x dismiss, d detach (converts a subagent transcript into a resumable session and drops claude --resume <uuid> into the input), the [p] row markers, and the agents-view pin alias.
scripts/promote-all.sh,scripts/promote-agent.sh— recover subagent transcripts as resumable sessionsscripts/subagent-keep.sh— keep-alive for subagent sessionsscripts/test-hybrid.sh— end-to-end test (makes real API calls)