agentty

agentty-orgMIT活跃维护

终端里的 AI 结对编程工具,单个静态二进制、启动不到 1 毫秒,可接任意模型,适合想要轻量快速编码助手的开发者。

AI pair programming in your terminal — one static binary, sub-ms startup, any model

v0.9.51发布于 2026-11-08 07:07 UTC617star +3 / 7 天29fork同步于 2026-11-10 11:57 UTC

怎么上手

由 README 提炼,执行前请确认
curl -fsSL https://agentty.org/install.sh | sh
cd your-project
agentty
硬件要求按 README 说明

README 未说明显存或 GPU 要求;本地模型通过 Ollama 运行,具体硬件门槛取决于所选模型。发布二进制覆盖 Linux x86_64/aarch64、macOS Intel 与 Apple Silicon、Windows x86_64。

支持 Apple Silicon
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

终端里的 AI 结对编程工具,单个静态二进制、毫秒级启动,支持任意模型

终端里的 AI 结对编程工具,单个静态二进制、启动不到 1 毫秒,可接任意模型,适合想要轻量快速编码助手的开发者。

核心能力

  • 单文件静态二进制约 23MB,冷启动约 2.6ms
  • 默认沙箱执行 shell 命令,屏蔽 ~/.ssh、~/.aws 与 .env
  • 本地检索引擎按需取码,避免整文件塞入上下文
  • 支持 Claude/ChatGPT/Copilot 订阅、API Key 与本地 Ollama
  • Smart Mode 由旗舰模型规划、廉价模型执行,按轮次调节力度

容易踩的坑

