Commit Graph

  • cd3222d213 intent: a turn that only carries on from the one before — 继续, 好的就这么做, fix that — is of the kind that one was; the classifier is told what it said of the conversation's turn before, as it only saw the new message and put 继续 after a 复杂任务 among the simple ones. A message that asks for something of its own is still classed by itself (你是谁 after a 复杂任务 is 简单任务), and the Routing view says what it was told yetone 2026-09-26 22:51:17 +08:00
  • 13aa2049a4 intent: a group whose intents are levels — 简单任务 and 复杂任务, how hard a request is — has every message in one of them; the classifier was asked which kind of request a message is, with 0 for none, and put 你是谁 and 你好 in neither, so those turns matched no rule and went to the group's usual route (Claude Opus) rather than the simple one. It now picks the kind that fits best, answering 0 only when a message is plainly none of them: groups by topic still get 0 for a greeting or a poem yetone 2026-09-26 22:39:30 +08:00
  • ea5d089b4a gui: the Agents and Providers pages open at once again — the Providers page worked out each agent's model and routing group again for every provider (every provider's models read again each time, Alma asked over HTTP each time), so it took 25s with many providers; now once per page. What is parsed from a file is kept until the file changes (Codex's models cache, the vendors' model lists, ~/.claude.json's account, and an agent's TOML config — Codex's can run to megabytes of trusted projects, and was parsed again for every field); and what Alma answers when magpie only shows what it is on is reused for five seconds, as its providers take most of a second each time, while a change and what it reads first still ask Alma. /api/providers 25s → 0.02s, /api/state 7s → 0.1s yetone 2026-09-26 22:25:21 +08:00
  • dc10604f8e usage: gofmt the #90 test yetone 2026-09-26 22:22:30 +08:00
  • 6584fdd132 usage: the plans left out as ZCode's own are left out of a copy, not of PlanQuotas' cache, which a later ask within the minute would have found shifted and emptied. Issue #90 yetone 2026-09-26 22:22:18 +08:00
  • f02d37bba9 usage: a GLM Coding plan read with a Zhipu or Z.ai key is shown once when ZCode is signed in to the same account — the plan's card is left out when ZCode's card has its windows resetting at the same moments (the account's own), ZCode's card, which counts the calls, kept; another account's plan still has its card. Issue #90 yetone 2026-09-26 22:21:31 +08:00
  • 0218eeb5ca rtk: an agent left with the hook of an rtk that isn't installed (never was, or removed since) is shown with RTK missing — its shell commands fail — and can still be switched off: magpie takes out just what rtk's installer put in (the hook in settings.json / hooks.json, RTK.md and the @RTK.md line, Gemini's hook script, Copilot's instructions block, the OpenCode / Pi / OMP extension, Hermes' plugin) itself, needing no rtk, the files kept aside first; rtk's own uninstaller is no longer used, which deleted Gemini's GEMINI.md whole and took Claude Code, OpenCode and Cursor away together. Gemini is given rtk hook-only, so the user's GEMINI.md isn't written over. Install RTK on the page (and magpie library rtk install) installs rtk with Homebrew, winget on Windows, or rtk's own script into ~/.local/bin, only when clicked yetone 2026-09-26 21:53:05 +08:00
  • 2eb5015df3 accounts: Codex is signed in to its next ChatGPT account when the one it is on has used its allowance up — the Codex app, knowing its account is out, may not send at all, so magpie's failover never saw the turn: now the magpie serving the gateway looks every five minutes and, with another of Codex's accounts on in magpie that has room, switches Codex to the first of those as the Accounts page would (the one out stays on, next in line); a Codex started after that is on it. An account rests by its user, so the one Codex is switched to doesn't take over the rest of the one it left. Asked on Discord yetone 2026-09-26 21:32:42 +08:00
  • f2a30647d0 edit: a table's name is the parser's own key path, so [ a . b ] is the table a.b — space or tab around the dots of a header (both valid TOML) is not part of the name; a provider table a user wrote that way is reused in place, edited and taken away again as if magpie had written it, where before it was invisible and magpie appended a duplicate, refused as invalid TOML Zhizhen HeandClaude Code 2026-09-26 20:53:06 +08:00
  • 0f0b8fc87e gateway: Codex on one of its own models moves on to the next ChatGPT account when the one it is signed in to has used its allowance up — with more of Codex's accounts on in magpie, Codex's requests go through magpie even for its own models (openai_base_url kept, and put back or taken out as accounts are switched on or off) and are served as the codex subscription's, which fails over as its other models do; the account out of allowance rests until ChatGPT says it resets (resets_at), up to an hour at a time. Asked on Discord yetone 2026-09-26 21:11:42 +08:00
  • 04a189b863 update: a version downloaded and waiting for the restart no longer stops magpie looking for newer ones — the check every six hours still runs, and clicking Update asks the feed again first: a newer release out since is downloaded in its place (the badge shows the download, then restarts), so the restart goes straight to the latest instead of one release at a time. Asked on Discord yetone 2026-09-26 21:00:33 +08:00
  • 06dddf7f68 update: magpie update in a Homebrew install (brew install magpie, from the new tap in magpie-releases) says to brew upgrade magpie instead of replacing the binary in brew's Cellar, which would leave brew thinking the old version is there yetone 2026-09-26 20:50:26 +08:00
  • c4268e524f providers: a provider's id can change — its editor has an ID field (magpie provider set <id> id=<new> in the CLI), and renaming it moves what named it by the old one: the agents on its models (each spelled its own way, recorded as magpie's), the routing groups' members, rules and classifier, other providers' fallbacks, which agents are shown it, and the vendor's fetched list. The old id stays with it, so an agent still running on the old config reaches it, a profile saved before applies to the new id, and its usage so far is counted under the new one. Asked on Discord yetone 2026-09-26 20:22:30 +08:00
  • 87fb06d2f9 tui: a library page (5) — the shared instructions, MCP servers and skills magpie gives the agents, and RTK: ↵ lists the agents that can have one, each switched on or off in place; e edits the instructions in $EDITOR; the servers and skills found in the agents are listed too, i brings one into the library; d twice takes one out. The same data as the app's Library. Asked on Discord yetone 2026-09-26 19:40:58 +08:00
  • 631e4c3096 library: RTK (rtk-ai.app) can be switched on per agent — a Library tab lists the agents RTK has a hook for (Claude Code, Codex, Gemini CLI, OpenCode, Cursor, Copilot, Pi, OMP, Hermes), each with a switch that runs RTK's own installer (rtk init -g …) for it, keeping the files it edits aside first; which have it is read from their files, and the tab says RTK's version and the tokens it saved. RTK's installers for OpenCode and Cursor give it to Claude Code too, and its uninstaller for Claude Code or OpenCode takes all three: magpie keeps each switch to its own agent. magpie library rtk [on|off <agent>] does it from the CLI. Asked on X yetone 2026-09-26 19:25:20 +08:00
  • 7a3c434610 agents: Alma — magpie wires it through Alma's local API (localhost:23001, while Alma runs): choosing one of magpie's models for Alma adds a provider named magpie there (OpenAI type, the gateway's /v1, key magpie), offers magpie's models in it and makes the model Alma's default chat model, the rest of Alma's settings and its other providers left as they are; the list is kept current as magpie's catalog changes, and going back to Alma's own takes magpie's provider out. Asked on Discord yetone 2026-09-26 19:18:49 +08:00
  • 0e07ebd1b2 providers: the context window can be set in the app — a provider's editor has a Context window field, 128k for all its models or gpt-6=1m for one, comma separated, which agents are told over what the vendor or models.dev says (as magpie provider set … context= already did); empty leaves it to them again. Asked on X yetone 2026-09-26 19:16:31 +08:00
  • 4790c06b02 usage: each call keeps where it went — the provider's host, or the account it was — so a provider id later pointed somewhere else no longer puts the earlier place's tokens and cost under the new one: a model's usage is told apart by host (provider/model @ host) when its provider went to more than one place in the period, or to somewhere other than where it goes now. Asked on Discord yetone 2026-09-26 19:03:14 +08:00
  • 48071e9ab9 gateway: a Claude reply cut off by the context window says it was cut off (#88) Jeremy Levartovsky 2026-09-26 20:59:26 +10:00
  • d05763a5dc opencode: each model of magpie's carries its window (limit.context), a group's context= with it, so OpenCode compacts when the model needs it and not at its own guess; and magpie sync puts magpie's provider back into opencode.json when a model of magpie's is chosen there but the provider is gone. /v1/models says each model's window too (context_window, context_length, max_input_tokens, max_output_tokens). Asked on Discord yetone 2026-09-26 18:50:04 +08:00
  • 5dbd28c39e zcode: what you choose in ZCode for magpie stays — the provider turned off stays off, its rule stays where you moved it, and a rule you removed isn't put back on the next sync. gateway: a model that always thinks (GLM-5.3 answers 1210 to thinking turned off) is asked again with thinking left to it, rather than failing. Asked on Discord yetone 2026-09-26 18:45:49 +08:00
  • 9b06c30790 balance: a custom provider's balance field can name several amounts, each with a label, apart by ";" — Command Code's credits reply is 5h: windowLimits.fiveHour.used / windowLimits.fiveHour.cap %; week: windowLimits.weekly.used / windowLimits.weekly.cap %; $credits.monthlyCredits, shown as "5h 0% · week 3.4% · $70.00" wherever the balance is (Usage, magpie provider, magpie quota). Asked on Discord yetone 2026-09-26 18:41:01 +08:00
  • a1dd2b1222 routing: a turn on one of Codex's own models (gpt-5.5 and the rest, which go to ChatGPT with Codex's own sign-in) shows in the Routing view's live trace as those on magpie's models do — before, only magpie's were traced, so Codex on its own models showed nothing going on. Asked on Discord yetone 2026-09-26 18:31:46 +08:00
  • a77f7c1fcc gateway: a test that when a rule's vision model fails, the text-only member that answers is sent the conversation without its older images (#87) yetone 2026-09-26 18:25:16 +08:00
  • d583acaf46 fix: avoid sending group images to text-only fallbacks (#87) Charan RathoreandCharan Rathore 2026-09-26 15:55:34 +05:30
  • d2da93ef11 group: an unlisted text-only model still keeps images out of its group — whether a group takes images was asked of the listed models only, so an image went to a member kept out of the pickers that can't see it; now every member counts, as for the context since #86 yetone 2026-09-26 17:52:54 +08:00
  • 70a37c63f1 fix: count unlisted group members when routing long turns (#86) Charan RathoreandCharan Rathore 2026-09-26 15:22:49 +05:30
  • f0bd9fac87 cursor: its models have a context window — 1M for the ones Cursor names 1M, else 200K (less where the model's own is smaller), so Codex, Pi, OpenCode, Crush and the rest no longer take them for a small or unknown window; and Claude Code is given a 1M model as <id>[1m], its mark for one, so it no longer compacts at 200K (it drops the mark before asking, and magpie takes a value with it too). Asked on X yetone 2026-09-26 17:49:06 +08:00
  • 7b69b22a76 quota: what is left of every subscription, plan and key balance, for scripts and agents — magpie quota [<provider>] [--json] prints each window's use and remaining percent and when it starts again, and each key's balance; the gateway answers the same at GET /v1/magpie/quotas (only to this machine, as it names the accounts), so an agent can pick where to send its work (#85) yetone 2026-09-26 17:22:00 +08:00
  • c0e6d985de library: ZCode gets the library — its instructions go to ~/.zcode/AGENTS.md, its skills to ~/.zcode/skills and its MCP servers to ~/.zcode/cli/config.json's mcp.servers, where ZCode's own MCP settings keep them (a server of the user's there, and the file's other keys, stay as they are). magpie library … agents no longer takes an agent it has no place in for that: an unknown one, or one without MCP (omp) or instructions (Cursor), is refused with why, instead of recorded and given nothing (asked on Discord) yetone 2026-09-26 16:18:56 +08:00
  • ef26a21da9 tui: providers, groups and usage have pages in magpie tui — 1–4 (or [ ]) goes between agents, providers, groups and usage. Providers: ↵ turns its models on and off, e its key, a adds one of the presets, f its family, u unlisted, t tests it, b its balance, d removes it. Groups: ↵ opens one to add (a), move (J/K) and take out (d) its models, o its routing, f its family; n makes a new one, d removes it. Usage: today, 7 days, 30 days or all time (←→ t w m A), its tokens, calls, cost and errors, a bar a day, and by agent and by model. Asked for on Discord yetone 2026-09-26 16:15:46 +08:00
  • 73be42eca8 models: each agent can be shown only some of them — a provider or group gets a family (magpie provider set relay-x family=relay), and magpie visible zcode relay shows zcode only that family's models (or named providers and groups): in the files magpie writes for it and in what /v1/models answers it, told apart by its User-Agent; magpie models zcode lists what it is shown and what is kept from it, and magpie visible zcode all shows it everything again. A model kept from an agent is still served when asked for by name. Asked for on Discord yetone 2026-09-26 16:02:29 +08:00
  • 99fc679e38 sync: a passphrase that is the WebDAV password is refused — the server is sent the password, so with it the server could open the file it is only meant to hold sealed; pick a passphrase of its own yetone 2026-09-26 15:54:16 +08:00
  • 1c960ac62e claude: a turn in which Claude answered with two tool calls no longer gets stuck — Claude Code makes its MCP calls one after another, so the second was made only once the first had its result, while the agent ran both and sent both results back at once; the second result, for a call not made yet, was dropped, and Claude waited for it while the agent waited for Claude. A result sent before its call is now kept and handed over as the call is made, and only the results sent since the last answer are looked at (#84) yetone 2026-09-26 15:51:13 +08:00
  • 189c8949ed codex: one of Codex's own models picked while Codex is signed in with an API key OpenAI refuses (one a relay issued, left in ~/.codex/auth.json) failed with OpenAI's bare 401 "Incorrect API key provided" on every turn; the refusal now says it is Codex's own sign-in that was refused and to pick one of magpie's models in Codex or sign Codex in again yetone 2026-09-26 15:14:33 +08:00
  • c83e03d5c7 provider: how long a request a model takes can be set — magpie provider set <id> context=272k (all its models) or context.<model>=1m, and magpie group set <id> context=… for a group, which otherwise takes its shortest model's; agents are told it (Pi's contextWindow, ZCode, Codex's catalog, Grok, omp, dsh) over what the vendor or models.dev says, and the Providers and Routing views keep it when saved. An empty value clears it yetone 2026-09-26 14:39:55 +08:00
  • 0f9d60db07 library: the MCP servers an agent's app writes into its config itself (Codex's node_repl and cua_repl, run from inside its install) are told apart — not offered to bring in, shown as the agent's own and left as they are; magpie library lists what agents have that the library doesn't yetone 2026-09-26 14:34:53 +08:00
  • 5f839eae99 provider: saved Claude or Codex accounts that are not offered say why — under a HOME where the agent is not signed in (a magpie serve with its own HOME, no ~/.codex/auth.json or ~/.claude/.credentials.json there) they went missing without a word; magpie serve, magpie providers and the Providers view now tell yetone 2026-09-26 14:32:48 +08:00
  • cb609d2cb4 update: after an update on Windows one magpie is left, not two — a magpie running when another updated the binary (it runs on from magpie.exe.old) no longer downloads the update again to magpie.exe.new and swaps it in when it quits; it says a restart is all that is left. A magpie.exe.new that is magpie.exe over again is removed at start. The tray that found the gateway taken serves it once the magpie that had it is gone, checked every 15 s yetone 2026-09-26 14:30:16 +08:00
  • 6b39a69bf4 provider: a balance field can be a sum — paths into the reply and numbers with + - * / and brackets, "(1 - credits.monthlyCredits / 70) %" for what is left of a plan, a "%" after it showing a percent of 1; "data.total / 500000" and "$data.x" read as before yetone 2026-09-26 14:26:28 +08:00
  • 6bc43d5dab gui: on Windows, Open folder finds Explorer where Windows keeps it — it was looked for on PATH, and a magpie started without the Windows folder on its PATH said exec: "explorer.exe": executable file not found in %PATH%; now %SystemRoot%\explorer.exe. A PATH taken up from the registry after an install had %SystemRoot%\system32 made C:\Windows$\system32; it is expanded as Windows does yetone 2026-09-26 14:22:45 +08:00
  • 67c539d5da gateway: secrets can stay on the machine — with Settings › Privacy › Mask secrets on, API keys, private keys, tokens, JWTs and the passwords of connection strings and assignments in what an agent sends go to the vendor as placeholders like {{API_KEY_k3v9x2mq}}, and what the vendor answers has them back, streams included (a placeholder split between two events is put back whole, a tool call's arguments get the value escaped); personal data (emails, phone numbers, ID and bank card numbers, checksum-checked) and the user's own words can be masked too. A placeholder is the same for the same value every time, so a conversation's history and what the vendor cached of it stay the same turn after turn, and the request log shows what the vendor saw. Suggested on X as maskit's idea; written from scratch yetone 2026-09-26 14:21:12 +08:00
  • cdd1e8e7a4 group: a group's id can change — a group magpie found is group/auto-<model>, and agents could only pick it by that; now its id (any group's) is changed in the editor or with magpie group set auto-gpt-6-astra id=gpt-6-astra: the found one stays removed under the old id, the groups that have it in them and their rules follow, and an agent set to the old id is told it needs setting again (#83). magpie groups no longer says a group in a group is not served yetone 2026-09-26 14:14:24 +08:00
  • 0849cce8a1 gui: on Linux the window has no system title bar over its own header — GNOME drew one (the name and a ×) stacked on the tabs; the window now keeps GNOME's shadow and resize edges but shows no bar, and the page's header is the title bar: the icon and name, dragged to move, double-clicked to maximise, and a round × that hides the window to the tray. Reproduced and checked on Fedora 44 GNOME 50 (Wayland) yetone 2026-09-26 14:06:43 +08:00
  • fa9f018a93 gui: on Windows, Open folder starts Explorer and leaves it to open — Wails' way ran it on the thread the windows are drawn on, waited for it and killed it after ten seconds, and the buttons did nothing there; a folder that can't be opened now says why instead of nothing happening yetone 2026-09-26 13:59:02 +08:00
  • 67056512e0 codex: back on one of Codex's own models after another vendor's, the conversation goes on — another vendor's reasoning (an rs_… id with nothing sealed in it, as Volcengine writes it) went on to OpenAI, which keeps nothing (store is false), looked the id up and answered 404 "Item with id 'rs_…' not found" on every turn and compaction; it now stays out, and an item OpenAI still refuses (sealed content it can't verify, an id it doesn't have) is taken out and the rest asked again instead of the session stuck on it yetone 2026-09-26 13:59:01 +08:00
  • f3d567e07e agent: TOML tables magpie edits end where the parser says — a table no longer swallows the [[skills.config]] blocks that follow it. A write that would leave an invalid config is refused with its file, line and column Zhizhen HeandClaude Code 2026-09-26 12:49:32 +08:00
  • d4135b55e1 group: a routing group's models can be another group — group/<id> as a member, routed in its place by its own routing and rules, so Coder can be deepseek-v4-pro then Fast, a Coder rule can send a turn to group/fast and Fast's own rules pick within it; a group can't be in itself directly or through another (refused on save, left out of the picker), groups go at most 8 deep, and one can't be removed while another has it. The Routing tab shows a group in a group as a heading with its models under it, the packet going through it, and the log says what each group's rules and classifier decided yetone 2026-09-26 13:41:17 +08:00
  • 90ed57f077 docs: intent routing shows a real request in the Routing tab — a message asking for tests, told "writing or fixing tests" by deepseek-flash in 964 ms, goes to glm-5.3 by rule 2; light and dark, English and Chinese yetone 2026-09-26 13:08:47 +08:00
  • 4aea9a30cc gui: a subscription's quota says it is used — the card showed 47% where Codex shows 53% left of the same window, and it read as the two disagreeing (#81); it is now "47% used" (已用 47%) yetone 2026-09-26 12:43:12 +08:00
  • 7174df1932 dsh: each magpie model says its context window, longest reply and whether it takes images — dsh otherwise takes a million tokens of context, 256K out and text only for every model, so a 128K model overflowed and a vision model was sent no images (#81); the longest reply comes from the catalog's output limit, a group's is its members' least; older dsh ignores the fields it doesn't know yetone 2026-09-26 12:42:11 +08:00
  • f64d2fbaf0 intent: a reasoning classifier answered nothing now and then, and the turn after it wasn't classified — tested for real (20 coding messages, real models through magpie), deepseek-flash spent its 512 tokens thinking and answered "", and that 30 s rest skipped the next turn too; the classifier is now asked for its least reasoning (none, else its lowest level) with 2048 tokens, and an answer that isn't a number no longer rests it. DeepSeek V4 Flash, GLM-5.3 Flash and MiMo v2.6 Flash now get 20/20. The site's routing demo opens on By intent: a turn is classified once, goes to its rule's model, and its tool rounds stay there yetone 2026-09-26 12:34:55 +08:00
  • dc3f69163a gui: the top tabs are the panel's most-used switch and were 24px tall with 12.5px text — now 30px, 13.5px, with more room each side (10px when the header is cramped) yetone 2026-09-26 11:58:26 +08:00
  • f399af82d1 gateway: /v1/models says whether a model reasons and at which levels (#80) Erick Guan 2026-09-26 11:54:05 +08:00
  • d9ff79ae44 docs: Intent routing, in English and Chinese — when the classifier is asked and when not, the exact prompt and what of the message it sees, how its answer is read, what happens when it fails or is slow, the rest of the turn (held, failover, outgrown, waits, subagents), reading the trace, latency/cost/privacy, writing intents, the numbers, and a FAQ; with screenshots of the rules and the trace yetone 2026-09-26 11:30:09 +08:00
  • 9d092087a1 routing: two of a group's models on one provider are two rows — they go over the same keys, so the diagram told tries apart by key alone and showed the wrong model as answered; a try now carries the model it was for, and the trace names the agent (Claude Code, not claude) when the view opens before the app's state has come yetone 2026-09-26 11:30:08 +08:00
  • bc720c8d87 group: a rule can be for a kind of message — intent="writing or fixing tests": as a user's turn begins, the group's classifier (any model magpie has, best a small fast one) is asked once which of the intents that may match the message is, and the turn stays with the answer through its tool rounds; it isn't asked when no intent rule could decide, the same message isn't asked about twice, and when it fails or is slow (8s) no intent matches and it rests 30s. The trace says what it was asked and said; Routing's rule editor has "asks for" and the classifier picker, and magpie group rule add … intent=… classifier=… / magpie group rule classifier from the terminal. A sub-millisecond reply no longer shows as NaN s in the trace yetone 2026-09-26 11:09:13 +08:00
  • b9b412bb0e gateway: a Claude subscription run with no bridge ends without panicking — finish called removeRun on a nil bridge when the idle timer fired for a run made outside one, which crashed the gateway tests under -race yetone 2026-09-26 11:09:05 +08:00
  • 696c8e70e7 group: rules send a kind of turn to a chosen model — a group's Rules (Routing view, or magpie group rule add|rm|mv) put one of its models first for a turn that is long (tokens ≥ N), carries an image, asks for reasoning (on or at least a level) or comes from certain agents; the first that matches decides as the turn begins and the turn stays there through its tool rounds, moving only if it outgrows its model's context, the others staying behind it for failover; a subagent keeps a place of its own so a rule can send it elsewhere while its agent stays; the trace says which rule sent a turn where. Turn affinity also now sees past the system message Claude Code puts after tool results, which made each of its tool rounds look like a new turn yetone 2026-09-26 03:53:33 +08:00
  • 31fbf611e7 docs: what an import link's catalog gives — besides names, context sizes and reasoning levels it is the model list when the provider's /models can't be read and the prices behind the Usage page's USD estimate, and several ids may be given yetone 2026-09-26 02:47:19 +08:00
  • 6da20f50f6 gateway: an agent's run that fails mid-reply ends on the error — Claude Code, Cursor, Grok and Devin runs still wrote message_stop / response.completed / [DONE] after the error event, so a client could take the half reply as complete; the same fix #78 made for translated streams yetone 2026-09-26 02:15:23 +08:00
  • fa25a50936 gateway: a reply translated from a dying stream no longer reads complete (#78) Charan Rathore 2026-09-25 23:44:52 +05:30
  • f298bb4feb test: keep smart routing reset fixture within one hour (#77) Charan Rathore 2026-09-25 23:10:57 +05:30
  • c25cc6a5fd gui: the profile chips are a target to hit — 25px tall with 12px text under the agents, easy to miss for what the panel is most opened for; now 30px, 13px, with more room between them and bigger ↻ and × yetone 2026-09-26 01:38:08 +08:00
  • 257b6fa80e group: a removed found group is said to be removed wherever it is — once its model was down to one provider, magpie no longer found it, so magpie group rm said no group "auto-…" and magpie groups didn't list it though its record was still in providers.json; both now know it, restore takes the record out, and group help and groups say that the {"hidden": true} record is what keeps a found group removed yetone 2026-09-26 01:35:44 +08:00
  • 530734ff46 library: magpie library from the command line, and the app writes the library into the agents when it starts — there was no library command (status, sync, instructions get/set/agents, mcp add/agents/rm, skill agents/rm now), and Sync ran only from the page's button, so an agent installed or a file edited since kept what it had until the Library page was visited yetone 2026-09-26 01:32:35 +08:00
  • 7c3fa7d19e update: on Windows an update goes in while what the last one moved aside still runs — a magpie serve started before an update runs from magpie.exe.old, which then can't be removed, and moving the running exe onto it failed with "Access is denied"; it now goes beside it (magpie.exe.old-2…), the leftovers are removed once free, the download is kept for another try, and the Update button says Update failed (the error in its tooltip) instead of seeming to do nothing. Reproduced on Windows 11 with a running .old: the old swap fails, the new one passes yetone 2026-09-26 01:29:06 +08:00
  • 40812f1d2b gateway: a vendor saying the conversation is too long is said the client's way, so the agent compacts and retries — Volcengine's "Input exceeds the context limit (1048568 tokens)" reached Claude Code and Codex as a plain error they stop on; a 4xx that says the input is past the model's context (context_length_exceeded, maximum context length, prompt is too long, exceeds the context limit, 超过上下文…) now answers 400 with Anthropic's "prompt is too long: …" on /v1/messages and code context_length_exceeded on chat and Responses; one about max_tokens is left alone yetone 2026-09-26 01:26:23 +08:00
  • c330e20231 provider: an account's "only through routing groups" holds, and one removed stays removed — All() merged a signed-in account's picks without Unlisted, so provider listed claude no saved but claude/* stayed in /v1/models; and any save of an account rebuilt its entry without Hidden, so a removed one came back; a save now keeps it removed, and Add it back (and magpie provider add <account>, which made claude-2) goes through ShowAccount, keeping its picks; and magpie provider set <id> k=v… changes a provider with add's pairs (the v0.1.77 notes named it, it didn't exist) yetone 2026-09-26 01:24:08 +08:00
  • ac352a7755 provider(zcode): a ZCode subscription — Z.ai's GLM Coding Plan, as ZCode uses it: ZCode's own account is read from its credential store (~/.zcode/v2/credentials.json, decrypted as ZCode does, never written), and more are added from magpie with ZCode's own sign-in (zcode.z.ai's polling flow, then the account's zcode-api-key, made if missing), kept in logins.json beside it; requests go to the plan's Anthropic endpoint with the key, the models are ZCode's coding-plan list (GLM-5.3, -Flash, 5.2, 5-Turbo), and usage shows the five-hour and weekly credits. A phone sign-in is named by its number yetone 2026-09-26 01:37:01 +08:00
  • 1de4bbc715 agent(zcode): magpie's models reach ZCode 3.14 — it moved its providers to ~/.zcode/v2/provider_config.json and reads config.json's only once, to import them, so a magpie provider set up since never showed in its picker; magpie now writes its provider rule (standard-personal, api-key access, anthropic-messages at the gateway) and a model rule per model (context window, images) there too, keeps every other rule and a model the user set by hand in ZCode, and leaves a provider turned off in ZCode off. Checked against ZCode's own schemas yetone 2026-09-26 01:27:54 +08:00
  • a9aeb4d45f agent(codex): a Codex that couldn't reach magpie says so — the Codex app writes no history.jsonl, so a Codex it started while magpie wasn't running (the gateway refused it, and it built its model list without magpie's) or before magpie set it up (its requests still went to chatgpt.com or an old port) looked fine; magpie now reads the newest model request Codex logged since it was set (logs_*.sqlite, read-only, a day at most) and shows Apply again with the time and why, and to quit and reopen Codex yetone 2026-09-26 01:16:27 +08:00
  • c8aeff4cea gui: a picker opened upward sits on its button — with no room below, it was placed the most it could be tall (420px for a model picker) above the button, so a short list, like ZCode's two, hung a few rows up over another agent's row; opened upward, its bottom edge is held to the button now yetone 2026-09-26 01:13:06 +08:00
  • 1b5d1f87db agent: every agent on a magpie model says when it was taken off magpie behind its back, not only Codex — each checks what magpie wired into it to reach the gateway (Claude Code's env base URL and token, and a managed-settings base URL that wins over them; Gemini CLI's .env and its auth type; OpenCode, Pi, Crush, Command Code, Hermes, omp and Grok Build's magpie provider; DeepSeek Harness's llm-deepseek entry and its key in .env), and one pointed elsewhere or gone shows Apply again with what is off in its tooltip; Claude Code, like Codex, is also said to be bypassed when it was used and nothing of it reached the gateway (its history.jsonl), and slash commands no longer count as use. A test takes every such agent off the gateway and back yetone 2026-09-26 01:10:39 +08:00
  • 31aabbce43 provider: a key added or turned on has its models asked for at once - which models a key sees is known only from its own list, and since #76 an off key's isn't asked, so a key turned back on (or a new one) waited for the next Refresh: a relay that hands out a key per group sent it nothing, or every model; and a Codex reasoning item whose content is null is kept for OpenAI like one without content (#75 dropped it as malformed) yetone 2026-09-26 01:07:47 +08:00
  • fa38ca4a96 codex: omit incompatible reasoning before OpenAI replay (#75) herrkaefer 2026-09-25 12:06:41 -05:00
  • 3212566901 provider: a key that is off is no longer asked for its models - Fetch treated len(allKeys()) > 1 as "ask every saved key", and allKeys() includes the KeyAccount entries marked Off, so a disabled or expired key was called on every refresh and its list merged into the catalog, where a text-only answer could take image input off a model a key that is on serves; the live fetch path now uses KeysOn(), off keys get no requests and add nothing to the catalog, and turning a key back on includes it on the next refresh, covered by TestOffKeyIsNotFetched (#76) Charan RathoreandCharan Rathore 2026-09-25 22:36:36 +05:30
  • 04302b1e63 agent(codex): a Codex taken off magpie behind its back says so, with Apply again — something else rewriting config.toml (another switcher, an installer, a profile of its own) left the row showing a magpie model while Codex asked OpenAI for it, and the user blamed magpie; magpie now remembers what it set on each agent (applied.json) and tells three kinds of drift apart: the wiring gone (the provider table, catalog or base URL, or a profile overriding them), a magpie model replaced by one of Codex's own, and a Codex used since with none of its requests reaching the gateway (history.jsonl against when the gateway last saw it — an old process on an old config). A drifted row carries a coral Apply again pill on its name's line (a badge on the logo in the panel), the reason in its tooltip, Keep current settings in the row menu; the window asks /api/drift every 15s, so it shows without a reload yetone 2026-09-26 01:05:15 +08:00
  • 5474a977fc gui: magpie's Dock icon is sharp — the app was given the 64px icon, which macOS puts in the Dock in place of the bundle's .icns and scaled up to the Dock's size, so the magpie there was blurred; it is given a 1024px one (30 KB, from the same drawing, made by make icons), and the 64px one stays for the trays of Windows and Linux yetone 2026-09-26 01:03:28 +08:00
  • 75217233b8 provider: a custom provider can be added with only a Responses URL - the editor's base URL was the OpenAI (chat completions) or the Anthropic one, so a vendor that serves only the Responses API had to be given a chat URL it answers with 404, and Test failed on it; the base URL now takes a third kind, OpenAI Responses, which is saved as the Responses URL alone, tested at /responses only, and served to chat and Anthropic clients through the gateway; switching the kind moves the URL over, and More endpoints lists the other two (#73) yetone 2026-09-26 00:32:13 +08:00
  • 20fe8b4fac provider: a second Codex account's prompts stay cached when two saves share an mtime - the list on disk was merged, but the in-process cache re-read it only when ModTime changed, so a second write in the same tick left the first account's list in memory; a successful save now drops that cache, and a test puts the mtime back with Chtimes so the collision happens every run (#74) Charan RathoreandCursor Agent 2026-09-25 21:56:41 +05:30
  • 0396080cf6 provider: AiHubMix shows the whole account's balance when it has the account's access token — a key is told only what is left on itself, and one with no limit nothing at all, so its card said only "Usage unavailable"; the provider's editor now takes the System Access Token AiHubMix's settings generate (kept like the key, shown only as saved, kept when left blank, with Remove), and with it the card asks /api/user/self and shows its quota in dollars, one card for the account rather than one per key. Without one, the card says the key has no limit and where the token goes, and a token AiHubMix won't take says so; saving a provider has its balance asked again rather than a minute later yetone 2026-09-26 00:21:53 +08:00
  • afd831980a agent(zcode): the user-agent test knows ZCode's requests yetone 2026-09-25 23:57:00 +08:00
  • c0cbf90eeb agent(zcode): ZCode is an agent — its provider field puts every magpie model in ZCode's own model picker, as a provider named magpie in ~/.zcode/v2/config.json (kind anthropic, asked at the gateway's /v1/messages), kept in step with the catalog like OpenCode's list, and taken out again when cleared; its requests are known by the ZCode/ User-Agent (#72) yetone 2026-09-25 23:53:59 +08:00
  • 1dfbc10af8 agent(claude): a Claude account signed in through magpie on a Mac signs Claude Code in again — the sign-in went into the keychain as indented JSON, and security find-generic-password -w prints a password with a newline as hex, so Claude Code (and magpie) read no sign-in and the account never showed (#70); it is written on one line as Claude Code writes it, one magpie wrote before is read and rewritten, and the keychain account falls back to the login name as Claude Code's does yetone 2026-09-25 23:40:50 +08:00
  • b1c5e739f7 library: switching an agent on or off for an MCP server or a skill no longer makes the row flicker — the page was drawn again, so the chips lost their hover, folded together and spread out again under the pointer; the chip now shows the click at once and what magpie wrote is painted onto the same buttons (#69); and an agent hidden on the Agents page is left out of the Library too — its instructions row, its chips and the defaults for a new server or skill — while what it already has stays with it (#71) yetone 2026-09-25 23:03:53 +08:00
  • f1fba8d7eb usage: a GLM Coding Plan's allowance and OpenCode Go's show on the Usage page — Zhipu's (open.bigmodel.cn) and Z.ai's 5-hour and weekly windows and the month's MCP calls, with the plan's level, and OpenCode Go's 5-hour, weekly and monthly ones, each asked of the vendor with the provider's key, a card for each key when it has several; a pay-as-you-go GLM key, which has no windows, shows none (#68) yetone 2026-09-25 22:27:18 +08:00
  • 81342b1b05 provider: a custom provider can list its models from a URL of its own — Xiaomi MiMo's plans are served at their own hosts while the list is at api.xiaomimimo.com/v1/models, so fetching models from the base URL found nothing; More endpoints has a Models URL (模型列表地址), asked with the key and nowhere else, and magpie provider set <id> models.url=… sets it (#67) yetone 2026-09-25 22:16:11 +08:00
  • daaeee95b2 codex: preserve native compaction for built-in models (#65) herrkaefer 2026-09-25 09:12:30 -05:00
  • d36dbe46f5 chore: go mod tidy (#66) Zhizhen He 2026-09-25 22:11:19 +08:00
  • 9e7853906c gateway: a request for a reply of a token or two reaches a provider that answers no less (#64) — an app checking a model is up asks for max_tokens 1, which some providers turn away with 400 "max_tokens must be greater than 2"; the least the provider named is read from that error, and the request is sent once more asking for it (max_tokens, max_completion_tokens, max_output_tokens or Gemini's maxOutputTokens, whichever it set), before any of the reply reaches the app; the routing page says so yetone 2026-09-25 21:40:20 +08:00
  • d1fe7a32ae library: a skill CC Switch installed can be updated from GitHub — linked from ~/.cc-switch/skills it had no source, so it showed no update button; the repository and branch CC Switch recorded for it are read (read-only) from its database, and updating fetches the skill from there and makes it the library's own copy, leaving CC Switch's folder as it was yetone 2026-09-25 21:34:02 +08:00
  • 43a30080d0 gateway: an account or key added while an agent works no longer takes over its running conversation (#63) — who answered a conversation was remembered only when there were two or more to route to, so the first request after a second ChatGPT or Claude account (or key) was added went wherever routing put it, and Codex reasoning sealed by the first account came back 400 "The encrypted content … could not be verified" and ended the session; who answered is remembered with one as well, and matched by the key itself, not by an id that changes once a second key is on. A conversation that still reaches another account (the first used up, or magpie restarted) has the other account's sealed reasoning taken out and is asked again, and the routing page says so yetone 2026-09-25 21:28:57 +08:00
  • 618f529fb5 agent(grok): Grok Build's terminal front end, grok-pager, is known by its User-Agent as Grok Build's shell is — its requests were drawn as an unknown client named grok-pager, with no logo yetone 2026-09-25 21:22:12 +08:00
  • 70b7b3a058 routing: an account pool's Routing and Stays controls line up — each label sat inline before its segments, so the segments started wherever "Routing" or "Stays" (路由, 会话保持) ended, and at the window's usual width the two wrapped under the name on rows of their own; they are a label column and a control column now, beside the name yetone 2026-09-25 21:19:38 +08:00
  • 0423553454 gui: magpie can stay in the Mac's Dock — Settings → Dock → Show keeps it there as well as in the menu bar, for a menu bar too full to show its icon; it takes effect at once and at every start, the Dock icon opens the window (only the window: Wails would have shown the panel too), and it stays each computer's own in sync and backups yetone 2026-09-25 21:13:23 +08:00
  • 3173029853 agent: Grok Build starts on the model picked in magpie again — a signed-in grok takes xAI's remote campaign patches above config.toml, and the grok-4.7-launch campaign sets models.default to grok-4.7, so every new session started there whatever [models] default said (grok -p honoured it only without a sign-in). A default picked in magpie now writes [features] campaigns = false, a sync puts it back for a default already picked, and clearing the model removes it yetone 2026-09-25 21:09:07 +08:00
  • d89739425e gui: the window opens in the chosen language and theme — they came with the settings request, so with Chinese picked the tabs showed English for a moment first; boot.js in the page's head now carries both, so the first paint is already in them yetone 2026-09-25 21:07:16 +08:00
  • 081d8369e0 gateway: Claude 4.6 and later are asked to think adaptively — Codex on a relay's claude-opus-5-5 got "requires adaptive thinking; omit thinking or use thinking.type=adaptive", since magpie turned the reasoning effort into thinking.type=enabled with a budget; those models now get thinking.type=adaptive with the effort in output_config (xhigh as max), older Claude and other models keep the budget yetone 2026-09-25 20:59:08 +08:00
  • 925e4a6ccd provider: a provider can serve only through routing groups — ticked, its models leave the list agents pick from (and /v1/models) while the groups they are in, and a request naming provider/model, still reach them (magpie provider listed <id> no); the routing groups come first in the list; a model list fetched from the vendor can be forgotten; magpie group add under a name in use replaces that group; and the Library gives MCP servers to Claude Desktop, the ones it runs as a command — a remote one is added in its Connectors, which the page says yetone 2026-09-25 20:11:29 +08:00