yetone
db0b2c6860
gui(agents): the Agents view shows its rows' shape while it first reads the agents — the same shimmering skeleton the Providers, Gateway and Usage views have, an icon, a name and the two setting columns per row, with the profiles held back until the list is in; a reload keeps the rows it has
2026-09-25 04:36:11 +08:00
yetone
520a2425fc
gateway(routing groups, affinity) + gui(routing): routing groups — several models, from one provider or many, that an agent picks as one (group/<id>), routed over all their members' keys and accounts together, smart, in order, in turn or least used first; a model more than one provider serves is a group magpie finds on its own, and becomes the user's once changed. Affinity keeps a conversation with the key or account that answered it — for the session, within a turn, never, or by default while what the vendor read from its cache is worth keeping and not yet cold — so the prompt cache holds; in turn now spreads turns rather than requests, a turn's tool results staying where it began. The Routing view shows each agent's requests in its own colour, the magpie flying them through the gateway's box rather than jumping across it, groups and why a conversation stayed or moved; and a Hide emails switch blurs the email addresses on the page, for a screenshot to share
2026-09-25 04:07:40 +08:00
yetone
c3931c91df
codex: magpie's models join Codex's own rather than replacing them — signed in (ChatGPT or an API key), Codex keeps its built-in OpenAI provider and sign-in and is pointed at magpie with openai_base_url alone, so its official models still go to OpenAI on the user's own account, its threads (listed per provider) stay together, and the Codex app keeps its model picker; magpie's gateway answers at /backend-api/codex, passing Codex's own models through as they came, serving magpie's (provider/model) itself, and handing out OpenAI's model list with magpie's after it for /model. Compacting a magpie model's conversation is done by that model with Codex's own prompt; Codex's compressed request bodies are read, and usage is counted for both. Not signed in, magpie stays a provider of Codex's as before; a magpie set up that way moves over the next time a magpie model is picked
2026-09-25 02:42:24 +08:00
yetone
0281df4d87
gui(routing): Routing is a view of its own, beside Gateway — the Gateway view keeps to connecting and the model list; Routing plays each request with room to spare, every request the gateway keeps is listed (when, the agent and the model it asked for, who answered and with what model, the tries, how long, the tokens) and picking one shows how it was routed, and each account or key those requests weighed says how often it was tried, answered and failed, what it answered with, when last, and whether it rests; the model each account or key is asked for shows on its row and in the story
2026-09-25 02:35:38 +08:00
yetone
af5889085a
gateway(routing, live): the Gateway view plays what routing does with each request as it happens — the site's Model Routing stage, driven by the gateway's own trace: the agent, magpie with the provider's routing, and its accounts or keys in the order routing weighed them, each saying what it was weighed by (how much is used and when it renews, kept for last, not known yet, resting and until when, left out as its plan doesn't list the model); a request travels to the one put first, one that fails shows what it answered and hands it on, and the story beside it says why the first went first, why each other stands where it does, how long a failed one rests and what said so, and what the agent got; recent requests can be picked to see how each was routed, and the counts are the gateway's since it started. Nothing is worked out again in the page: the gateway records each decision where it makes it. A vendor's Retry-After and rate-limit reset headers now come through with its error, so a rate-limited key or account rests as long as the vendor says rather than a minute
2026-09-25 02:28:32 +08:00
yetone
b225ace50c
gui(panel): no dark band at the bottom while the tray panel grows — WebKit draws the page a frame or two after the panel's frame moves and filled the new edge with its own dark background; on the Mac the panel's webview now draws no background of its own and the page's colour is painted in a view under it that the system sizes with the panel, so the new edge comes in the page's colour until the page catches up. It looks as before; a change of theme fades it along; elsewhere, or when the webview won't, the page paints itself as it did
2026-09-25 02:19:32 +08:00
yetone
497f2cac6e
ci: Windows compiles the tests rather than running them — they fake a home through $HOME, which Windows doesn't read
2026-09-25 02:11:01 +08:00
yetone
fb258266ee
ci: vet and test on Linux, macOS and Windows for every push to main and every pull request, and build the terminal-only magpie
2026-09-25 02:08:26 +08:00
yetone
03188b86b2
gateway: routing by reset is thorough — only the windows that count a model do (Opus's own weekly allowance used up leaves the account to Sonnet), the week decides and the five hours in it settle a tie, a window whose reset has passed counts as empty, and Grok's on-demand spending and Copilot's completions don't stop an account; the first requests after magpie starts wait a moment for the allowances rather than going in plain order; Copilot's accounts are each asked for their allowance, which renews on the day GitHub says, and have a Usage card each; a subscription out of its allowance rests until the window it filled renews (or when Claude Code says it resets), and is asked again what it has left; "You've hit your limit · resets …" is known as out of quota
2026-09-25 01:57:27 +08:00
yetone
db59d15ed4
gui(panel): the tray panel's height glides with the agents' scroll as it unrolls and rolls up, on the same beat and curve, its top edge held under the menu bar — on the Mac the system animates the frame on its own display clock, elsewhere it steps a frame at a time; a fit that doesn't ask to glide still sizes at once, and make dev shells from before still size
2026-09-25 01:53:21 +08:00
yetone
c83a07d63b
gui(agents): Show more unrolls the other agents like a scroll, and Show less rolls them back up — the height opens on a long ease-out while each row fades and settles in a beat after the one above, the moving edge soft; rolling up is quicker, bottom row first. The agents in use stay put above, the chevron turns, and the tray panel makes room before unrolling and gives it back once rolled up
2026-09-25 01:45:37 +08:00
elonnzhang
2432d2ca88
gui(agents): fold the agents nothing is set on behind Show N more ( #41 )
...
The agents card lists every detected agent, and on most machines
most of those rows read "default" — nothing has been set on them.
This keeps the ones that have a model or an effort of their own and
folds the rest behind a "Show N more" row at the end of the list.
A magpie with nothing set yet still shows every agent, since folding
all of them would leave the card empty. The toggle only appears when
something is actually folded.
Frontend only — three files under internal/gui/assets, no change to
state() or to settings.
2026-09-25 01:40:07 +08:00
yetone
37e8f7c045
header: in a narrow window the name steps aside, leaving the magpie, and Update becomes its arrow; narrower still, the tabs sit in the row instead of over it
2026-09-25 01:35:24 +08:00
yetone
90580ca7e1
update: Update updates magpie in place — a click downloads the new version and restarts into it, asking for the password when magpie can't replace itself, instead of opening the release page; only a magpie running from its disk image or a temporary copy is sent to the download page, with why
2026-09-25 01:35:24 +08:00
yetone
4091b9dfd5
dsh: switching the model works on dsh 0.1.5 — it reads each profile's cordis.patch.yml (profiles/web, desktop, …) rather than ~/.dsh/config.yaml, so magpie writes there: agent-default-model for the model new sessions start on, and llm-deepseek naming its key as a credential (MAGPIE_API_KEY, in ~/.dsh/.env) since the entry no longer takes one; a model picked inside dsh, saved in its settings, gives way to one picked in magpie; older dsh keeps config.yaml as before; dsh's own deepseek-flash is on the list
2026-09-25 01:34:27 +08:00
yetone
b498b1fb02
settings: the Community row is a Discord-coloured "Join Discord" button with Discord's mark, quiet until hovered, in place of a plain link and a "Join ↗"
2026-09-25 01:28:08 +08:00
yetone
d8ee8d1af3
community: magpie has a Discord — the site links it from the header, the footer and a card above the download, Settings has a Community row that opens it, and the README a badge and a Community section
2026-09-25 01:22:16 +08:00
yetone
c65a1f5187
import from other apps: an app with nothing to bring over no longer breaks the dialog — its list came back null, and the dialog stopped at "null is not an object (evaluating 's.items')"; Claude Code's tab shows Claude Code's mark instead of a missing image
2026-09-25 01:22:16 +08:00
yetone
ce7c8367a1
header: the magpie flaps its wing, flicks its tail and bobs as the window opens and when the pointer comes over it (not with reduced motion); it sits a little further from the traffic lights, and off the Mac it is left out, since the title bar above already shows the icon and the name
2026-09-25 01:15:28 +08:00
yetone
477e8ecc8f
window: the tab, and the provider open in the editor, are kept in the address (?view=providers&edit=<id>), so a reload comes back to them
2026-09-25 01:15:22 +08:00
yetone
a04eabd92e
gateway: on Windows the examples are PowerShell — $env: for the variables and the curl.exe that ships with Windows, the body on stdin since Windows PowerShell drops the quotes inside an argument; the snippet's copy button stays in the corner however far a long line scrolls; and with no models the list says so instead of showing a script error
2026-09-25 01:15:15 +08:00
yetone
deb0d9e5e8
usage: Cursor's allowance shows on the Usage page, and every card names the account it is for; an agent with several Claude or Codex accounts is one card with a section per account, the one it is signed in to first
2026-09-25 01:15:09 +08:00
yetone
ecaaf888b5
providers: a provider with several keys has its models asked with each key, and each model remembers which keys see it — a relay that hands out a key per group lists each group's models to its key only; requests go to a key that lists the model (every key when none does), and Test signs each endpoint with a key made for it and asks for a model that key sees
2026-09-25 01:15:02 +08:00
yetone
9a0078f08c
dev: a Go change under make dev rebuilds and restarts only the backend — the API and the gateway — behind windows and a tray that stay up, and the page refreshes what it shows in place, keeping its tab and anything open; a build that fails leaves the running backend be (build/dev.sh)
2026-09-25 01:14:56 +08:00
yetone
919585d170
settings: Open shows the config folder in Finder, Explorer or the file manager — it handed a file:// link to the browser, which did nothing; the page asks for the folder by name only, so it can't be made to open another path
2026-09-25 01:14:48 +08:00
yetone
2b1e9e8619
usage: the Usage page shows what is left on an API key beside the subscriptions' allowances — DeepSeek, Kimi, OpenRouter and SiliconFlow are asked by their hosts, and any custom provider can name its balance endpoint and where the amount sits in the reply (Balance URL / field in the editor, balance= / balance.path= in the CLI), each key it has on asked with itself; magpie provider <id> prints it too ( #40 )
2026-09-25 01:12:18 +08:00
yetone
4a0719f236
codex: its own models, picked in Codex through magpie beside third-party ones, keep what Codex knows of them — image input, context window, tools, as its models cache has them — under magpie's id; they were given the entry of a third-party model, text only
2026-09-25 01:09:22 +08:00
yetone
9467970b0e
cli: magpie accounts lists each subscription with its allowance — every window's share used, what is left and when it resets, like the window's cards; magpie accounts [agent] --json gives the same for scripts ( #39 )
2026-09-25 00:13:51 +08:00
yetone
5420466de1
routing: a ChatGPT account standing behind another is skipped for a model its plan doesn't have — each account's models are asked with its own sign-in when models are refreshed, so a Free one behind a Plus is no longer sent a model it answers with a 400; when no account lists the model, every one is still tried
2026-09-25 00:07:09 +08:00
yetone
837923c435
providers: the page shows its rows as they load, skeletons in the shape of the list, until the providers are in — it was blank on first open; a reload keeps the list it has
2026-09-24 23:40:09 +08:00
yetone
fa30d2b8ce
subscriptions: a ChatGPT account lists the Codex models of its own plan, asked from ChatGPT with its own sign-in when models are refreshed — it was Codex CLI's cache, which is of whichever account Codex CLI last asked with, or nothing if it never ran, so a Free account was offered models its plan answers with a 400
2026-09-24 23:38:50 +08:00
yetone
1c19887e90
subscriptions: signing in to Claude over credentials a logout left behind makes the new account the one Claude Code uses — magpie took the stale keychain item and profile for a live sign-in, so the new account was kept beside it unused while Claude Code said it was signed out, and no Claude provider showed up ( #31 )
2026-09-24 23:10:02 +08:00
yetone
41931e2895
agent: omp (oh-my-pi) — its model picked in magpie like any agent's; a model through magpie adds magpie as a keyless provider in ~/.omp/agent/models.yml with the catalog as its models, and sets config.yml's modelRoles.default to magpie/<provider>/<model>; its other roles and the rest of both files stay as they are, comments too, and default takes magpie's entry out unless another role still uses it ( #34 )
2026-09-24 22:36:15 +08:00
yetone
82a109eab5
picker: a model starred in one agent is a favorite in every agent — magpie's models are starred by their catalog id, not the agent's own spelling of it, so the favorites tab no longer comes up empty ( #33 ); Codex's own models follow the ones ticked on its ChatGPT subscription ( #36 ); the effort slider shows a dot at every level ( #37 ); and a relay Claude Code was pointed at in its own settings.json can be brought in from Import from other apps, as a provider like any other ( #35 )
2026-09-24 22:27:59 +08:00
yetone
440e535b29
subscriptions: a Claude account is its email within an organization — a Team seat on the email of a personal Pro or Max is added beside it, as "email · Team name", instead of replacing it; signing in again brings back a Claude, ChatGPT or other subscription that had been removed from magpie, which is why a sign-in could finish and nothing show up; and a new provider can no longer take a subscription's id (claude, codex, …), which hid that subscription once signed in ( #31 )
2026-09-24 22:20:04 +08:00
yetone
be1b3967f4
agent: Command Code — its model picked in magpie like any agent's; a model through magpie adds magpie as a keyless provider in ~/.commandcode/providers.json with the catalog as its models, and sets settings.json's model to magpie/<provider>/<model>; its own models stay as they are, and default takes magpie's entry out; Command Code still wants its own sign-in ( #32 )
2026-09-24 21:44:09 +08:00
yetone
34a03fb0d8
site: the smart routing demo runs on a clock — each request an hour, every account counting down to its reset; Claude Max, resetting soonest, goes first and renews with little left unused, then resets last, and Claude Pro, next to reset, takes over; the point on it is now reset-aware
2026-09-24 21:35:59 +08:00
yetone
ad1395f3bc
routing: smart routing goes by when each account's allowance resets — of the accounts with quota to spare, the one renewing soonest goes first, since what it has left is lost at the reset while one renewing later keeps; one whose reset isn't known comes after, a few minutes apart counts as the same hour so the prompt cache stays warm, and running low still keeps an account for last; the site's routing demo shows each account's reset
2026-09-24 21:29:34 +08:00
yetone
e2051a4268
site: the routing demo adds a second Claude subscription — a Claude Max and a Claude Pro side by side, the Pro rate limited and passed over for the next, beside ChatGPT, OpenRouter and Copilot
2026-09-24 21:01:22 +08:00
yetone
13a1604070
site: the smart routing demo shows real vendors — a Claude Max, a ChatGPT Pro, an OpenRouter key and a Copilot Business seat, each with its vendor's icon, and the captions name them by vendor
2026-09-24 20:50:15 +08:00
yetone
efbe5660b0
backup: everything set up in magpie carried to another machine in one file — magpie backup writes the providers with their keys (or none, with --no-keys), the pictures picked for them, the settings, the profiles and every agent's model, sealed with a passphrase (AES-256-GCM, PBKDF2-SHA256) so nothing in it reads without it; magpie restore puts it in, replacing providers by id, keeping the keys already there for one that came without, and setting models only for the agents installed there; subscriptions stay with the machine they were signed in on ( #28 )
2026-09-24 20:34:15 +08:00
yetone
96e44c67d5
agents: DeepSeek Harness (dsh) — its model picked in magpie like any other agent's: dsh's own V4 Pro and Flash, or any model magpie serves, which puts the gateway in ~/.dsh/config.yaml with the whole catalog in dsh's /model; the TUI, dsh -p and dsh web all start on it, the user's own entries stay, one magpie replaced comes back when it's set back to default, and a DeepSeek endpoint set in dsh's settings, which dsh puts over it, is pointed out ( #27 )
2026-09-24 20:22:22 +08:00
yetone
bf78700655
site: smart routing shown working — requests travel from Claude Code through magpie to the account the strategy picks, a tab for each (smart, in order, in turn, least used first); an account running low is kept for last, one answering 429, 402 or 503 sends the request back to magpie for the next, rests as long as it should and comes back, captions say what happened, and the count of errors that reached the agent stays at 0
2026-09-24 20:11:28 +08:00
yetone
2cba789189
site: the Providers screenshot's logo lines up with the icons under it — the gap the window's traffic lights leave is gone from the crop
2026-09-24 19:56:36 +08:00
yetone
bba15a4ee6
site: smart routing on the home page — a section of its own, linked from the nav: several accounts and keys on at once, the first kept while it has quota to spare, one out of credit, out of quota or rate limited passed over until it can answer, a failing one stepping back while the next answers; beside it a card of four Claude accounts, one serving and the others resting, each saying why
2026-09-24 19:47:20 +08:00
yetone
1a0b1f9fea
providers: smart routing, a Copilot subscription signed in from magpie, and import by app in tabs — Smart, now the default, keeps the first key or account while it has quota to spare and moves to the one with the most left as it runs low; one out of credit sits out half an hour, one out of quota until it says it resets, one rate limited as long as the vendor asks, and one failing a minute, longer each time; Copilot gets a tile of its own that signs in with GitHub's device code (the code shown in magpie), several accounts beside the editors' own; Import from other apps shows a tab per app it reads, each with how many providers it has to bring over
2026-09-24 19:41:34 +08:00
yetone
f7d5b6773c
providers: several accounts of every kind in use at once, and routing over them — a Grok subscription can add more accounts, each signed in by grok login in a home of magpie's so the CLI's own sign-in is never touched, one first and the rest behind it; a provider with several keys or accounts on picks how requests spread: in order (the next takes over on quota, rate limit or failure), in turn, or least used first (a subscription by the share of its allowance used, a key by the tokens magpie sent it lately); failing ones still rest a minute at the back
2026-09-24 19:06:46 +08:00
yetone
97d9a69dd8
providers: import from other apps lists them by name, each with its own icon and a Select all for what it has to bring over; a vendor already in magpie says so on a line of its own, and its choices (another key, keep both, replace) stay on one line
2026-09-24 18:55:52 +08:00
yetone
0b0f258c0f
providers: import from other apps — the add sheet's Import… reads the providers CC Switch (its database, or the older config.json) and Alma have set up, read-only, and lists them to pick from: what magpie has already is marked, a key for a vendor that is already here can join it as another key, an id in use is kept beside or replaced, and sign-ins, Azure, Gemini-protocol relays and entries pointing at magpie itself are shown but not offered; keys are read again on import and only reach the window masked
2026-09-24 18:48:08 +08:00
yetone
e1d211cc4b
provider: a Copilot CLI sign-in is found — who from ~/.copilot/config.json (JSONC, COPILOT_HOME honoured), the token from the keychain's copilot-cli item or the file's plaintext copilotTokens; the CLI's token is not traded for a session token (that answers 403) but sent as is under the CLI's own integration, at the API its account is served from
2026-09-24 18:24:03 +08:00