预编译二进制可能因 libc 不匹配无法运行,需加 --build 从源码编译;源码构建需要 C++26 工具链(GCC 14+ 或较新 Clang);在未 root 的 Android/Termux 上 shell 与构建命令不走沙箱。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.9.51
  1. v0.9.51最新正式版2026-11-08 · 2026-11-08 07:07 UTC

    Fixed

    • Reasoning off really is off on Claude 5 models. Sonnet 5 kept thinking with effort off because the request left thinking out, and Claude 5 models think by default. Off now follows what Anthropic's /v1/models says each model accepts (disabled, between_tools on Sonnet 5.5), with rules matching Anthropic's per-model table as the fallback. A rejected thinking mode is retried and remembered. Models that always think (Opus 5.5, Fable, Mythos) no longer offer off at all. Smart Mode's routed off is sent explicitly too.
    • Switching providers keeps the right model. The saved model per provider was looked up under the name you typed (codex) but saved under the canonical one (openai), so switching back fell to the default. A local server (Ollama, LM Studio) that doesn't have the saved model now picks one it has and says so.
    • Effort survives switching models. It used to be rewritten on every switch, so off became low on a model that always thinks and stayed low after switching back.
    • agentty run -m no longer changes the TUI's saved model, and neither does a headless --provider.

    Changed

    • The tool output pane (^O) is readable and searchable. It uses the terminal's height and never runs past it, wraps long lines and the full command instead of cutting them off, and shows the output as you'd want to read it: no description echo, ``` fences or notes meant for the model, in normal text with tokens coloured. A cut is shown as a ⋯ line. / finds as you type, n/N step through matches, PgUp/PgDn page, and y copies the clean text. The list never cuts off a row's status.
    • The diff review panel was redone. It says up front that the edits are saved and you keep or undo each one, shows files as tabs, lists each change with real old and new line numbers, and counts kept and undone.
    • Tool output reads in the normal text colour with paths, numbers, strings and flags coloured, instead of a dull grey. Cards drop notes the tool wrote for the model, read opens at the top of the file, and git status shows just the changed files.
    • The status bar shows the whole thread title when there's room.

    Full history: CHANGELOG.md

  2. v0.9.502026-11-07 · 2026-11-07 20:52 UTC
    查看更新说明

    Changed

    • Tool cards got a full visual pass. The header is one two-tone pill: the tool name on a solid chip, the rest on a soft band of the same colour, and the output below sits on a faint tint of it. Write, edit and diff output is syntax coloured on the red/green bands, and paired lines light up the words that changed. Grep rows are syntax coloured too, and every match sits on an amber band. File paths get a language dot and a dim directory with a bold file name, and edit headers end with +3 −5.
    • Grep highlights whatever the pattern matched, regex included. It used to give up on any pattern with an escape like resolve\(.
    • Running tools keep their spinner whenever the whole card fits on screen, instead of a still dot, and their header has a soft shimmer.
    • Permission prompts show what bash will run. bash was missing from the shell case, so approving it showed the whole args object as json.
    • Every theme reads. A contrast floor lifts colours that were too dim on their own background (links, headings, hints), keeping the hue. Across the 615 bundled themes that took 870 dim colours to none.
    • The native theme gets the same look on terminals that report their colours: maya asks once at startup, in the round-trip it already makes.
    • Reasoning uses a quiet neutral ink instead of the theme's secondary hue, says how many lines are hidden when collapsed, and its rail is coloured again (a renderer bug left left-only borders uncoloured).
    • Smaller: failed cards drop repeated [kind] tags, the composer colours @file and /command, nested markdown lists indent, picker rows and the diff review panel use the same tinted bands, MCP tools read as Search Issues · github, and the ── branch before each tool is gone.

    Added

    • tool_gallery renders every surface from real recorded tool calls (--running, --ask, --chrome, --reasoning, --prose, --welcome, --panels), and a ui_snapshots test diffs its output so a change that alters how something looks shows up in review.

    Full history: CHANGELOG.md

  3. v0.9.492026-11-06 · 2026-11-06 14:46 UTC
    查看更新说明

    Fixed

    • Settings stopped reverting when you run several agentty sessions at once. Each session reads settings.json at startup and keeps it in memory, and the save-time merge treated the whole appearance block as one value. So one session setting scrollback, and another (still holding the startup copy) changing its theme, wrote the stale scrollback back over it. The setting did persist — until any other session saved anything. Appearance settings now merge field by field: a field a session did not change keeps whatever is on disk.
    • Setting up a provider no longer pulls you off the one you are using in two more cases. Working on Ollama with no API keys counted as "nothing configured", so adding any provider adopted it; the active local backend now counts. And an empty Anthropic key read as signed in — every other provider already required a non-empty key.

    Changed

    • Appearance settings are declared once. The settings writer, its loader and the save-time merge each used to spell out every field by hand, and nothing made those lists agree — a field missing from one was silently never saved, never loaded, or clobbered by another session. They now walk a single table, defaults included, so none of them names a field. Two build-time checks were added alongside it: one that every appearance field is in that table, and one that keeps UI drawing out of agentty (maya owns every pixel decision).
    • The release's channel audit reads AUR's version from the RPC as well as the cgit mirror. v0.9.48 went red on a package that had published correctly 90 seconds earlier, because the mirror lags.

    Full history: CHANGELOG.md

  4. v0.9.482026-11-06 · 2026-11-06 10:02 UTC
    查看更新说明

    Changed

    • Setting up a provider no longer switches to it. Adding a custom host or pasting an API key used to make that provider active — and because a switch has to pick a model for the new backend, it also changed the model you were working with. Registering a spare key while mid-task ended your session. The credential is saved and the toast offers Ctrl+P to switch when you actually want to. First run still adopts, since there is no session to protect and leaving you unconfigured would be worse.
    • The provider picker reads as columns. Descriptions start at a fixed column so the provider names scan vertically, and the marker column now carries meaning: ● for the active provider, › for "show more", + for the row that adds a host.

    Fixed

    • Picking a model updates the badge immediately, instead of waiting for the next message. The badge shows the model that actually served the live turn (they differ under Smart Mode), and that marker was not cleared when you chose a different model — so it kept naming the previous one until a new turn overwrote it. The same staleness made a provider switch show an impossible pair, like Ollama beside Opus 4.5.
    • A backend still loading its catalogue says so. Adding a local host left the badge showing a provider with a blank model, which reads as a half-finished switch; it now says loading models… while the fetch is in flight, or no model · ^/ to pick if it finished without one. The model fills itself in when the catalogue lands — dismissing the picker is safe.
    • Sign-in adopts only when nothing usable is configured. A keyless local host is stored with an empty key, so the old check counted it as a working setup; someone whose only entry was such a host got no adopt and a dead session.

    Full history: CHANGELOG.md

  5. v0.9.472026-11-05 · 2026-11-05 20:46 UTC
    查看更新说明

    Changed

    • The provider picker (Ctrl+P) shows what you've set up, not the whole catalogue. It used to list all fifteen built-in providers flat, ten of them amber "set the named key first" warnings for vendors you'd never touched. Now it opens on your configured backends and collapses the rest behind one line: Show 11 more providers. Press Enter on it or ^E to reveal them. Typing still searches every provider — an unconfigured one appears as a dim Enter to set up row, so nothing became harder to reach, and pasting a key that a provider recognises still routes it to the right place.
    • A multi-account provider says which account is serving. The model picker's section header and the status badge name the active account when a provider has more than one. Providers with a single account look exactly as before.
    • RECENT in the model picker is ordered by recency. Browsing sorted it alphabetically, so the model you picked ten seconds ago could sit below one you last used a week back. Favourites still lead the list.

    Fixed

    • Changing model no longer renames every turn already in the thread (#120). A turn's header named whichever model was currently selected rather than the one that actually produced it, so switching model rewrote the whole transcript — a Granite turn claiming to be Spark. Each turn now records its own model when it runs. (Turns from before this release have nothing recorded and still show the selection.)
    • Switching account on the active provider reloads its models. The model list was cached for 60 seconds and not invalidated on the switch, so Ctrl+/ could show the previous account's models — wrong whenever two accounts have different entitlements.
    • Keys in the provider picker no longer appear to need two presses. Expanding the list left the cursor clamped to the old, shorter list, so arrowing down stopped early and Enter on a revealed row did nothing.
    • The @ and # pickers show their keys. Enter, Esc and the arrows all worked; nothing on screen said so.
    • Settings → Plugins shows e edit and d remove on an unapproved server. Both keys worked there — the footer just hid them, exactly where you're deciding what to do about the server.
    • Footer hints describe the highlighted row: ^F reads unfavorite on a model you've already starred, and ^/ reads all providers when the list is scoped to one, which is how you widen it again.
    • The Retrieval pane's ^E advanced reads ^E hide advanced once the advanced rows are showing.
    • A scoped model list no longer offers to filter "across providers" while its own title says it is limited to one.
    • agentty update no longer offers a release whose binary for your platform is still building, then fails with a bare HTTP 404 (#119). Releases publish each platform's binary over about an hour; until yours lands, agentty offers the newest version that is ready (or says "up to date — v0.9.46 is out, its binary is still building") and checks again within 20 minutes instead of a day. The update chip in the TUI only appears when the update can actually be installed.
    • Updates are checked against GitHub's sha256 for the file before anything is replaced; a truncated or mismatched download installs nothing.
    • install.sh installs the newest release that has a binary for your platform, instead of failing during the same window.

    Full history: CHANGELOG.md

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译
    curl -fsSL https://agentty.org/install.sh | sh    # Linux · macOS
    irm https://agentty.org/install.ps1 | iex         # Windows (PowerShell)
    

    What it is

    The model decides what to do; the harness is everything around it: the tools it can call, the sandbox they run in, what goes into its context, which model handles which turn, and the interface you steer it from. agentty is that harness, written in C++26 and shipped as a single static binary.

    • One small binary. About 23 MB, starts in milliseconds, no Node, Python or Electron, no npm install. Download it and run it.
    • Any model. Sign in with the Claude Pro/Max, ChatGPT, GitHub Copilot or Kimi plan you already have, use an API key for OpenAI, DeepSeek, Gemini, Grok, Mistral, Groq, OpenRouter and more, or run a local model through Ollama. Switch mid-thread with ^P and ^/.
    • Sandboxed by default. Every shell command runs behind a wall the operating system enforces; your ~/.ssh, ~/.aws and .env files are masked.
    • Frugal with context. A local retrieval engine finds the code that matters instead of pasting whole files, so turns stay small and cheap.
    • Everywhere you work. In the terminal, inside Zed or JetBrains over ACP, as an MCP server, in scripts and CI, or on an air-gapped machine over SSH.
    • Open source (MIT).

    Coming from another tool? vs Claude Code · vs Codex CLI · vs Gemini CLI · vs opencode · vs jcode · vs Aider · vs Cursor · all alternatives

    Benchmarks

    What each harness costs you before the model does any work. Same machine, fresh install, no login, runs interleaved across tools; median of 10 launches (30 for --version).

    ready to typeidle memoryon disk, with runtime--version
    agentty 0.9.5147 ms21 MB23 MB2.6 ms
    jcode 0.99.156 ms106 MB163 MB17 ms
    Codex CLI 0.167.0402 ms152 MB536 MB77 ms
    Claude Code 2.1.319635 ms152 MB325 MB14 ms
    Aider 0.86.21.0 s74 MB653 MB1.1 s
    Gemini CLI 0.67.03.0 s441 MB197 MB2.6 s
    opencode 1.19.55.2 s651 MB409 MB0.8 s

    Measured 2026-11-08 on an Intel i5-6200U (4 threads, 16 GB), Linux. "Ready to type" is the time until the first prompt is fully drawn, read from the rendered terminal. agentty and jcode launch within the same range; call that a tie. Method, ranges and the script to reproduce it: agentty.org/benchmarks.

    Getting started

    curl -fsSL https://agentty.org/install.sh | sh
    cd your-project
    agentty
    

    The first launch asks how to connect: sign in with Claude Pro/Max, ChatGPT, GitHub Copilot or Kimi (no API key), paste an API key for any provider, or pick a local Ollama model that needs no key at all. Then type a request and press Enter. The quick start walks through the first session.

    The same line updates agentty later. Other ways to install are under Installation.

    Features

    ⚡ Fast all the way through

    A ~2.6 ms cold start and a prompt on screen in under 50 ms. Independent tool calls run in parallel, and read-only tools start while the model is still writing, so tool-heavy turns finish sooner.

    🔌 Any model, any plan

    Subscriptions you already pay for, API keys for ten more providers, any OpenAI-compatible endpoint, or local Ollama. One model picker across every provider you're signed into. Providers ↓

    🛡️ Sandboxed by default

    Shell and build commands run inside claybin: seccomp, Landlock and cgroups on Linux, seatbelt on macOS, AppContainer and job objects on Windows. Credential files are masked, file tools refuse paths outside your workspace, and network goes through a proxy that refuses your LAN, localhost and cloud metadata. docs/SANDBOX.md

    🌐 Air-gapped mode

    agentty airgap user@host runs a session on a machine with no internet; your laptop relays the traffic over SSH with TLS pinned end to end.

    🔧 A full tool suite

    read · edit · write · apply_patch · shell · grep · glob · outline · find_definition · repo_map · git · test · diagnostics · web · search_code · search_docs · task · todo · remember — each with a purpose-built widget in the UI.

    🧠 Learns your codebase

    A fully local retrieval engine (keyword plus embeddings, code-aware chunking and reranking), Agent Skills compatible with Claude Code's format, and remember / forget memory across sessions. Retrieval ↓

    🎯 Smart Mode

    A flagship model plans; cheaper models do the legwork. Effort scales to each turn, and the router learns your repo across sessions. Off is a strict no-op. Smart Mode ↓

    🤖 Scripts and CI

    agentty run "fix the failing test" runs one prompt with tools and prints the answer. --json, --timeout, --events jsonl, clear exit codes, and --read-only --no-network for untrusted code. Docs ↗

    Providers

    Sign in with a subscription you already have:

    agentty login        # → Claude Pro/Max · ChatGPT (Plus/Pro) · GitHub Copilot · Kimi
    

    Or point it at any of these:

    --providerWhatKey
    anthropicClaude (the default): API key or Pro/Max sign-inagentty login
    chatgptCodex models with your ChatGPT planagentty login
    copilotGitHub Copilot modelsagentty login
    kimiKimi K2 modelsagentty login
    openaiGPT and o-seriesOPENAI_API_KEY
    deepseekDeepSeek V4 (chat and reasoner)DEEPSEEK_API_KEY
    geminiGoogle GeminiGEMINI_API_KEY
    xaixAI GrokXAI_API_KEY
    mistralMistral, Codestral, MagistralMISTRAL_API_KEY
    groqLlama, Mixtral, Kimi on Groq LPUsGROQ_API_KEY
    cerebrasWafer-scale inferenceCEREBRAS_API_KEY
    togetherOpen models on together.aiTOGETHER_API_KEY
    fireworksOpen models on fireworks.aiFIREWORKS_API_KEY
    openrouterAny model via openrouter.aiOPENROUTER_API_KEY
    ollamaLocal models on localhost:11434none
    host:portAny OpenAI-compatible server (llama.cpp, vLLM, LM Studio…)optional
    agentty --provider ollama -m qwen2.5-coder        # local, no key, no cloud
    agentty --provider deepseek -m deepseek-v4-pro
    agentty --provider openrouter                     # pick any model in-app
    

    --provider persists. Inside a thread, ^P switches provider and ^/ switches model, with no restart. Behind a gateway, --auth-header X-API-Key sends the key under a custom header. Full reference: Providers & Models.

    Retrieval

    Rather than pasting a repository or every document into each prompt, agentty retrieves a small, source-tagged set of relevant passages only when the task needs them. That keeps context focused and avoids paying to resend irrelevant text on every turn.

    The engine is fully local, behind two tools. Keyword search works from the first run with no setup; a local Ollama adds search by meaning.

    • search_code finds code by what it does ("where is retry backoff handled") when you don't know its name. The complement to grep.
    • search_docs searches your docs folder (./docs, or AGENTTY_DOCS_DIR), your installed skills, and facts you asked it to remember.

    Every passage is tagged with its source (docs: · skill: · memory: · MCP URI) and line range, so the model can cite it, open it or follow it.

    Turn on search by meaning with one command:

    ollama pull qwen3-embedding:0.6b    # or nomic-embed-text, smaller
    

    agentty finds Ollama on localhost by itself. agentty diagnostics shows whether it's on (probe: ok). The index is built once per repo and then updated only for files you change.

    On agentty's own judged questions, search_code puts the right file first 63–78% of the time with qwen3-embedding and in the top 8 93–97% of the time (keyword only: 57–60% first, 92–95% top 8). Measure it on your repo with agentty rag-eval.

    Each search runs, in order:

    1. Structure-aware chunking. Code splits at functions and classes, docs at headings; each chunk is indexed with its title and heading path.
    2. Hybrid retrieval. BM25 (identifiers split into words, so onClipboardRead matches "clipboard read") and dense embeddings (HNSW), fused per query.
    3. Rerank. A deterministic feature reranker; for code, source ranks above tests and docs unless you ask for them, and a header lifts its .cpp.
    4. Diversify and de-duplicate. MMR, near-duplicate removal, and stitching of adjacent chunks into one span.
    5. Compress and budget. Passages are trimmed to the sentences that match the query and packed under a hard byte budget.
    6. Confidence. Each result carries a confidence; weak results say so.

    Opt-in stages (off by default; measure before turning on): pseudo-relevance feedback (AGENTTY_RAG_PRF=1), GraphRAG (AGENTTY_RAG_GRAPH=1), corrective retry (AGENTTY_RAG_CORRECT=1), and two that cost a model call: multi-query expansion (AGENTTY_RAG_EXPAND=1) and HyDE (AGENTTY_RAG_HYDE=1).

    Proactive retrieval (off until you turn it on in /settings → Proactive retrieval (RAG)) runs the funnel before the model asks and adds a source-tagged <retrieved-context> block to the turn, shown as one card with a confidence bar and the sources it used.

    All of it is in-house C++ (rag-cpp), every stage degrades gracefully, and each is tunable via AGENTTY_RAG_*. Full write-up: docs/website/retrieval.md.

    Smart Mode

    One model rarely fits every turn. A one-line rename and a cross-file refactor don't deserve the same effort, and spending flagship reasoning on trivia is slow and expensive. Smart Mode (^S) uses an orchestrator–workers design: a strong model owns the plan and delegates well-scoped subtasks to cheaper ones.

    • Three roles. Strategic (flagship) plans and delegates, Implementation (mid) writes code, Utility (cheap) handles summaries and grunt work. Roles map to (model, effort) and never check a model by name, so any model can go in any slot.
    • Effort that fits the turn. Each turn is sized from trivial to complex, and a cascade retries at higher effort only when a cheap attempt actually falls short.
    • It learns your repo. The loop sees outcomes a stateless router can't (the build fails, the test goes red, you correct the next turn), so Smart Mode keeps a per-workspace effort prior and recalls decompositions that worked. All learning is local (.agentty/) and wipeable.

    The overlay's footer shows what it has learned in this repo. Off is a strict byte-for-byte no-op: zero extra tokens, zero latency. Full write-up: docs/website/smart-mode.md.

    Keys

    KeyActionKeyAction
    EnterSend / queue^KCommand palette
    EscCancel / reject^JThread list
    S-TabCycle permission profile^PProvider picker
    Alt+EnterNewline^/Model picker
    ^BLoop: resend until off^NNew thread
    ^GRun a code block^SSmart Mode
    ^RReview changes^TPlan / todo
    ^ORead a retrieved-context card^EExpand composer
    ^CQuitAlt+←/→Cycle threads

    The composer is a full readline-style editor:

    KeyActionKeyAction
    ^←/→Move by word^W / Alt+DDelete word back / forward
    ^U / Alt+KKill to line start / end^Z / ^YUndo / redo
    ^V / Alt+VPaste image/ @ #Command / file / symbol picker
    ↑Recall queue / historyAlt+↑/↓Edit queued messages one at a time

    Full keymap: docs/website/keybindings.md. Pasting images over SSH needs one terminal setting; see Clipboard & Images.

    Installation

    Anywhere (Linux, macOS)

    curl -fsSL https://agentty.org/install.sh | sh
    

    If the prebuilt binary won't run on your system (a libc mismatch, for example), pass --build to compile from source instead. The installer also does this by itself when the downloaded binary fails to execute:

    curl -fsSL https://agentty.org/install.sh | sh -s -- --build
    

    Windows

    irm https://agentty.org/install.ps1 | iex
    # or
    winget install agentty
    # or
    scoop bucket add 1ay1 https://github.com/1ay1/scoop-bucket; scoop install agentty
    

    macOS

    brew tap 1ay1/tap && brew install agentty
    

    Linux packages (V = the release you want, e.g. 0.9.51)

    # Debian / Ubuntu
    curl -fsSLO https://github.com/agentty-org/agentty/releases/latest/download/agentty_${V}_amd64.deb
    sudo dpkg -i agentty_${V}_amd64.deb
    
    # Fedora / RHEL / CentOS
    sudo dnf install https://github.com/agentty-org/agentty/releases/latest/download/agentty-${V}-1.x86_64.rpm
    
    # openSUSE
    sudo zypper install https://github.com/agentty-org/agentty/releases/latest/download/agentty-${V}-1.x86_64.rpm
    
    # Arch (AUR)
    yay -S agentty-bin   # prebuilt static release
    yay -S agentty-git   # build HEAD from source, dynamically linked
    
    # Alpine: no .apk yet; use the install script above
    

    Package filenames carry the version, so latest/download/ needs it spelled out; see the releases page for the exact names, or use the install script, which resolves it for you.

    Termux / Android (no root, no proot)

    agentty builds natively against Termux's Bionic/libc++ toolchain. The install script detects Termux and installs into $PREFIX/bin:

    pkg install git cmake clang openssl libnghttp2
    curl -fsSL https://agentty.org/install.sh | sh -s -- --build
    

    Shell and build tools run unsandboxed on unrooted Android (claybin needs user namespaces Android doesn't grant); everything else works. See packaging/termux/ for the pkg install agentty recipe.

    Every release is a single fully static executable: x86_64 and aarch64 on Linux, Intel and Apple Silicon on macOS, x86_64 on Windows. Packaging details: packaging/README.md.

    Building from source

    Needs a C++26 toolchain (GCC 14+, a recent Clang, or MSVC).

    git clone --recursive https://github.com/agentty-org/agentty.git
    cd agentty && cmake -B build && cmake --build build -j
    

    Use the presets if you're going to edit the code. debug rebuilds in about 1.7 s after a one-line change, against about 36 s for the plain configure above, because it skips LTO. See Building from source.

    cmake --preset debug   && cmake --build --preset debug     # fast Debug loop (no LTO, ccache)
    cmake --preset release && cmake --build --preset release   # optimized -O3 + LTO binary
    ctest  --preset debug                                      # run the suite
    

    Every preset shares one build/ tree, so switching presets reconfigures it in place instead of leaving a second multi-gigabyte copy on disk. cmake --list-presets shows them all (debug, debug-full, release, ci, sanitizer, standalone, pch).

    More

    agentty airgap --setup user@host   # first time: copies credentials
    agentty airgap user@host           # every time after
    

    Your laptop relays the traffic via SOCKS5 over SSH. TLS is pinned to the real upstreams, so the network in between can't intercept it. Docs ↗

    agentty speaks the Agent Client Protocol, the same protocol Zed uses for Claude Code. Add it to Zed's settings:

    {
      "agent_servers": {
        "agentty": {
          "command": "agentty",
          "args": ["acp"]
        }
      }
    }
    

    JetBrains IDEs and other ACP clients: Zed / JetBrains / ACP.

    agentty mcp-serve exposes agentty's native tools to any MCP client over stdio. agentty also uses other MCP servers configured in .agentty/mcp.json; their tools appear next to the native ones. agentty mcp import copies the MCP servers you set up in another tool, and mcp-login authorizes servers that use OAuth. Docs ↗

    Some prompts are worth sending more than once: "fix the next failing test", "keep refactoring until the build is clean", "check if the deploy finished". ^B sends the composer's message and then re-sends it automatically after every completed turn, until you press ^B again.

    While armed, the composer keeps showing the prompt and becomes read-only, so the box can never say one thing while agentty sends another. A ⟳ LOOP ×N chip and a tinted border make an auto-sending session impossible to mistake for an idle one, and the count tells it apart from a hang. The model can't tell the difference: an auto-sent turn goes through the same path as one you typed.

    If a turn fails, the loop doesn't hammer the endpoint. It obeys the provider's Retry-After when there is one, otherwise waits with a delay that grows per error class (rate limit and auth from 30 s, transient errors from 5 s) and resets after the next success. The chip counts down (⟳ RETRY 24s), so a paused loop reads as waiting, not stuck. Esc cancels the turn; ^B stops the loop.

    When a reply hands you a block of commands, don't copy and paste it. ^G lists the blocks from the last reply; Enter (or a digit) runs one interactively on your real terminal: the UI steps aside, sudo prompts work, output streams live, and Ctrl+C stops the command, not agentty. When it exits, a result card lets you attach the captured output to the composer (a), copy it (y), or discard it (Esc), so "it failed with X" reaches the model without retyping.

    Each block runs in the right shell for its language on every OS, prompt $ markers are stripped, and capture is capped at 2 MB. Details: docs/RUN_CODE_BLOCK.md

    Drop a SKILL.md anywhere under .agentty/skills/ or ~/.agentty/skills/ and it's live on the next turn. Compatible with Claude Code's .claude/skills/ format.

    A skill that runs programs or reaches the network says so in its frontmatter (effects: [exec, net]) and installs through agentty skill add, which shows you what it declared and pins your approval to its content; edit the body and it asks again. Prose-only skills are never gated. See installing skills.

    The catalog of discovered skills is capped at 64 entries; set AGENTTY_MAX_SKILLS (8–4096) to lower it for small-context models or raise it for large skill libraries.

    A pure-functional update loop, (Model, Msg) -> (Model, Cmd); the view is Model -> Element, rendered by maya. Processes run via posix_spawn and poll(2). File writes are atomic (write, fsync, rename).

    Deep dive: docs/ARCHITECTURE.md · docs/RENDERING.md

    Cutting a release is one command:

    scripts/cut-release.sh X.Y.Z      # POSIX / macOS / Linux / Git Bash
    scripts\cut-release.cmd X.Y.Z     # Windows cmd.exe
    

    It bumps project(agentty VERSION …) in CMakeLists.txt (the single source of truth every manifest derives from), promotes CHANGELOG.md's [Unreleased] section to [X.Y.Z], commits, tags vX.Y.Z and pushes. The tag push fires GitHub Actions, which builds every binary and OS package (Linux x86_64/aarch64 on native runners, macOS Intel/ARM, Windows .exe/.msi) and submits to winget, Homebrew, Scoop and the AUR; nix, snap and gentoo manifests are attached to the release. --dry-run previews without writing anything.

    Community

    Join the Discord to ask questions, share sessions and get help. The server has an AI helper bot that answers agentty questions using the real agent: @mention it, DM it, or use /ask.

    Prefer IRC? #agentty on Libera.Chat (irc.libera.chat, port 6697, TLS). Matrix users can join #agentty:libera.chat.

    License

    MIT; see LICENSE.