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.
No files matched your search
@@ -1,8 +1,8 @@
|
||||
name: Release
|
||||
|
||||
# Pushing a v* tag hands off to yetone/magpie-releases, which builds, signs,
|
||||
# notarises and publishes magpie there — this repo is private, that one is
|
||||
# where people download from.
|
||||
# notarises and publishes magpie there; that repo is where people download
|
||||
# from, and the signing secrets live only there.
|
||||
|
||||
on:
|
||||
push:
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 yetone
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,6 +1,7 @@
|
||||
# magpie
|
||||
|
||||
One place to pick every coding agent's model.
|
||||
One place to pick every coding agent's model: Codex on DeepSeek, Claude Code
|
||||
on Kimi, Gemini CLI on GLM, from the menu bar. [usemagpie.ai](https://usemagpie.ai)
|
||||
|
||||
`magpie` is a single screen that lists each AI coding agent on your machine and
|
||||
the model it is set to. Click a value, pick a model. That is the whole app.
|
||||
@@ -289,3 +290,7 @@ until you start a new one.
|
||||
- `~/.cache/magpie/models/<provider>.json` — model lists fetched from vendors
|
||||
|
||||
`XDG_CONFIG_HOME` and `XDG_CACHE_HOME` are respected.
|
||||
|
||||
## License
|
||||
|
||||
MIT. See [LICENSE](LICENSE).
|
||||
@@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Claude</title><path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z" fill="#D97757" fill-rule="nonzero"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>DeepSeek</title><path d="M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z" fill="#4D6BFE"></path></svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Gemini</title><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="#3186FF"></path><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="url(#lobe-icons-gemini-0-_R_0_)"></path><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="url(#lobe-icons-gemini-1-_R_0_)"></path><path d="M20.616 10.835a14.147 14.147 0 01-4.45-3.001 14.111 14.111 0 01-3.678-6.452.503.503 0 00-.975 0 14.134 14.134 0 01-3.679 6.452 14.155 14.155 0 01-4.45 3.001c-.65.28-1.318.505-2.002.678a.502.502 0 000 .975c.684.172 1.35.397 2.002.677a14.147 14.147 0 014.45 3.001 14.112 14.112 0 013.679 6.453.502.502 0 00.975 0c.172-.685.397-1.351.677-2.003a14.145 14.145 0 013.001-4.45 14.113 14.113 0 016.453-3.678.503.503 0 000-.975 13.245 13.245 0 01-2.003-.678z" fill="url(#lobe-icons-gemini-2-_R_0_)"></path><defs><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-gemini-0-_R_0_" x1="7" x2="11" y1="15.5" y2="12"><stop stop-color="#08B962"></stop><stop offset="1" stop-color="#08B962" stop-opacity="0"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-gemini-1-_R_0_" x1="8" x2="11.5" y1="5.5" y2="11"><stop stop-color="#F94543"></stop><stop offset="1" stop-color="#F94543" stop-opacity="0"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-gemini-2-_R_0_" x1="3.5" x2="17.5" y1="13.5" y2="12"><stop stop-color="#FABC12"></stop><stop offset=".46" stop-color="#FABC12" stop-opacity="0"></stop></linearGradient></defs></svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
@@ -0,0 +1 @@
|
||||
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Groq</title><path d="M12.036 2c-3.853-.035-7 3-7.036 6.781-.035 3.782 3.055 6.872 6.908 6.907h2.42v-2.566h-2.292c-2.407.028-4.38-1.866-4.408-4.23-.029-2.362 1.901-4.298 4.308-4.326h.1c2.407 0 4.358 1.915 4.365 4.278v6.305c0 2.342-1.944 4.25-4.323 4.279a4.375 4.375 0 01-3.033-1.252l-1.851 1.818A7 7 0 0012.029 22h.092c3.803-.056 6.858-3.083 6.879-6.816v-6.5C18.907 4.963 15.817 2 12.036 2z"></path></svg>
|
||||
|
After Width: | Height: | Size: 568 B |
@@ -0,0 +1 @@
|
||||
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Kimi</title><path d="M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z"></path><path d="M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z"></path></svg>
|
||||
|
After Width: | Height: | Size: 786 B |
@@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Minimax</title><defs><linearGradient id="lobe-icons-minimax-_R_0_" x1="0%" x2="100.182%" y1="50.057%" y2="50.057%"><stop offset="0%" stop-color="#E2167E"></stop><stop offset="100%" stop-color="#FE603C"></stop></linearGradient></defs><path d="M16.278 2c1.156 0 2.093.927 2.093 2.07v12.501a.74.74 0 00.744.709.74.74 0 00.743-.709V9.099a2.06 2.06 0 012.071-2.049A2.06 2.06 0 0124 9.1v6.561a.649.649 0 01-.652.645.649.649 0 01-.653-.645V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v7.472a2.037 2.037 0 01-2.048 2.026 2.037 2.037 0 01-2.048-2.026v-12.5a.785.785 0 00-.788-.753.785.785 0 00-.789.752l-.001 15.904A2.037 2.037 0 0113.441 22a2.037 2.037 0 01-2.048-2.026V18.04c0-.356.292-.645.652-.645.36 0 .652.289.652.645v1.934c0 .263.142.506.372.638.23.131.514.131.744 0a.734.734 0 00.372-.638V4.07c0-1.143.937-2.07 2.093-2.07zm-5.674 0c1.156 0 2.093.927 2.093 2.07v11.523a.648.648 0 01-.652.645.648.648 0 01-.652-.645V4.07a.785.785 0 00-.789-.78.785.785 0 00-.789.78v14.013a2.06 2.06 0 01-2.07 2.048 2.06 2.06 0 01-2.071-2.048V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v3.8a2.06 2.06 0 01-2.071 2.049A2.06 2.06 0 010 12.9v-1.378c0-.357.292-.646.652-.646.36 0 .653.29.653.646V12.9c0 .418.343.757.766.757s.766-.339.766-.757V9.099a2.06 2.06 0 012.07-2.048 2.06 2.06 0 012.071 2.048v8.984c0 .419.343.758.767.758.423 0 .766-.339.766-.758V4.07c0-1.143.937-2.07 2.093-2.07z" fill="url(#lobe-icons-minimax-_R_0_)" fill-rule="nonzero"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Mistral</title><path d="M3.428 3.4h3.429v3.428H3.428V3.4zm13.714 0h3.43v3.428h-3.43V3.4z" fill="gold"></path><path d="M3.428 6.828h6.857v3.429H3.429V6.828zm10.286 0h6.857v3.429h-6.857V6.828z" fill="#FFAF00"></path><path d="M3.428 10.258h17.144v3.428H3.428v-3.428z" fill="#FF8205"></path><path d="M3.428 13.686h3.429v3.428H3.428v-3.428zm6.858 0h3.429v3.428h-3.429v-3.428zm6.856 0h3.43v3.428h-3.43v-3.428z" fill="#FA500F"></path><path d="M0 17.114h10.286v3.429H0v-3.429zm13.714 0H24v3.429H13.714v-3.429z" fill="#E10500"></path></svg>
|
||||
|
After Width: | Height: | Size: 655 B |
@@ -0,0 +1 @@
|
||||
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Ollama</title><path d="M7.905 1.09c.216.085.411.225.588.41.295.306.544.744.734 1.263.191.522.315 1.1.362 1.68a5.054 5.054 0 012.049-.636l.051-.004c.87-.07 1.73.087 2.48.474.101.053.2.11.297.17.05-.569.172-1.134.36-1.644.19-.52.439-.957.733-1.264a1.67 1.67 0 01.589-.41c.257-.1.53-.118.796-.042.401.114.745.368 1.016.737.248.337.434.769.561 1.287.23.934.27 2.163.115 3.645l.053.04.026.019c.757.576 1.284 1.397 1.563 2.35.435 1.487.216 3.155-.534 4.088l-.018.021.002.003c.417.762.67 1.567.724 2.4l.002.03c.064 1.065-.2 2.137-.814 3.19l-.007.01.01.024c.472 1.157.62 2.322.438 3.486l-.006.039a.651.651 0 01-.747.536.648.648 0 01-.54-.742c.167-1.033.01-2.069-.48-3.123a.643.643 0 01.04-.617l.004-.006c.604-.924.854-1.83.8-2.72-.046-.779-.325-1.544-.8-2.273a.644.644 0 01.18-.886l.009-.006c.243-.159.467-.565.58-1.12a4.229 4.229 0 00-.095-1.974c-.205-.7-.58-1.284-1.105-1.683-.595-.454-1.383-.673-2.38-.61a.653.653 0 01-.632-.371c-.314-.665-.772-1.141-1.343-1.436a3.288 3.288 0 00-1.772-.332c-1.245.099-2.343.801-2.67 1.686a.652.652 0 01-.61.425c-1.067.002-1.893.252-2.497.703-.522.39-.878.935-1.066 1.588a4.07 4.07 0 00-.068 1.886c.112.558.331 1.02.582 1.269l.008.007c.212.207.257.53.109.785-.36.622-.629 1.549-.673 2.44-.05 1.018.186 1.902.719 2.536l.016.019a.643.643 0 01.095.69c-.576 1.236-.753 2.252-.562 3.052a.652.652 0 01-1.269.298c-.243-1.018-.078-2.184.473-3.498l.014-.035-.008-.012a4.339 4.339 0 01-.598-1.309l-.005-.019a5.764 5.764 0 01-.177-1.785c.044-.91.278-1.842.622-2.59l.012-.026-.002-.002c-.293-.418-.51-.953-.63-1.545l-.005-.024a5.352 5.352 0 01.093-2.49c.262-.915.777-1.701 1.536-2.269.06-.045.123-.09.186-.132-.159-1.493-.119-2.73.112-3.67.127-.518.314-.95.562-1.287.27-.368.614-.622 1.015-.737.266-.076.54-.059.797.042zm4.116 9.09c.936 0 1.8.313 2.446.855.63.527 1.005 1.235 1.005 1.94 0 .888-.406 1.58-1.133 2.022-.62.375-1.451.557-2.403.557-1.009 0-1.871-.259-2.493-.734-.617-.47-.963-1.13-.963-1.845 0-.707.398-1.417 1.056-1.946.668-.537 1.55-.849 2.485-.849zm0 .896a3.07 3.07 0 00-1.916.65c-.461.37-.722.835-.722 1.25 0 .428.21.829.61 1.134.455.347 1.124.548 1.943.548.799 0 1.473-.147 1.932-.426.463-.28.7-.686.7-1.257 0-.423-.246-.89-.683-1.256-.484-.405-1.14-.643-1.864-.643zm.662 1.21l.004.004c.12.151.095.37-.056.49l-.292.23v.446a.375.375 0 01-.376.373.375.375 0 01-.376-.373v-.46l-.271-.218a.347.347 0 01-.052-.49.353.353 0 01.494-.051l.215.172.22-.174a.353.353 0 01.49.051zm-5.04-1.919c.478 0 .867.39.867.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zm8.706 0c.48 0 .868.39.868.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zM7.44 2.3l-.003.002a.659.659 0 00-.285.238l-.005.006c-.138.189-.258.467-.348.832-.17.692-.216 1.631-.124 2.782.43-.128.899-.208 1.404-.237l.01-.001.019-.034c.046-.082.095-.161.148-.239.123-.771.022-1.692-.253-2.444-.134-.364-.297-.65-.453-.813a.628.628 0 00-.107-.09L7.44 2.3zm9.174.04l-.002.001a.628.628 0 00-.107.09c-.156.163-.32.45-.453.814-.29.794-.387 1.776-.23 2.572l.058.097.008.014h.03a5.184 5.184 0 011.466.212c.086-1.124.038-2.043-.128-2.722-.09-.365-.21-.643-.349-.832l-.004-.006a.659.659 0 00-.285-.239h-.004z"></path></svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1 @@
|
||||
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>OpenAI</title><path d="M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
@@ -0,0 +1 @@
|
||||
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>OpenRouter</title><path d="M18.654 3.87a5.087 5.087 0 110 10.174L23.7 19.09c.64.641.187 1.737-.72 1.737H8.48a8.479 8.479 0 010-16.958h10.175zM8.479 7.26a5.087 5.087 0 100 10.176 5.087 5.087 0 000-10.175z"></path></svg>
|
||||
|
After Width: | Height: | Size: 382 B |
@@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Qwen</title><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z" fill="url(#lobe-icons-qwen-_R_0_)" fill-rule="nonzero"></path><defs><linearGradient id="lobe-icons-qwen-_R_0_" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" stop-color="#6336E7" stop-opacity=".84"></stop><stop offset="100%" stop-color="#6F69F7" stop-opacity=".84"></stop></linearGradient></defs></svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1 @@
|
||||
<svg fill="currentColor" fill-rule="evenodd" height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Grok</title><path d="M6.469 8.776L16.512 23h-4.464L2.005 8.776H6.47zm-.004 7.9l2.233 3.164L6.467 23H2l4.465-6.324zM22 2.582V23h-3.659V7.764L22 2.582zM22 1l-9.952 14.095-2.233-3.163L17.533 1H22z"></path></svg>
|
||||
|
After Width: | Height: | Size: 372 B |
@@ -0,0 +1 @@
|
||||
<svg height="1em" style="flex:none;line-height:1" viewBox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><title>Zhipu</title><path d="M11.991 23.503a.24.24 0 00-.244.248.24.24 0 00.244.249.24.24 0 00.245-.249.24.24 0 00-.22-.247l-.025-.001zM9.671 5.365a1.697 1.697 0 011.099 2.132l-.071.172-.016.04-.018.054c-.07.16-.104.32-.104.498-.035.71.47 1.279 1.186 1.314h.366c1.309.053 2.338 1.173 2.286 2.523-.052 1.332-1.152 2.38-2.478 2.327h-.174c-.715.018-1.274.64-1.239 1.368 0 .124.018.23.053.337.209.373.54.658.96.8.75.23 1.517-.125 1.9-.782l.018-.035c.402-.64 1.17-.96 1.92-.711.854.284 1.378 1.226 1.099 2.167a1.661 1.661 0 01-2.077 1.102 1.711 1.711 0 01-.907-.711l-.017-.035c-.2-.323-.463-.58-.851-.711l-.056-.018a1.646 1.646 0 00-1.954.746 1.66 1.66 0 01-1.065.764 1.677 1.677 0 01-1.989-1.279c-.209-.906.332-1.83 1.257-2.043a1.51 1.51 0 01.296-.035h.018c.68-.071 1.151-.622 1.116-1.333a1.307 1.307 0 00-.227-.693 2.515 2.515 0 01-.366-1.403 2.39 2.39 0 01.366-1.208c.14-.195.21-.444.227-.693.018-.71-.506-1.261-1.186-1.332l-.07-.018a1.43 1.43 0 01-.299-.07l-.05-.019a1.7 1.7 0 01-1.047-2.114 1.68 1.68 0 012.094-1.101zm-5.575 10.11c.26-.264.639-.367.994-.27.355.096.633.379.728.74.095.362-.007.748-.267 1.013-.402.41-1.053.41-1.455 0a1.062 1.062 0 010-1.482zm14.845-.294c.359-.09.738.024.992.297.254.274.344.665.237 1.025-.107.36-.396.634-.756.718-.551.128-1.1-.22-1.23-.781a1.05 1.05 0 01.757-1.26zm-.064-4.39c.314.32.49.753.49 1.206 0 .452-.176.886-.49 1.206-.315.32-.74.5-1.185.5-.444 0-.87-.18-1.184-.5a1.727 1.727 0 010-2.412 1.654 1.654 0 012.369 0zm-11.243.163c.364.484.447 1.128.218 1.691a1.665 1.665 0 01-2.188.923c-.855-.36-1.26-1.358-.907-2.228a1.68 1.68 0 011.33-1.038c.593-.08 1.183.169 1.547.652zm11.545-4.221c.368 0 .708.2.892.524.184.324.184.724 0 1.048a1.026 1.026 0 01-.892.524c-.568 0-1.03-.47-1.03-1.048 0-.579.462-1.048 1.03-1.048zm-14.358 0c.368 0 .707.2.891.524.184.324.184.724 0 1.048a1.026 1.026 0 01-.891.524c-.569 0-1.03-.47-1.03-1.048 0-.579.461-1.048 1.03-1.048zm10.031-1.475c.925 0 1.675.764 1.675 1.706s-.75 1.705-1.675 1.705-1.674-.763-1.674-1.705c0-.942.75-1.706 1.674-1.706zm-2.626-.684c.362-.082.653-.356.761-.718a1.062 1.062 0 00-.238-1.028 1.017 1.017 0 00-.996-.294c-.547.14-.881.7-.752 1.257.13.558.675.907 1.225.783zm0 16.876c.359-.087.644-.36.75-.72a1.062 1.062 0 00-.237-1.019 1.018 1.018 0 00-.985-.301 1.037 1.037 0 00-.762.717c-.108.361-.017.754.239 1.028.245.263.606.377.953.305l.043-.01zM17.19 3.5a.631.631 0 00.628-.64c0-.355-.279-.64-.628-.64a.631.631 0 00-.628.64c0 .355.28.64.628.64zm-10.38 0a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64a.631.631 0 00-.628.64c0 .355.279.64.628.64zm-5.182 7.852a.631.631 0 00-.628.64c0 .354.28.639.628.639a.63.63 0 00.627-.606l.001-.034a.62.62 0 00-.628-.64zm5.182 9.13a.631.631 0 00-.628.64c0 .355.279.64.628.64a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64zm10.38.018a.631.631 0 00-.628.64c0 .355.28.64.628.64a.631.631 0 00.628-.64c0-.355-.279-.64-.628-.64zm5.182-9.148a.631.631 0 00-.628.64c0 .354.279.639.628.639a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64zm-.384-4.992a.24.24 0 00.244-.249.24.24 0 00-.244-.249.24.24 0 00-.244.249c0 .142.122.249.244.249zM11.991.497a.24.24 0 00.245-.248A.24.24 0 0011.99 0a.24.24 0 00-.244.249c0 .133.108.236.223.247l.021.001zM2.011 6.36a.24.24 0 00.245-.249.24.24 0 00-.244-.249.24.24 0 00-.244.249.24.24 0 00.244.249zm0 11.263a.24.24 0 00-.243.248.24.24 0 00.244.249.24.24 0 00.244-.249.252.252 0 00-.244-.248zm19.995-.018a.24.24 0 00-.245.248.24.24 0 00.245.25.24.24 0 00.244-.25.252.252 0 00-.244-.248z" fill="#3859FF" fill-rule="nonzero"></path></svg>
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 503 KiB |
|
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 140 KiB |
|
After Width: | Height: | Size: 143 KiB |
@@ -4,15 +4,39 @@
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>magpie</title>
|
||||
<meta name="description" content="One place to pick every coding agent's model. Claude Code, Codex, Gemini CLI, OpenCode and more, from the menu bar, with one local gateway in front of every provider.">
|
||||
<meta name="description" content="Give every coding agent every model: Codex on DeepSeek, Claude Code on Kimi, Gemini CLI on GLM. One local gateway translates between every API.">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<meta name="theme-color" content="#fafafa" media="(prefers-color-scheme: light)">
|
||||
<meta name="theme-color" content="#0b0b0c" media="(prefers-color-scheme: dark)">
|
||||
<meta name="theme-color" content="#fafafa">
|
||||
<script>
|
||||
// The chosen theme (light, dark, or the system's) is on <html data-theme>
|
||||
// before anything paints.
|
||||
(() => {
|
||||
let mode = "system";
|
||||
try { mode = localStorage.getItem("theme") || "system"; } catch {}
|
||||
const q = matchMedia("(prefers-color-scheme: dark)");
|
||||
const apply = () => {
|
||||
const t = mode === "system" ? (q.matches ? "dark" : "light") : mode;
|
||||
document.documentElement.dataset.theme = t;
|
||||
document.querySelector('meta[name="theme-color"]').content = t === "dark" ? "#0b0b0c" : "#fafafa";
|
||||
document.querySelectorAll(".theme").forEach((b) => (b.dataset.mode = mode));
|
||||
};
|
||||
q.addEventListener("change", () => mode === "system" && apply());
|
||||
window.setTheme = (m) => { mode = m; try { m === "system" ? localStorage.removeItem("theme") : localStorage.setItem("theme", m); } catch {} apply(); };
|
||||
window.themeMode = () => mode;
|
||||
apply();
|
||||
})();
|
||||
</script>
|
||||
<link rel="icon" href="/favicon.png" type="image/png">
|
||||
<link rel="apple-touch-icon" href="/img/icon-256.png">
|
||||
<meta property="og:title" content="magpie">
|
||||
<meta property="og:description" content="One place to pick every coding agent's model.">
|
||||
<meta property="og:description" content="Codex on DeepSeek. Claude Code on Kimi. Every coding agent, every model.">
|
||||
<meta property="og:image" content="https://usemagpie.ai/img/og.png">
|
||||
<meta property="og:image:width" content="2400">
|
||||
<meta property="og:image:height" content="1260">
|
||||
<meta property="og:image:alt" content="magpie: Codex on DeepSeek, Claude Code on Kimi">
|
||||
<meta name="twitter:title" content="magpie">
|
||||
<meta name="twitter:description" content="Codex on DeepSeek. Claude Code on Kimi. Every coding agent, every model.">
|
||||
<meta name="twitter:image" content="https://usemagpie.ai/img/og.png">
|
||||
<meta property="og:url" content="https://usemagpie.ai/">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<style>
|
||||
@@ -29,8 +53,21 @@
|
||||
--code: #f4f4f5;
|
||||
--shadow: 0 1px 2px rgba(0,0,0,.04), 0 12px 40px -12px rgba(0,0,0,.18);
|
||||
}
|
||||
:root[data-theme="dark"] {
|
||||
--bg: #0b0b0c;
|
||||
--bg2: #121214;
|
||||
--card: #161618;
|
||||
--ink: #f2f2f3;
|
||||
--ink2: #b3b3ba;
|
||||
--ink3: #7a7a82;
|
||||
--line: #26262a;
|
||||
--btn: #f2f2f3;
|
||||
--btn-ink: #0b0b0c;
|
||||
--code: #151517;
|
||||
--shadow: 0 1px 2px rgba(0,0,0,.3), 0 20px 60px -20px rgba(0,0,0,.8);
|
||||
}
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
:root:not([data-theme="light"]) {
|
||||
--bg: #0b0b0c;
|
||||
--bg2: #121214;
|
||||
--card: #161618;
|
||||
@@ -43,8 +80,18 @@
|
||||
--code: #151517;
|
||||
--shadow: 0 1px 2px rgba(0,0,0,.3), 0 20px 60px -20px rgba(0,0,0,.8);
|
||||
}
|
||||
.bird { filter: invert(1); }
|
||||
}
|
||||
[data-theme="dark"] .bird { filter: invert(1); }
|
||||
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .bird { filter: invert(1); } }
|
||||
.for-dark { display: none !important; }
|
||||
[data-theme="dark"] .for-light { display: none !important; }
|
||||
[data-theme="dark"] .for-dark { display: block !important; }
|
||||
.theme { display: inline-grid; place-items: center; width: 34px; height: 34px; border-radius: 8px; border: 1px solid var(--line); background: transparent; color: var(--ink2); cursor: pointer; padding: 0; }
|
||||
.theme:hover { color: var(--ink); }
|
||||
.theme svg { width: 16px; height: 16px; display: none; }
|
||||
.theme.gh svg { display: block; }
|
||||
nav .wrap > .gh { margin-right: -18px; }
|
||||
.theme[data-mode="system"] .i-system, .theme[data-mode="light"] .i-light, .theme[data-mode="dark"] .i-dark { display: block; }
|
||||
* { box-sizing: border-box; }
|
||||
html { -webkit-text-size-adjust: 100%; }
|
||||
body {
|
||||
@@ -129,10 +176,46 @@ footer .links { margin-left: auto; display: flex; gap: 20px; }
|
||||
footer a { text-decoration: none; }
|
||||
footer a:hover { color: var(--ink); }
|
||||
|
||||
.shot.stack { position: relative; }
|
||||
.shot img.pick { width: 100%; max-width: 440px; display: block; margin: 0 auto; border-radius: 14px; box-shadow: var(--shadow); border: 1px solid var(--line); }
|
||||
.chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 30px; }
|
||||
.chip { display: inline-flex; align-items: center; gap: 7px; font-size: 14px; color: var(--ink2); background: var(--card); border: 1px solid var(--line); border-radius: 999px; padding: 5px 12px 5px 8px; }
|
||||
.chip img { width: 17px; height: 17px; }
|
||||
.chip b { color: var(--ink); font-weight: 580; }
|
||||
.chip i { font-style: normal; color: var(--ink3); }
|
||||
|
||||
.flow { display: grid; grid-template-columns: 1fr auto 1.1fr auto 1fr; gap: 18px; align-items: center; }
|
||||
.col { background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 18px; }
|
||||
.col h4 { margin: 0 0 12px; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--ink3); font-weight: 560; }
|
||||
.col ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 9px; }
|
||||
.col li { display: flex; align-items: center; gap: 9px; font-size: 14.5px; }
|
||||
.col li img { width: 18px; height: 18px; }
|
||||
.col li span { color: var(--ink3); font-size: 13px; margin-left: auto; }
|
||||
.hub { background: var(--btn); color: var(--btn-ink); border-radius: 18px; padding: 24px 22px; text-align: center; }
|
||||
.hub img { width: 44px; height: 44px; filter: invert(1); }
|
||||
.hub b { display: block; font-size: 18px; margin: 8px 0 4px; letter-spacing: -.01em; }
|
||||
.hub code { font-size: 12.5px; opacity: .7; }
|
||||
.hub ul { list-style: none; padding: 0; margin: 16px 0 0; display: grid; gap: 6px; font-size: 13px; }
|
||||
.hub li { border: 1px solid color-mix(in srgb, var(--btn-ink) 22%, transparent); border-radius: 8px; padding: 5px 8px; }
|
||||
.arrow { color: var(--ink3); font-size: 22px; }
|
||||
[data-theme="dark"] .hub img { filter: none; }
|
||||
@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) .hub img { filter: none; } }
|
||||
|
||||
.wide img { width: 100%; display: block; border-radius: 14px; box-shadow: var(--shadow); border: 1px solid var(--line); }
|
||||
.subs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
|
||||
.subs > div { background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 22px; }
|
||||
.subs .who { display: flex; align-items: center; gap: 8px; font-weight: 600; margin-bottom: 8px; }
|
||||
.subs .who img { width: 20px; height: 20px; }
|
||||
.subs p { margin: 0; color: var(--ink2); font-size: 15px; }
|
||||
.subs code { font-size: 13px; }
|
||||
|
||||
@media (max-width: 860px) {
|
||||
.hero { grid-template-columns: 1fr; padding-top: 56px; gap: 44px; }
|
||||
.split { grid-template-columns: 1fr; }
|
||||
.split.rev > :first-child { order: 2; }
|
||||
.flow { grid-template-columns: 1fr; }
|
||||
.arrow { transform: rotate(90deg); text-align: center; }
|
||||
.subs { grid-template-columns: 1fr; }
|
||||
.grid { grid-template-columns: 1fr 1fr; }
|
||||
nav .links a.hide { display: none; }
|
||||
}
|
||||
@@ -140,6 +223,9 @@ footer a:hover { color: var(--ink); }
|
||||
.wrap { padding: 0 16px; }
|
||||
.grid { grid-template-columns: 1fr; }
|
||||
nav .links { gap: 16px; }
|
||||
nav .wrap { gap: 14px; }
|
||||
nav .links a.hide-sm { display: none; }
|
||||
nav .wrap > .gh { margin-right: -6px; }
|
||||
section { padding-top: 64px; }
|
||||
.table .path { display: none; }
|
||||
}
|
||||
@@ -150,19 +236,26 @@ footer a:hover { color: var(--ink); }
|
||||
<nav id="nav"><div class="wrap">
|
||||
<a class="brand" href="/"><img class="bird" src="/img/magpie-small.svg" alt="">magpie</a>
|
||||
<div class="links">
|
||||
<a class="hide" href="#features">Features</a>
|
||||
<a class="hide" href="#gateway">Gateway</a>
|
||||
<a class="hide" href="#how">How it works</a>
|
||||
<a class="hide" href="#providers">Providers</a>
|
||||
<a href="#cli">CLI</a>
|
||||
<a href="https://github.com/yetone/magpie-releases/releases">Releases</a>
|
||||
<a class="hide-sm" href="https://github.com/yetone/magpie-releases/releases">Releases</a>
|
||||
</div>
|
||||
<a class="theme gh" href="https://github.com/yetone/magpie" aria-label="magpie on GitHub" title="Source on GitHub"><svg viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/></svg></a>
|
||||
<button class="theme" type="button" aria-label="Theme" title="Theme: system"><svg class="i-system" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="1.75" y="2.75" width="12.5" height="8.5" rx="1.5"/><path d="M5.5 14h5M8 11.25V14"/></svg><svg class="i-light" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><circle cx="8" cy="8" r="3"/><path d="M8 1v1.5M8 13.5V15M1 8h1.5M13.5 8H15M3 3l1 1M12 12l1 1M3 13l1-1M12 4l1-1"/></svg><svg class="i-dark" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"><path d="M13.5 9.5A5.5 5.5 0 0 1 6.5 2.5a5.5 5.5 0 1 0 7 7Z"/></svg></button>
|
||||
<a class="btn small dl" href="/download">Download</a>
|
||||
</div></nav>
|
||||
|
||||
<main class="wrap">
|
||||
<header class="hero">
|
||||
<div>
|
||||
<h1>Every coding agent’s model. <span>One place.</span></h1>
|
||||
<p class="lede">magpie lists the AI coding agents on your Mac and the model each one is set to. Click a value, pick a model. Any provider, any agent, through one local gateway.</p>
|
||||
<h1>Codex on DeepSeek. <span>Claude Code on Kimi.</span></h1>
|
||||
<p class="lede">magpie gives every coding agent every model. Add a provider once — DeepSeek, Kimi, GLM, Qwen, OpenRouter, Ollama, or the Claude and ChatGPT plans you already pay for — and pick it from Codex, Claude Code, Gemini CLI or any other agent, in one click.</p>
|
||||
<div class="chips">
|
||||
<span class="chip"><img src="/icons/codex-color.svg" alt=""><b>Codex</b><i>→</i><img src="/icons/deepseek-color.svg" alt="">DeepSeek V4 Pro</span>
|
||||
<span class="chip"><img src="/icons/claudecode-color.svg" alt=""><b>Claude Code</b><i>→</i><img class="bird" src="/icons/kimi.svg" alt="">Kimi K3</span>
|
||||
<span class="chip"><img src="/icons/geminicli-color.svg" alt=""><b>Gemini CLI</b><i>→</i><img src="/icons/zhipu-color.svg" alt="">GLM-5.3</span>
|
||||
</div>
|
||||
<div class="cta">
|
||||
<a class="btn dl" href="/download">
|
||||
<svg viewBox="0 0 16 16" fill="currentColor"><path d="M11.2 8.5c0-1.6 1.3-2.4 1.4-2.4-.8-1.1-2-1.3-2.4-1.3-1-.1-2 .6-2.5.6s-1.3-.6-2.2-.6C4.4 4.8 3.3 5.5 2.7 6.6c-1.2 2.1-.3 5.2.9 6.9.6.8 1.2 1.7 2.1 1.7.8 0 1.2-.5 2.2-.5s1.3.5 2.2.5 1.5-.9 2-1.7c.6-.9.9-1.8.9-1.9 0 0-1.8-.7-1.8-3.1ZM9.6 3.6c.5-.6.8-1.3.7-2.1-.7 0-1.5.5-2 1-.4.5-.8 1.3-.7 2.1.8.1 1.5-.4 2-1Z"/></svg>
|
||||
@@ -170,18 +263,16 @@ footer a:hover { color: var(--ink); }
|
||||
</a>
|
||||
<a class="btn ghost" href="#cli">Install from terminal</a>
|
||||
</div>
|
||||
<div class="meta"><span class="ver">Free</span> · macOS 11+ · <a class="alt" href="/download/mac-intel">Intel Mac</a> · <a href="#cli">Linux & Windows CLI</a></div>
|
||||
<div class="meta"><span class="ver">Free</span> · <a href="https://github.com/yetone/magpie">Open source</a> · macOS 11+ · <a class="alt" href="/download/mac-intel">Intel Mac</a> · <a href="#cli">Linux & Windows CLI</a></div>
|
||||
</div>
|
||||
<div class="shot">
|
||||
<picture>
|
||||
<source srcset="/img/panel-dark.png" media="(prefers-color-scheme: dark)">
|
||||
<img src="/img/panel-light.png" width="440" height="470" alt="The magpie menu bar panel: each agent with its model">
|
||||
</picture>
|
||||
<img loading="lazy" class="pick for-light" src="/img/picker-light.png" width="440" height="555" alt="Codex's model picker in magpie, listing DeepSeek, Kimi and GLM models">
|
||||
<img loading="lazy" class="pick for-dark" src="/img/picker-dark.png" width="440" height="555" alt="Codex's model picker in magpie, listing DeepSeek, Kimi and GLM models">
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="agents">
|
||||
<p>Works with</p>
|
||||
<p>Every agent</p>
|
||||
<ul>
|
||||
<li><img src="/icons/claudecode-color.svg" alt="">Claude Code</li>
|
||||
<li><img src="/icons/codex-color.svg" alt="">Codex</li>
|
||||
@@ -193,48 +284,110 @@ footer a:hover { color: var(--ink); }
|
||||
<li><img class="bird" src="/icons/githubcopilot.svg" alt="">Copilot CLI</li>
|
||||
<li><img src="/icons/crush.png" alt="">Crush</li>
|
||||
</ul>
|
||||
<p style="margin-top:34px">Every model</p>
|
||||
<ul>
|
||||
<li><img src="/icons/deepseek-color.svg" alt="">DeepSeek</li>
|
||||
<li><img class="bird" src="/icons/kimi.svg" alt="">Kimi</li>
|
||||
<li><img src="/icons/zhipu-color.svg" alt="">GLM</li>
|
||||
<li><img src="/icons/qwen-color.svg" alt="">Qwen</li>
|
||||
<li><img src="/icons/minimax-color.svg" alt="">MiniMax</li>
|
||||
<li><img src="/icons/claude-color.svg" alt="">Claude</li>
|
||||
<li><img class="bird" src="/icons/openai.svg" alt="">OpenAI</li>
|
||||
<li><img src="/icons/gemini-color.svg" alt="">Gemini</li>
|
||||
<li><img src="/icons/mistral-color.svg" alt="">Mistral</li>
|
||||
<li><img class="bird" src="/icons/xai.svg" alt="">xAI</li>
|
||||
<li><img class="bird" src="/icons/groq.svg" alt="">Groq</li>
|
||||
<li><img class="bird" src="/icons/openrouter.svg" alt="">OpenRouter</li>
|
||||
<li><img class="bird" src="/icons/ollama.svg" alt="">Ollama</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<section id="features">
|
||||
<p class="eyebrow">Why magpie</p>
|
||||
<h2>Small, careful, and out of the way.</h2>
|
||||
<p class="sub">It lives in the menu bar. It edits the one key you changed and nothing else. It never asks your shell for a key.</p>
|
||||
<div class="grid">
|
||||
<div><h3>One endpoint for every agent</h3><p>A local gateway speaks OpenAI chat, OpenAI Responses, Anthropic Messages and Gemini, and translates between them — streaming and tool calls included.</p></div>
|
||||
<div><h3>Your subscriptions, shared</h3><p>Signed in to Claude Code, Codex or Copilot? That login becomes a provider every other agent can use. Nothing copied, no key to paste.</p></div>
|
||||
<div><h3>Providers in one field</h3><p>Anthropic, OpenAI, Gemini, DeepSeek, Kimi, GLM, Qwen, OpenRouter, Ollama and a dozen more. Pick a preset, paste a key, done.</p></div>
|
||||
<div><h3>Surgical config edits</h3><p>Comments, ordering and indentation in <code>settings.json</code>, <code>config.toml</code> or <code>config.yaml</code> survive. Writes are atomic.</p></div>
|
||||
<div><h3>Real model lists</h3><p>magpie asks each vendor what it serves. A model released this morning is in the picker on the next refresh — nothing is compiled in.</p></div>
|
||||
<div><h3>Profiles</h3><p>Snapshot every agent’s settings under a name and switch all of them back in one click.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="split rev">
|
||||
<div><img src="/img/picker-light.png" width="440" height="390" alt="The model picker, filtering as you type" loading="lazy"></div>
|
||||
<div>
|
||||
<p class="eyebrow">The picker</p>
|
||||
<h2>Click a value. Type. Done.</h2>
|
||||
<p class="sub">Every model from every provider you have added, filtered as you type. Anything that isn’t listed can still be typed in.</p>
|
||||
<section id="how">
|
||||
<p class="eyebrow">How it works</p>
|
||||
<h2>One gateway speaks every API.</h2>
|
||||
<p class="sub">Codex only speaks OpenAI Responses. Claude Code only speaks Anthropic Messages. magpie runs a gateway on your Mac that speaks all of them and translates in both directions — streaming, tool calls and reasoning included — so any agent can use any vendor’s model.</p>
|
||||
<div class="flow">
|
||||
<div class="col">
|
||||
<h4>Your agents</h4>
|
||||
<ul>
|
||||
<li><b>Effort, small model, auth</b> — each agent shows the fields it actually has.</li>
|
||||
<li><b>Native or gateway</b> — pick the agent’s own model and magpie puts back exactly what was there.</li>
|
||||
<li><b>Always current</b> — magpie updates itself quietly and restarts when you say so.</li>
|
||||
<li><img src="/icons/codex-color.svg" alt="">Codex<span>Responses</span></li>
|
||||
<li><img src="/icons/claudecode-color.svg" alt="">Claude Code<span>Messages</span></li>
|
||||
<li><img src="/icons/geminicli-color.svg" alt="">Gemini CLI<span>Gemini</span></li>
|
||||
<li><img class="bird" src="/icons/opencode.svg" alt="">OpenCode<span>Chat</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="hub">
|
||||
<img src="/img/magpie.svg" alt="">
|
||||
<b>magpie gateway</b>
|
||||
<code>127.0.0.1:3425</code>
|
||||
<ul><li>OpenAI Chat · Responses</li><li>Anthropic Messages</li><li>Google Gemini</li></ul>
|
||||
</div>
|
||||
<div class="arrow">→</div>
|
||||
<div class="col">
|
||||
<h4>Any provider</h4>
|
||||
<ul>
|
||||
<li><img src="/icons/deepseek-color.svg" alt="">DeepSeek</li>
|
||||
<li><img class="bird" src="/icons/kimi.svg" alt="">Kimi</li>
|
||||
<li><img src="/icons/zhipu-color.svg" alt="">GLM</li>
|
||||
<li><img src="/icons/claude-color.svg" alt="">Your Claude plan</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="gateway">
|
||||
<p class="eyebrow">The gateway</p>
|
||||
<h2>One base URL, every model.</h2>
|
||||
<p class="sub">The gateway listens on <code>127.0.0.1:3425</code> and names models <code>provider/model</code>. Agents never hold vendor keys; anything with a base-URL setting can use it.</p>
|
||||
<table class="table">
|
||||
<tr><th>Tool speaks</th><th>Base URL</th><th class="path">Environment</th></tr>
|
||||
<tr><td>OpenAI</td><td><code>http://127.0.0.1:3425/v1</code></td><td class="path"><code>OPENAI_BASE_URL</code></td></tr>
|
||||
<tr><td>Anthropic</td><td><code>http://127.0.0.1:3425</code></td><td class="path"><code>ANTHROPIC_BASE_URL</code></td></tr>
|
||||
<tr><td>Gemini</td><td><code>http://127.0.0.1:3425</code></td><td class="path"><code>GOOGLE_GEMINI_BASE_URL</code></td></tr>
|
||||
</table>
|
||||
<section>
|
||||
<div class="split rev">
|
||||
<div>
|
||||
<img class="for-light" loading="lazy" src="/img/panel-light.png" width="440" height="470" alt="The magpie menu bar panel: each agent on a different vendor's model">
|
||||
<img class="for-dark" loading="lazy" src="/img/panel-dark.png" width="440" height="470" alt="The magpie menu bar panel: each agent on a different vendor's model">
|
||||
</div>
|
||||
<div>
|
||||
<p class="eyebrow">The menu bar</p>
|
||||
<h2>Every agent, its own model.</h2>
|
||||
<p class="sub">One glance shows what each agent runs. Click a value to change it; magpie rewrites that agent’s config — only the key you changed — and the next session uses it.</p>
|
||||
<ul>
|
||||
<li><b>Codex</b> gets DeepSeek in its own <code>/model</code> list, with the right reasoning efforts.</li>
|
||||
<li><b>Claude Code</b> gets Kimi, GLM or GPT behind <code>opus</code>, <code>sonnet</code> and <code>haiku</code>.</li>
|
||||
<li><b>Pick the native model</b> and magpie puts back exactly what was there before.</li>
|
||||
<li><b>Profiles</b> switch every agent at once — “Budget”, “Focus”, whatever you save.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="subscriptions">
|
||||
<p class="eyebrow">Subscriptions, shared</p>
|
||||
<h2>The plans you pay for, in every agent.</h2>
|
||||
<p class="sub">Signed in to an agent? That login becomes a provider. Its models show up in every other agent’s picker — nothing copied, no key to paste, tokens refreshed the way the agent does it.</p>
|
||||
<div class="subs">
|
||||
<div><div class="who"><img src="/icons/claude-color.svg" alt="">Claude Pro / Max</div><p>Your Claude Code sign-in powers OpenCode, Pi or Goose: <code>claude/claude-sonnet-5</code>.</p></div>
|
||||
<div><div class="who"><img class="bird" src="/icons/openai.svg" alt="">ChatGPT Plus / Pro</div><p>Your Codex sign-in puts GPT in Claude Code: <code>codex/gpt-5.5</code>.</p></div>
|
||||
<div><div class="who"><img class="bird" src="/icons/githubcopilot.svg" alt="">GitHub Copilot</div><p>Your Copilot seat serves any agent: <code>copilot/claude-sonnet-4.5</code>.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="providers">
|
||||
<p class="eyebrow">Providers</p>
|
||||
<h2>Paste a key. That’s the setup.</h2>
|
||||
<p class="sub">Twenty presets — vendors, relays and local servers. magpie asks each vendor which models it serves, so a model released this morning is in every picker on the next refresh. Keys stay in magpie; agents never see them.</p>
|
||||
<div class="wide">
|
||||
<img class="for-light" loading="lazy" src="/img/providers-light.png" width="1040" height="500" alt="magpie's Providers tab: DeepSeek, Kimi, GLM, Qwen, MiniMax, OpenRouter, Anthropic and Gemini, each with the agents using it">
|
||||
<img class="for-dark" loading="lazy" src="/img/providers-dark.png" width="1040" height="500" alt="magpie's Providers tab: DeepSeek, Kimi, GLM, Qwen, MiniMax, OpenRouter, Anthropic and Gemini, each with the agents using it">
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="features">
|
||||
<p class="eyebrow">Details</p>
|
||||
<h2>Small, careful, and out of the way.</h2>
|
||||
<div class="grid" style="margin-top:32px">
|
||||
<div><h3>Surgical config edits</h3><p>Comments, ordering and indentation in <code>settings.json</code>, <code>config.toml</code> or <code>config.yaml</code> survive. Writes are atomic.</p></div>
|
||||
<div><h3>Tiny, native, open</h3><p>About 11 MB, on the system webview. No Electron, no runtime. MIT-licensed, <a href="https://github.com/yetone/magpie">on GitHub</a>.</p></div>
|
||||
<div><h3>No keys from your shell</h3><p>magpie never reads API keys from environment variables. What you add is what it uses.</p></div>
|
||||
<div><h3>Any gateway client</h3><p>Anything with a base-URL setting can use it: <code>OPENAI_BASE_URL</code>, <code>ANTHROPIC_BASE_URL</code>, <code>GOOGLE_GEMINI_BASE_URL</code>.</p></div>
|
||||
<div><h3>Usage, per agent</h3><p>Tokens, cache hits and cost for each agent and model that went through the gateway.</p></div>
|
||||
<div><h3>Updates itself</h3><p>Signed and notarised. New versions download quietly and install when you restart.</p></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="cli">
|
||||
@@ -242,36 +395,37 @@ footer a:hover { color: var(--ink); }
|
||||
<h2>Also a TUI and a CLI.</h2>
|
||||
<p class="sub">The same app, from a terminal. On Linux, the installer puts the <code>magpie</code> command in <code>~/.local/bin</code>; on a Mac it installs the app too.</p>
|
||||
<div class="install"><code id="cmd">curl -fsSL https://usemagpie.ai/install.sh | sh</code><button class="copy" data-copy="cmd">Copy</button></div>
|
||||
<p class="meta" style="margin:12px 0 28px">Windows: download <code>magpie-cli-windows-amd64.exe</code> from the <a href="https://github.com/yetone/magpie-releases/releases/latest">latest release</a>.</p>
|
||||
<pre><span class="c"># pick models</span>
|
||||
magpie ls <span class="c"># every agent and its settings</span>
|
||||
magpie claude opus <span class="c"># agent names take prefixes: cc, oc, gem…</span>
|
||||
magpie codex effort high
|
||||
magpie codex deepseek/deepseek-chat <span class="c"># any catalog model, through the gateway</span>
|
||||
|
||||
<span class="c"># providers</span>
|
||||
<p class="meta" style="margin:12px 0 28px">Windows: download <code>magpie-cli-windows-amd64.exe</code> from the <a href="https://github.com/yetone/magpie-releases/releases/latest">latest release</a>, or build it from <a href="https://github.com/yetone/magpie">source</a>.</p>
|
||||
<pre><span class="c"># add providers</span>
|
||||
magpie provider add deepseek sk-… <span class="c"># a preset needs only the key</span>
|
||||
magpie provider add moonshot sk-…
|
||||
magpie provider add ollama <span class="c"># local servers need none</span>
|
||||
|
||||
<span class="c"># profiles</span>
|
||||
magpie save work && magpie use work
|
||||
<span class="c"># give agents third-party models</span>
|
||||
magpie codex deepseek/deepseek-v4-pro
|
||||
magpie claude moonshot/kimi-k3
|
||||
magpie gemini zhipu/glm-5.3
|
||||
magpie opencode claude/claude-sonnet-5 <span class="c"># your Claude plan, in OpenCode</span>
|
||||
|
||||
magpie tui <span class="c"># the whole app, in the terminal</span>
|
||||
magpie update <span class="c"># install the newest release</span></pre>
|
||||
magpie ls <span class="c"># every agent and its model</span>
|
||||
magpie save work && magpie use work <span class="c"># profiles</span>
|
||||
magpie tui <span class="c"># the whole app, in the terminal</span></pre>
|
||||
</section>
|
||||
|
||||
<div class="final">
|
||||
<img class="bird" src="/img/magpie.svg" alt="">
|
||||
<h2>Pick a model. Get back to work.</h2>
|
||||
<p class="sub" style="margin:0 auto 32px">Free, native, about 11 MB.</p>
|
||||
<div class="cta"><a class="btn dl" href="/download"><span class="dl-label">Download for Mac</span></a></div>
|
||||
<h2>Every agent. Every model.</h2>
|
||||
<p class="sub" style="margin:0 auto 32px">Free, open source, native, about 11 MB.</p>
|
||||
<div class="cta"><a class="btn dl" href="/download"><span class="dl-label">Download for Mac</span></a><a class="btn ghost" href="https://github.com/yetone/magpie"><svg viewBox="0 0 16 16" fill="currentColor" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/></svg> View on GitHub</a></div>
|
||||
<div class="meta"><span class="ver"></span></div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
|
||||
<footer><div class="wrap">
|
||||
<span>© 2026 magpie</span>
|
||||
<span>© 2026 magpie · MIT</span>
|
||||
<div class="links">
|
||||
<a href="https://github.com/yetone/magpie">GitHub</a>
|
||||
<a href="https://github.com/yetone/magpie-releases/releases">Releases</a>
|
||||
<a href="/api/latest">Update feed</a>
|
||||
<a href="https://x.com/yetone">@yetone</a>
|
||||
@@ -281,6 +435,14 @@ magpie update <span class="c"># install the newest rele
|
||||
<script>
|
||||
(() => {
|
||||
const nav = document.getElementById("nav");
|
||||
|
||||
// The theme button steps system → light → dark.
|
||||
const next = { system: "light", light: "dark", dark: "system" };
|
||||
document.querySelectorAll(".theme").forEach((b) => {
|
||||
b.dataset.mode = themeMode();
|
||||
b.title = "Theme: " + themeMode();
|
||||
b.addEventListener("click", () => { setTheme(next[themeMode()]); b.title = "Theme: " + themeMode(); });
|
||||
});
|
||||
const onScroll = () => nav.classList.toggle("scrolled", scrollY > 8);
|
||||
addEventListener("scroll", onScroll, { passive: true }); onScroll();
|
||||
|
||||
|
||||