Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
553 commits
Select commit Hold shift + click to select a range
f2689f4
Read Grok's ledger and settings of the wrong shape as empty
dhh Oct 20, 2026
1b0a964
Pause Grok's limits on a lapsed access token, as Claude does
dhh Oct 20, 2026
b415057
Read a Grok settings cache of the wrong shape as no plan in account s…
dhh Oct 20, 2026
a387a0e
Read Copilot's session store in place, read-only, by its file URI
dhh Oct 20, 2026
906dcbb
Ask gh for its github.com token, never GH_HOST's
dhh Oct 20, 2026
8ecf28a
Read a body short of its Content-Length as a reply cut short
dhh Oct 20, 2026
d3ae940
Never open a fork's parentSession that isn't a regular file
dhh Oct 20, 2026
b899654
Hold a registry's switch threshold to 50-100, as account state does
dhh Oct 20, 2026
0b52945
Read Claude's stats-cache and history lines of the wrong shape as not…
dhh Oct 20, 2026
a2b4f5c
Send the Cursor sign-in to CURSOR_API_ENDPOINT only over HTTPS or loo…
dhh Oct 20, 2026
46473ff
Sign only the primary Codex home in with CODEX_ACCESS_TOKEN
dhh Oct 20, 2026
56fb9a3
Keep and reuse a Codex answer without windows like any other
dhh Oct 20, 2026
109bcaa
Reuse a Kimi answer without windows like any other
dhh Oct 20, 2026
3abdec6
Send the Muse token to MUSE_KEY_ENDPOINT only over HTTPS or loopback,…
dhh Oct 20, 2026
7d4782b
Read zoneless times at the calendar's edge as undated in Muse and Vibe
dhh Oct 20, 2026
a8741be
Start Muse's prompt counts over after a gap of days, not on today
dhh Oct 20, 2026
241c5da
Keep Kimchi's out-of-credits signal in the help, not a status outside…
dhh Oct 20, 2026
e8f906c
Match Kimchi's region whatever its case
dhh Oct 20, 2026
76b34ce
Date Antigravity's rows only within 2000-2100, as the shared reader does
dhh Oct 20, 2026
5c73b2d
Run omp usage without stdin, read odd window ids, and keep an anonymo…
dhh Oct 20, 2026
036e4a1
Mark Antigravity's limits stale only when some were kept
dhh Oct 20, 2026
2986ce3
Count a Hermes state.db without a usage table by its sessions and pro…
dhh Oct 20, 2026
5aaa32f
Count only Hermes times within today as today's
dhh Oct 20, 2026
477e64c
Leave negative, text and huge Hermes counts out of its sums
dhh Oct 20, 2026
ef0e9d2
Floor Devin's fetch stamp rather than round it
dhh Oct 20, 2026
eecd735
Date an undated Qwen record once, by its transcript, not as today's e…
dhh Oct 20, 2026
66bb431
Describe the collectors' reviewed behaviour in the agents README and …
dhh Oct 20, 2026
c7fc958
Hold every collector to the cut-short answer in the contract checks
dhh Oct 20, 2026
16d03eb
Run collectors in the caller's TZ and drop mise's variables in the te…
dhh Oct 20, 2026
48c7db2
Floor the time Qwen dates an undated record by
dhh Oct 20, 2026
bd71494
Hold "today" to one day in tests that compare today's totals
dhh Oct 20, 2026
8a1913b
Skip an OpenCode credential nested too deeply to parse
dhh Oct 20, 2026
7706778
Keep a failed Codex recheck quiet after a plan without windows
dhh Oct 20, 2026
2a25fb3
Say OpenRouter counts reasoning tokens as output, and assert the split
dhh Oct 20, 2026
1031e16
Hold Antigravity to opencode's google-vertex rows in the partition test
dhh Oct 20, 2026
cae90d6
Pin Kimi's look-alike domain refusal and its refusal help text
dhh Oct 20, 2026
89f20e9
Cover Z.ai's Zhipu host, raw-key header, per-platform cache and key s…
dhh Oct 20, 2026
a81ac21
Cover Ollama's saved-key fallback, its Bearer header and its full-win…
dhh Oct 20, 2026
7603f42
Hold MiniMax to a limits cache per region, and compare kept limits by…
dhh Oct 20, 2026
e93bbe8
Cover OpenRouter's opencode key, a refused management key, and kept m…
dhh Oct 20, 2026
0353ee2
Cover DeepSeek's opencode key and its balance cache per API host
dhh Oct 20, 2026
15842fa
Cover Copilot's exported-token order and the remote: true override
dhh Oct 20, 2026
6529c54
Assert a rate-limited Claude check advises no sooner retry
dhh Oct 20, 2026
63d8c8e
Cover OpenCode keeping a later refusal's windows and a no-plan key's …
dhh Oct 20, 2026
d2dfdca
Prove Claude's index shortcut never opens an unchanged transcript
dhh Oct 20, 2026
a0f233b
Age Muse's own scan schema, not the envelope's, in the dedup rescan c…
dhh Oct 20, 2026
e80b71e
Make Devin's newest-fetch check discriminate, and cover hideWeekly an…
dhh Oct 20, 2026
a73b3d1
Make Antigravity's scan reuse and step-model checks discriminate
dhh Oct 20, 2026
76b6e27
Cover a Hermes profile linked to its home counting once
dhh Oct 20, 2026
3a14fb1
Cover Fireworks account discovery, its reset on a moved key, the bill…
dhh Oct 20, 2026
e9acbd1
Compare Kimchi's kept limits by value and date its sprint budget from…
dhh Oct 20, 2026
66259ba
Date Antigravity's old transcript step in the zone the test runs in
dhh Oct 20, 2026
149f53f
Floor a float epoch in the shared local_day instead of rounding it
dhh Oct 20, 2026
acf82f5
Start the partition test on the new day when it would cross local mid…
dhh Oct 20, 2026
09b9de7
Describe the agent test harness's TZ, cut-short step, and frozen day …
dhh Oct 20, 2026
48ccfff
Keep Copilot's last allowance when GitHub's quota answer lacks an amount
dhh Oct 20, 2026
f6b6d63
Don't cache Copilot's transcript totals when a transcript couldn't be…
dhh Oct 20, 2026
e05149e
Keep Cursor's known limits when a usage section comes back the wrong …
dhh Oct 20, 2026
bc13994
Show Kimchi's out-of-credits warning as an Out of credits status
dhh Oct 20, 2026
08dc2c4
Translate the agents panel's Out of credits status
dhh Oct 20, 2026
c532524
Use the official agent marks in the Default Agent menu
dhh Oct 22, 2026
3b13762
Use the official Antigravity, Fireworks and OpenRouter marks in the a…
dhh Oct 22, 2026
1abd271
Harden the shared collector helpers against hostile replies and stamps
dhh Oct 22, 2026
b8c1d64
Read Grok session days through local_day so an out-of-range time skip…
dhh Oct 22, 2026
216674f
Skip a Claude transcript line that isn't an object rather than the wh…
dhh Oct 22, 2026
1655b25
Count a Claude transcript line with a falsy time nowhere, not as today
dhh Oct 22, 2026
83bbad7
Give Claude's stats-cache fallback the record's recentDays and modelU…
dhh Oct 22, 2026
311245b
Key the single Claude home's limits cache by the account it is signed…
dhh Oct 22, 2026
2a5e633
Skip a wrong-shaped Codex rollout line instead of the rest of the file
dhh Oct 22, 2026
b19cc9f
Keep Codex limits live when reset credits or account/read are malformed
dhh Oct 22, 2026
6aaa75a
Treat a Codex config.toml that isn't UTF-8 as naming no local endpoints
dhh Oct 22, 2026
f7e2eb3
Skip untrusted Copilot times and costs instead of failing the record
dhh Oct 22, 2026
6534c70
Treat Antigravity answers of another shape as failed checks
dhh Oct 22, 2026
9041a29
Send Kimchi's key only to a trusted gateway
dhh Oct 22, 2026
84f189a
Keep Kimi's last limits when a reply isn't a quota answer
dhh Oct 22, 2026
8ddf11c
Leave Kimi's reset time empty when it won't parse
dhh Oct 22, 2026
84b8454
Take over a Kimi CLI lock lease nobody renewed
dhh Oct 22, 2026
4fb1cda
Name no Hermes active day for start times outside 2000-2100
dhh Oct 22, 2026
018929e
Say Devin is unavailable when its session database can't be read
dhh Oct 22, 2026
2964bc7
Skip a Z.ai limit row tagged with a list and a .env that isn't UTF-8
dhh Oct 22, 2026
ddd8a4d
Keep OpenCode's reset times ISO and its retry and stale flags honest
dhh Oct 22, 2026
4252753
Skip a Qwen line nested too deep and a runtimeOutputDir holding a NUL
dhh Oct 22, 2026
b10cdfe
Send the Synthetic key only to a trusted SYNTHETIC_API_BASE_URL
dhh Oct 22, 2026
43bcd11
Keep DeepSeek's key on trusted endpoints, reject overflowing balances…
dhh Oct 22, 2026
9f8608c
Keep MiniMax's key on trusted endpoints and skip caching partial Mini…
dhh Oct 22, 2026
15b9d2e
Keep Fireworks' last answers past odd billing replies and its key on …
dhh Oct 22, 2026
131b422
Run a user's own agent install ahead of mise's lazy shim for every agent
dhh Oct 22, 2026
3837117
Count a Codex rollout line with a falsy time nowhere, not on the file…
dhh Oct 22, 2026
8163225
Prefer mise's installed agent over a leftover ~/.local/bin copy
dhh Oct 22, 2026
cd58867
Don't call limits stale when a failed check kept none
dhh Oct 22, 2026
022d5f9
Treat a reply that never finishes as cut short, not unreachable
dhh Oct 22, 2026
dcb2bdd
Reread Codex's cached per-file totals after the falsy-time change
dhh Oct 22, 2026
69ebef3
Install node alongside an npm-backed default agent
dhh Oct 22, 2026
a60a86a
Read an Antigravity bucket with no fraction as fully spent
dhh Oct 22, 2026
d074017
Count a Copilot line with an untrusted time nowhere, not on the file'…
dhh Oct 22, 2026
54664d1
Keep reading a zoneless Grok session time as UTC
dhh Oct 22, 2026
69967b9
Say what Codex's file cache schema 3 retires
dhh Oct 22, 2026
82c165c
Read Copilot's used allowance from what GitHub says remains
dhh Oct 22, 2026
4e9519c
Title Cursor's included meters Weekly on a weekly plan
dhh Oct 22, 2026
15e5e0c
Read a unified-billing Grok account's monthly quota instead of 0%
dhh Oct 22, 2026
8de84a4
Read an Antigravity bucket's remaining amount and skip disabled buckets
dhh Oct 22, 2026
a462361
Ask Antigravity's quota summary for the project loadCodeAssist names
dhh Oct 22, 2026
a582f43
Read a Muse window reset given as an ISO time
dhh Oct 22, 2026
2da6d7a
Name Devin's Pro Ultimate and pooled Enterprise tiers
dhh Oct 22, 2026
f24a6d5
Count Mistral Vibe sessions from the Unified Harness store
dhh Oct 22, 2026
02031e6
Read pi sessions from the sessionDir its settings.json names
dhh Oct 22, 2026
aedb484
Say that Claude's stats-cache days are UTC dates
dhh Oct 22, 2026
9860f58
Resolve Hermes' home and profiles root as Hermes does
dhh Oct 22, 2026
92ccd24
Never send Cursor's API key as a bearer
dhh Oct 22, 2026
e578478
Stop adding pi's and omp's reasoning to output, which already holds it
dhh Oct 22, 2026
3bab83d
Leave out the copies an opencode fork makes in its original message s…
dhh Oct 22, 2026
1893673
Count the tokens pi spends on compactions, summaries, and cache warming
dhh Oct 22, 2026
99d78d6
Count typed prompts in pi, omp, and opencode, not each model step
dhh Oct 22, 2026
560cf60
Say that pi's and omp's reasoning is already part of output
dhh Oct 22, 2026
c683545
Read Claude's weekly limit from seven_day, as Claude Code does
dhh Oct 22, 2026
249a14e
Read Anthropic's utilization as a percentage always, as Claude Code does
dhh Oct 22, 2026
6f1f8dc
Count the prompts a person typed in Claude Code, not each API request
dhh Oct 22, 2026
159c02c
Keep a forked Claude session's parent in the session count
dhh Oct 22, 2026
22fd41c
Key Claude replies by message and request id
dhh Oct 22, 2026
3cde07a
Count Claude's advisor iterations under the advisor's model
dhh Oct 22, 2026
50f33ec
Leave Claude Code turns another provider served out of the Claude record
dhh Oct 22, 2026
1a0e34b
Count the prompts typed in Codex rollouts, not the requests answering…
dhh Oct 22, 2026
5a696cc
Name the Codex plan as Codex's own /status does
dhh Oct 22, 2026
377c36f
Never cache a Codex scan that couldn't read a rollout
dhh Oct 22, 2026
c89a642
Count a local Codex turn with an untrusted time nowhere
dhh Oct 22, 2026
9d7cd78
Count the prompts typed in local Codex rollouts, not the requests
dhh Oct 22, 2026
e4d0bd6
Remember Codex provider endpoints so local history survives a config …
dhh Oct 22, 2026
8a20563
Count Hermes' default profile while a named profile is active
dhh Oct 22, 2026
cf5714d
Count a Qwen Code Responses API reply's reasoning once
dhh Oct 22, 2026
b3bcdd0
Find the legacy Kimi CLI's sign-in under KIMI_SHARE_DIR
dhh Oct 22, 2026
0591de2
Count Kimi Code's local usage from its session wire logs
dhh Oct 22, 2026
1ccaacb
Count only MiniMax Code replies on MiniMax's own routes
dhh Oct 22, 2026
2bec5ac
Read MiniMax's window status: exhausted is full, unlimited and not-in…
dhh Oct 22, 2026
24b43e7
Pick mmx's MiniMax host in the order mmx does
dhh Oct 22, 2026
47b298e
Ask a self-hosted Kimchi login's own gateway, never the public one
dhh Oct 22, 2026
2500fc1
Count only Kimchi replies on Kimchi's own gateway routes
dhh Oct 22, 2026
be42f01
Count DeepSeek Harness sessions on its pi-ai deepseek route
dhh Oct 22, 2026
05f5422
Show the DeepSeek balance in the currency that holds credit
dhh Oct 22, 2026
bc58f15
Say Out of credits when DeepSeek's balance no longer covers a call
dhh Oct 22, 2026
faa368e
Read Ollama Cloud limits from its documented balance endpoint
dhh Oct 22, 2026
19fbbaa
Read Ollama's plan under its lowercase JSON key
dhh Oct 22, 2026
a710618
Show an OpenRouter inference key refused by /credits as healthy
dhh Oct 22, 2026
16a90e2
Count OpenRouter activity reasoning once, inside completion tokens
dhh Oct 22, 2026
46a86c6
Read Z.ai's body-level authentication codes as a refused key
dhh Oct 22, 2026
3c61227
Share the Claude Code transcript reader and who-bills-it classifier
dhh Oct 22, 2026
5eb0afb
Count Claude Code turns under the provider that served them
dhh Oct 22, 2026
c5bb735
Share the Codex rollout reader the local collector keeps
dhh Oct 22, 2026
c8e36fd
Count Codex --oss rollouts on Ollama cloud models under Ollama Cloud
dhh Oct 22, 2026
c38ebd6
Share the DeepSeek Harness log reader, its routes chosen by the caller
dhh Oct 22, 2026
f871423
Count dsh, Kimchi and MiniMax Code routes under the provider that bil…
dhh Oct 22, 2026
741c1bf
Count pi and opencode sessions on the Kimi Code plan under Kimi
dhh Oct 22, 2026
e832c6c
Rebuild the shared Claude Code index in place on --force
dhh Oct 22, 2026
a5fe419
Name every shared reader in the collector module's docstring
dhh Oct 22, 2026
543f712
Drop the translated manuals' claim that Kimi has no local usage stats
dhh Oct 22, 2026
fe5c280
Count Codex rollouts by their token_usage_record lines
dhh Oct 22, 2026
5e22ae1
Count a Codex subagent's thread under the session that started it
dhh Oct 22, 2026
57e7577
Count a subagent's Claude Code reply that shares its parent's message id
dhh Oct 22, 2026
3d2227b
Don't count Claude Code's built-in local commands as prompts
dhh Oct 22, 2026
ad2b334
Say that Claude Code's compactions are missing from its tokens
dhh Oct 22, 2026
d7434f1
Build the shared Claude Code index once when collectors run together
dhh Oct 22, 2026
d19aafa
Parse only the pi session files that hold a collector's own lines
dhh Oct 22, 2026
0c63b25
Count the Z.ai, Kimi Code and Muse plans under every id pi, omp and o…
dhh Oct 22, 2026
fbb9eaa
Read ~/.hermes whole beside a custom Hermes root, its own state.db too
dhh Oct 22, 2026
150f1bc
Count a DeepSeek Harness prompt per typed message, not per billed step
dhh Oct 22, 2026
3a51c55
Say DeepSeek, Kimi and Local have no local stats when none were found
dhh Oct 22, 2026
9fa68e0
Count Kimi Code, Qwen Code, Hermes and Vibe usage under the provider …
dhh Oct 22, 2026
4fe08b9
Say Qwen Code and Vibe have no local stats when none were found
dhh Oct 22, 2026
e445d40
Hold harness stores' routes to the partition: each request counted on…
dhh Oct 22, 2026
24bccea
Count Grok prompts from turns, a fork's copied turns once
dhh Oct 22, 2026
0e580fd
Show a unified Grok account's monthly quota beside its weekly credits
dhh Oct 22, 2026
be250cd
Count the calls of a Muse child agent that keeps no log of its own
dhh Oct 22, 2026
896284c
Count Copilot prompts from the requests a typed prompt started
dhh Oct 22, 2026
ed14aa9
Leave Copilot requests sent to a custom provider out of Copilot's record
dhh Oct 22, 2026
af6904d
Show Ollama's purchased credits left as a balance
dhh Oct 22, 2026
85fb334
Ask OpenRouter's /credits once per refresh, management key first
dhh Oct 22, 2026
3b522b3
Count Moonshot's pay-as-you-go API under Kimi from every harness
dhh Oct 22, 2026
2b3b308
Read Claude Code's fallbacks only on a machine without transcripts
dhh Oct 22, 2026
3fe7363
Count Claude Code sent to Alibaba's Model Studio under Qwen
dhh Oct 22, 2026
2068346
Key Qwen's scan cache by the routes it classified with
dhh Oct 22, 2026
30b152c
Read Qwen Code's base URL from its .env files and settings env
dhh Oct 22, 2026
f4b461d
Keep local from counting the zai, kimi and muse ids other collectors …
dhh Oct 22, 2026
7c28535
Document that omp's compactions record no usage to count
dhh Oct 22, 2026
1b3a4da
Book no Hermes session that never reached a provider under Hermes
dhh Oct 22, 2026
edb1885
Read a Vibe mistral-backend provider's api_base to find who bills it
dhh Oct 22, 2026
7756a8a
Key Kimi Code's and Vibe's cached scans by their route config
dhh Oct 22, 2026
6d56257
Keep a revoked OpenRouter management key's refusal and balance when t…
dhh Oct 22, 2026
0d10993
Say Copilot has no local stats when only custom-provider requests wer…
dhh Oct 22, 2026
aa43baa
Store MiniMax Code's route match as lists so a cached scan can match it
dhh Oct 22, 2026
8bbde8d
Rescan local's usage when a harness's route config changes
dhh Oct 22, 2026
8b81ff8
Say where Qwen's base URL comes from and that Model Studio's Claude C…
dhh Oct 22, 2026
bbd4ffb
Count the Claude Code usage cost-state records beyond the transcript …
dhh Oct 22, 2026
b2b0a16
Name Alibaba's Model Studio among the hosts that take Claude Code's t…
dhh Oct 22, 2026
e98b259
Count Codex rollouts on a provider's host under that provider's colle…
dhh Oct 22, 2026
e37fed3
Count a Kimi Code or Qwen Code prompt no request answered where its r…
dhh Oct 22, 2026
3421782
Count no Qwen Code OpenAI-compatible reply with no visible base URL u…
dhh Oct 22, 2026
2c94602
Say Kimi Code, Qwen Code and Vibe sessions are placed by the current …
dhh Oct 22, 2026
a0a0878
Name the management key when OpenRouter refuses only that key
dhh Oct 22, 2026
29637c8
Say there are no local stats when Muse, Devin, OpenCode or Synthetic …
dhh Oct 22, 2026
914b089
Move the agent glyphs past quattro's Tailscale mark at U+E90F
dhh Oct 22, 2026
08c3a74
Merge remote-tracking branch 'origin/quattro' into agents-cursor-open…
dhh Oct 22, 2026
4795247
Leave the translated manuals to the sync workflow
dhh Oct 22, 2026
64bc91f
Book pi prompts on the reply that answered them, on the day they were…
dhh Oct 22, 2026
9b8ca2c
Count MiniMax Code cloud models on a local route, and their prompts, …
dhh Oct 22, 2026
08541ca
Keep a routed scan that missed a Claude Code transcript out of the cache
dhh Oct 22, 2026
a13edb5
Reread every routed Codex rollout on --force in each collector that b…
dhh Oct 22, 2026
70e2c6b
Keep Cursor's weekly limits stale when its plan can't be checked
dhh Oct 22, 2026
fa85259
Bill no one for Vibe sessions on an alias config.toml dropped
dhh Oct 22, 2026
c81b1b5
Keep Claude's own scan out of the cache when a transcript couldn't be…
dhh Oct 22, 2026
d1c75b0
Name claude_code_usage and mcode_route_owner's model rule in the coll…
dhh Oct 22, 2026
b10462c
Install node for an npm-backed agent after Remove Preinstalls too
dhh Oct 22, 2026
f1acd27
Book an opencode prompt on its first step across providers
dhh Oct 22, 2026
74071ce
Share one Codex rollout cache across collectors and read grown rollou…
dhh Oct 22, 2026
13d6f96
Count a Kimi Code alias whose provider left config.toml nowhere
dhh Oct 22, 2026
151c4ce
Count Claude Code and Codex sent to Synthetic under synthetic
dhh Oct 22, 2026
ee59cd3
Say which Claude Code versions write cost-state and what it makes up for
dhh Oct 22, 2026
58c33de
Point local at the shared Codex rollout cache and drop its own digest
dhh Oct 22, 2026
62e39b7
Say which unnamed Kimi Code aliases still count under Kimi
dhh Oct 22, 2026
f32197a
Count pi, omp and opencode prompts no reply answered
dhh Oct 22, 2026
616d373
Say where the local collector's harness routes come from
dhh Oct 22, 2026
457869b
Count a Codex guardian or subagent thread under its parent session in…
dhh Oct 22, 2026
95d9ef5
Count Codex's built-in provider where openai_base_url sends it
dhh Oct 22, 2026
863a1c7
Count Kimchi gateway usage from pi, omp, opencode, Claude Code and Codex
dhh Oct 22, 2026
477907a
Count each pi and omp request once, and none omp never sent
dhh Oct 22, 2026
957d260
Look up opencode first steps only in the collector's own sessions
dhh Oct 22, 2026
77056e5
Keep local from counting the Kimchi ids the kimchi collector claims
dhh Oct 22, 2026
25f3a4b
Choose opencode first steps only among the steps the reader keeps
dhh Oct 22, 2026
25b8085
Count a pi or omp prompt once by its own id when a fork answers it
dhh Oct 22, 2026
7e5922d
Date an opencode V2 prompt whose request failed by when it was typed
dhh Oct 22, 2026
9a7f676
Read Codex rollouts once per forced refresh, not once per collector
dhh Oct 22, 2026
99a99ec
Count a Codex entry on the user's own hardware as local whatever its id
dhh Oct 22, 2026
1b211ae
Rescan Codex when openai_base_url moves between OpenAI and an unplace…
dhh Oct 22, 2026
eed128c
Keep an unselected Codex profile's openai_base_url off plain rollouts
dhh Oct 22, 2026
bec865d
Count Qwen Code replies a server gave a recycled response id
dhh Oct 22, 2026
b543f55
Name Synthetic and Kimchi among the Claude Code and Codex routes in t…
dhh Oct 22, 2026
bc22eaa
Keep local from counting the kimchi-dev/<upstream> routes kimchi claims
dhh Oct 22, 2026
0662f1e
Book each Codex prompt with the model that answered it
dhh Oct 22, 2026
522c95d
Switch a Codex thread's model at thread_settings_applied
dhh Oct 22, 2026
00a8b5a
Read the Codex collector's rollouts through the shared resumable reader
dhh Oct 22, 2026
f97183a
Read each Codex rollout once per forced refresh, whenever each collec…
dhh Oct 22, 2026
d738821
Say only config.toml's openai_base_url moves every built-in Codex rol…
dhh Oct 22, 2026
318f5ab
Keep a Qwen fork's copied records in the session that wrote them
dhh Oct 22, 2026
a6a0e89
Count an opencode prompt refused before sending nowhere
dhh Oct 22, 2026
3b4c5b2
Book a pi prompt a fork answered on another provider under one collector
dhh Oct 22, 2026
505cec5
Start no Codex app-server for an API-key login, which has no plan limits
dhh Oct 22, 2026
49c070e
Note that interactive Codex's thread-title requests are missing from …
dhh Oct 22, 2026
a585074
Treat a pi fork's deleted parent as no parent, so the scan stays comp…
dhh Oct 22, 2026
d0b8dcd
Read a pi fork tree's other files only when they hold a prompt the sc…
dhh Oct 22, 2026
2a666b2
Read a pi session header nested too deep as naming no parent
dhh Oct 22, 2026
3cdacf7
Read a Codex API key beside ChatGPT tokens as an API-key login, as Co…
dhh Oct 22, 2026
8d957f3
Keep a deleted pi session tying its forks, so a prompt they copied co…
dhh Oct 22, 2026
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
93 changes: 87 additions & 6 deletions bin/omarchy-agent
Original file line number Diff line number Diff line change
Expand Up @@ -140,18 +140,99 @@ kimi)
command=(kimi --yolo)
fi
;;
qwen)
# Bind the value so a prompt starting with a dash stays literal.
command=(qwen --yolo)
[[ -n ${prompt:-} ]] && command+=("--prompt-interactive=$prompt")
;;
dsh)
# The browser UI has no prompt option, and the headless profile would run the
# prompt with full access in a window that closes with its answer, so a
# prompt goes to the clipboard below instead.
command=(env DSH_PERMISSION_MODE=danger-full-access dsh web)
prompt_via_clipboard="DeepSeek Harness"
;;
mcode)
# The TUI has no no-approval flag; permission options belong to exec mode.
command=(mcode)
[[ -n ${prompt:-} ]] && command+=(-- "$prompt")
;;
kiro-cli)
# A positional input seeds the interactive chat; -- keeps a prompt starting
# with a dash literal.
command=(kiro-cli chat --trust-all-tools)
[[ -n ${prompt:-} ]] && command+=(-- "$prompt")
;;
freebuff)
# Freebuff takes no starting prompt and asks no tool permissions, so a
# prompt goes to the clipboard below instead.
command=(freebuff)
prompt_via_clipboard="Freebuff"
;;
kilo)
# Kilo is built on OpenCode and shares its flags. Bind the prompt so one
# starting with a dash stays literal.
command=(kilo --auto)
[[ -n ${prompt:-} ]] && command+=("--prompt=$prompt")
;;
devin)
# A bare positional is a path that opens Devin Desktop, so the prompt
# always follows --, which starts an interactive session with it.
command=(devin --permission-mode dangerous --respect-workspace-trust false)
[[ -n ${prompt:-} ]] && command+=(-- "$prompt")
;;
amp)
# Amp takes its first interactive message from piped input; a positional
# message is for --execute, which exits after one turn. The binary rides in
# as $0 so a user install below can replace it.
if [[ -n ${prompt:-} ]]; then
command=(bash -c 'printf "%s\n" "$1" | exec "$0" --dangerously-allow-all' amp "$prompt")
else
command=(amp --dangerously-allow-all)
fi
;;
commandcode)
# --yolo skips permission prompts and implies --trust. A positional prompt
# seeds the interactive session; -- keeps one starting with a dash literal.
command=(commandcode --yolo)
[[ -n ${prompt:-} ]] && command+=(-- "$prompt")
;;
*)
echo "Unsupported default agent: $agent" >&2
exit 1
;;
esac

