Commit Graph
51 Commits
Author SHA1 Message Date
smallnest 03a01a548d agent: MiMo Code — Xiaomi's fork of OpenCode, sharing its config shape (#98)
* agent: MiMo Code — a terminal coding assistant that is Xiaomi's fork of OpenCode, whose config keeps OpenCode's shape: its own mimocode.json(c) under ~/.config/mimocode, its auth beside it, and a magpie provider block with npm/@ai-sdk/openai-compatible, model and small_model fields. opencode() becomes openCodeLike() for the two to share it, and magpieProviderJSON splits shape from the catalog id (magpieProviderJSONFor), so a visibility narrowed on mimocode (magpie visible mimocode …) narrows its list and leaves OpenCode's alone. The library gives it the same instructions, MCP servers (its mcp key) and skills as OpenCode, except the shared skills go into its own skills/ folder: it reads Claude Code's skills only behind a flag, though it reads its CLAUDE.md like OpenCode, and the page says so. Its requests are told by the mimocode/ User-Agent. Checked against XiaomiMiMo/MiMo-Code

* icon: MiMo Code's own favicon, from packages/ui/src/assets/favicon — its frame with the bottom bar, in the monochrome the app masks to the text colour
2026-09-27 08:42:44 +08:00
yetone 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 2026-09-26 19:18:51 +08:00
yetone 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 2026-09-26 13:41:17 +08:00
yetone 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 2026-09-26 13:08:47 +08:00
yetone 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 2026-09-26 12:34:55 +08:00
yetone 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 2026-09-26 11:30:09 +08:00
yetone 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 2026-09-26 11:09:13 +08:00
yetone 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 2026-09-26 03:53:33 +08:00
yetone 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 2026-09-26 02:47:19 +08:00
yetone 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) 2026-09-25 23:53:59 +08:00
yetone 032bcfc8b0 provider: the Grok subscription is called Grok (SuperGrok) — the plan xAI sells, so it reads as the account it signs into; Grok Build stays the name of the agent, the grok CLI the subscription runs through 2026-09-25 18:33:21 +08:00
yetone f7112a9e9d agents: Grok Build — xAI's grok CLI — is an agent: its model is set in ~/.grok/config.toml ($GROK_HOME), and a model through magpie adds the catalog there as [model."magpie/…"] tables pointed at the gateway with magpie's own key, so a request never carries the user's xAI sign-in and the catalog joins Grok's own models in /model; its effort is [models] default_reasoning_effort, its requests are known by grok-shell; the Grok subscription is called Grok Build too 2026-09-25 18:26:50 +08:00
yetone bea2cec91f site: the Routing shot shows four agents — Claude Code, Codex, OpenCode, Crush — sending at once through three routing groups, with Kimi rate-limited and sitting out; in every shot the magpie icon lines up with what's under it, where it had kept the room the Mac window leaves for traffic lights a screenshot doesn't have; and the homepage's Providers shot ends where its list does 2026-09-25 17:21:21 +08:00
yetone 7d0069ab93 site: the import docs come in Chinese too (/docs/zh/import, with its own screenshot of the dialog and the link builder's messages in Chinese), and each page links to its other language; the start docs show what each step looks like — the Add provider sheet, the Agents window, routing groups and Usage — in light and dark, English and Chinese 2026-09-25 16:41:48 +08:00
yetone 637b2458ee provider + gateway: Google sign-ins — Gemini CLI's and Antigravity's — are subscriptions of magpie's, so any agent can use their models (#4); Gemini CLI's own login in ~/.gemini is read as it is, or an account is signed in from magpie with Google's OAuth, its token refreshed in memory, and each request goes to Code Assist wrapped as the app wraps it, with the project Code Assist set the account up with; Google now serves Gemini CLI's sign-in only to Code Assist Standard and Enterprise, which need a Cloud project, named with magpie accounts project or GOOGLE_CLOUD_PROJECT in ~/.gemini/.env and said so where the account is shown; Google may suspend an Antigravity account used outside Antigravity, so magpie says that and asks before adding one 2026-09-25 15:53:33 +08:00
yetone 2779d03caa provider: Ollama Cloud is a preset of its own, with Ollama's icon and where to get a key (ollama.com/settings/keys) — its hosted models answer the local server's API at ollama.com with a key: chat at https://ollama.com/v1, Anthropic's messages at https://ollama.com, and the model list from /v1/models, and models.dev's ollama-cloud names them; the import links take it too 2026-09-25 15:02:31 +08:00
yetone ea09310872 site: the getting-started guide says outright that a model two providers serve becomes a group by itself — group/auto-<model>, over every provider serving it, the name matched however each vendor spells it, hidden with magpie group rm — which it said in passing, and someone trying magpie found it out by testing and asked for it to be written down 2026-09-25 14:48:28 +08:00
yetone 6882ceac7d site: a getting-started guide, in English at /docs/start and in Chinese at /docs/zh/start (/docs and /docs/zh open it) — someone who runs Claude Code, Codex and Paseo every day found magpie confusing at first and the site had only the Add to magpie page for vendors; the guide says what magpie is for and how the setup goes: add the providers you have (subscriptions signed in to in magpie, a vendor's preset and its key, any compatible URL, or Import… from Claude Code and Codex), pick a model for each agent and what that writes into its config, a new session to pick it up, then routing groups when there are several accounts (the Routing view and magpie group), Usage, profiles, the commands and a short FAQ, the Chinese one in the app's own Chinese labels. The home page's Docs link and every docs page's nav and footer lead to it, and on a phone the docs nav keeps the brand, the language, the theme and Download 2026-09-25 14:18:13 +08:00
yetone b3705cbb5a cli: routing groups are made, changed and removed from the terminal too (#55), where only the Routing view could — magpie groups lists them, yours then those magpie found (a removed one named with how to bring it back, a member no provider serves now marked so, the agents set to each); magpie group add <name> models=<m1>,<m2> routing=smart|order|rotate|usage stays=auto|session|turn|off makes one, its id taken from the name and numbered past one taken as the Routing view does; magpie group set <id> k=v… changes name, routing, stays and the models — models= the whole list in order, models+= and models-= one at a time — and changing one magpie found makes it yours; magpie group rm hides one magpie found, for magpie group restore to bring back; magpie group <id> shows one. Each saves through the same code the Routing view's does, so the file holds the same group and agents' model lists follow the change. A model is its provider/model id as magpie models lists it, or a bare model id one provider serves; one no provider serves, or several do, says which it could mean, and a routing or stays value magpie has none of says the ones it has, where the saved group would have quietly gone back to the default 2026-09-25 14:06:15 +08:00
yetone b72985a9cc agent: add Hermes Agent (#49) — magpie adds itself to ~/.hermes/config.yaml ($HERMES_HOME) as the provider "magpie" under providers (the gateway as chat completions, the catalog as its models) and points model.provider at it, with the model in model.default; the provider and model the user had are stashed and put back when they pick one of Hermes's own or go back to the default. Hermes sends its own User-Agent only from a recent release on, so the entry sets it for the gateway's usage view 2026-09-25 09:08:08 +08:00
hanhotfox cd0eccfa58 agent: add Devin (#43)
* agent: add Devin — model via agent.model in config.json, subscription via devin acp over ACP

* gateway: surface devin acp read errors to waiters

* providers: fix devin sign-in exchange; account editor and picker fixes

* gateway: scope the devin deny rules and copy credentials when a link can't be made

* gateway: note devin never rewrites credentials.toml during a session
2026-09-25 07:16:21 +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 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 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 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 eaf0b55de1 site: the worker adds the Web Analytics beacon to each page itself — Cloudflare's automatic injection skips responses a worker returns, and since the www redirect every page is one 2026-09-24 17:34:37 +08:00
yetone c2a6d0bf8e site: www.usemagpie.ai redirects to usemagpie.ai on every page — the worker now sees each request, not only /api and /download, so the static pages stopped being served twice 2026-09-24 17:33:44 +08:00
yetone 545506e875 provider: an import link can name the vendor's own icon
magpie://import now takes icon=<https picture>: the vendor's logo, PNG,
JPEG, GIF, WebP, ICO or SVG. It is fetched once, when the user opens the
confirm dialog — never at parse time — into magpie's icons folder, and
falls back to the catalog's logo or a plain mark when the fetch fails.
An explicit icon= wins over whatever catalog or preset gave.

The fetch is guarded on the way out: https only, at most 1 MB, the type
checked, and the host is resolved at connect time with loopback, private,
link-local and reserved addresses refused, so a name that points back at
the user's own machine (or a DNS-rebinding trick) never connects. The
page and the dialog never load a remote picture themselves.

IconURL is a carrier between parsing and that fetch only; Save drops it,
so it never reaches providers.json.
2026-09-24 17:13:03 +08:00
yetone a6a3ffbe4b site: a sponsor spot under the hero, with 鱼鱼连线 (YYLX AI Router) 2026-09-24 13:47:54 +08:00
yetone 4069e955c1 site: import links need 0.1.8 2026-09-24 12:21:32 +08:00
yetone 3d4d4b9c2b site: Add to magpie docs, the /import landing page and badges
usemagpie.ai/docs/import explains import links, with a link builder and
buttons to copy; usemagpie.ai/import#… turns the fragment into a
magpie:// link and offers the download. install.sh registers the scheme
on Linux.
2026-09-24 12:17:47 +08:00
yetone 489c9fa431 site: screenshots keep their shape on narrow screens 2026-09-24 03:59:12 +08:00
yetone 01e1971a7b site: downloads for Windows and Linux
The download button follows the visitor's OS, a platform list sits under
the final call to action, /download/{windows,linux}[-arm64] redirect to
the builds, and install.sh installs the Linux desktop app, with a menu
entry, when WebKitGTK 4.1 is present.
2026-09-24 03:22:02 +08:00
yetone b98af9acc6 site: the GitHub link no longer switches the theme
It shares the .theme style with the theme button, so the click handler
went on both. The handler and the tooltip now bind to button.theme only.
2026-09-24 03:04:09 +08:00
yetone 7198ba218d Revert "site: reshoot the panel, picker and providers on the current build"
This reverts commit 82e25aa2d7.
2026-09-24 02:56:46 +08:00
yetone 82e25aa2d7 site: reshoot the panel, picker and providers on the current build
The screenshots still showed the row's + and an older control column. New
shots, dark and light, off a throwaway demo config (the same DeepSeek/Kimi/
GLM/Qwen/MiniMax/OpenRouter/Anthropic/Gemini set). The panel is a hair taller
now, so its height goes 470 -> 476.
2026-09-24 02:54:41 +08:00
yetone 912b3a79ce site: the ChatGPT plan is a provider too 2026-09-24 02:33:19 +08:00
yetone cd4f97e326 "Every agent's model": magpie is not only for coding agents 2026-09-24 02:30:23 +08:00
yetone b3aa852326 site: back to "Every coding agent's model. One place." 2026-09-24 02:29:18 +08:00
yetone 45b25253d2 site: no purple; the gateway card and OG image stay black and white 2026-09-24 02:28:03 +08:00
yetone 4b251650b8 site: the gateway card is light in light mode 2026-09-24 02:18:17 +08:00
yetone 6c99ab01ef Open source under MIT; the site shows third-party models in every agent
The site leads with what magpie is for: Codex on DeepSeek, Claude Code on
Kimi. New screenshots (Codex's picker, the panel, Providers), a diagram of
the gateway, shared subscriptions, a light/dark/system theme switch, a new
OG image, and links to the source.
2026-09-24 02:16:29 +08:00
yetone 28688e2463 site: the feed survives GitHub's API limits, from SHA256SUMS alone 2026-09-24 02:03:07 +08:00