# A user-installed Cursor or Muse still wins in the agent launcher even when
# mise's system lazy shim is earlier on PATH.
if [[ $agent == "cursor-agent" || $agent == "muse" ]] &&
[[ -f $HOME/.local/bin/$agent && -x $HOME/.local/bin/$agent ]] &&
{ [[ -L $HOME/.local/bin/$agent ]] || ! grep -q '^mise use -g' "$HOME/.local/bin/$agent"; }; then
command[0]="$HOME/.local/bin/$agent"
# An agent with no way to take a starting prompt still opens, with the prompt
# on the clipboard to paste as its first message, so a prompted launch from the
# agents panel or a crash report is not lost.
if [[ -n ${prompt:-} && -n ${prompt_via_clipboard:-} ]]; then
printf '%s' "$prompt" | wl-copy
omarchy-notification-send -g 󰅇 "$(omarchy-i18n agents.promptOnClipboard "$prompt_via_clipboard")" \
"$(omarchy-i18n agents.promptOnClipboardBody)"
fi

# omarchy-mise-install's wrappers run `mise use` and `mise x`, current ones on
# lines of their own and older ones after an inline variable; either way
# running one installs the tool it wraps. A symlink is the user's own install.
mise_wrapper() {
[[ ! -L $1 ]] && head -c 4096 "$1" | grep -qaE 'mise (use|x) '
}

# The user's own install in ~/.local/bin, which omarchy-default-agent counts as
# installed, still wins over mise's lazy shim earlier on PATH, which would
# install and run mise's copy instead. Once mise has installed its own, a
# terminal runs that one, so the launcher does too. OpenClaw's command runs its
# launcher, so its prompt is the only argument that could match the name.
user_install="$HOME/.local/bin/$agent"
if [[ $agent != "openclaw" && -f $user_install && -x $user_install ]] &&
! mise_wrapper "$user_install" && ! MISE_OFFLINE=1 mise which "$agent" &>/dev/null; then
for i in "${!command[@]}"; do
if [[ ${command[i]} == "$agent" ]]; then
command[i]=$user_install
break
fi
done
fi

# A new session uses the current selection rather than its parent's account
Expand Down
2 changes: 1 addition & 1 deletion bin/omarchy-agent-account-state
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ def grok_identity(home: Path) -> dict[str, str]:
"accountId": str(login.get("user_id") or ""),
"email": str(login.get("email") or ""),
"org": "",
"plan": str(settings.get("subscription_tier_display") or ""),
"plan": str((settings if isinstance(settings, dict) else {}).get("subscription_tier_display") or ""),
}


Expand Down
Loading
Loading