{"slug": "show-hn-spyc-a-vi-driven-terminal-file-commander-for-your-coding-agents", "title": "Show HN: Spyc – a vi-driven terminal file commander for your coding agents", "summary": "Tripstack Corp. released spyc, a Rust-based, vi-driven terminal file commander that integrates AI coding agents via a local MCP socket, allowing agents to access the user's file selections and status without copy-paste. The tool, available via Homebrew and cargo, features a two-pane interface with a vim-flavored file manager and a child process pane (default Claude Code, also supporting Codex, Antigravity, and zot), plus git integration through gix, Lua scripting, and live previews. spyc is an independent project not affiliated with Side Effects Software Inc. or Anthropic.", "body_md": "The file commander built for collaborating with your coding agents.\n\nKeyboard-driven · MCP-native · Rust · macOS and Linux\n\nPut an AI coding agent in your terminal and you get a chat window. You still describe your working tree to it, paste paths back and forth, and lose track of what it's looking at.\n\nspyc runs the agent in a pane beside a keyboard-driven file commander and gives\nit live, structured access to what you're looking at over a local MCP socket.\nThe agent asks spyc *what is the cursor on, what is staged, what is picked* —\nno copy-paste, no path description. Pick three files, ask a question, and it\nsees your selection. When it names a path in its answer, `gf`\n\njumps you there.\n\nThe file manager is the shared workspace where you and your agents actually work — not a file list bolted onto a chat window.\n\nA two-pane terminal program. The **top pane** is a vim-flavoured file commander\nwith git-aware listings; the **bottom pane** is a child process — Claude Code by\ndefault (Codex, Antigravity and zot are first-class too), in practice anything.\nThey share focus through a screen-style `^a`\n\nchord prefix.\n\nEverything else — vi motions, marks, picks, inventory, pager, shell integration — is what you'd expect from a keyboard-driven file manager. The MCP bridge is what sets spyc apart from Yazi, Broot, or Ranger.\n\nA real session, mid-task: two columns on one worktree (`^s n`\n\n), three agent tabs\non the divider each carrying its own activity dot, and the `A`\n\nmonitor top-right\nreporting draws per second, throughput, and every MCP tool the agents have\ncalled. Two bands are blurred — the agent's own status line, and one command\necho carrying an absolute home path.\n\n**The name.** Say it *\"spy-see\"* — near enough to *spicy*, which is where the\nchili comes from. It carries a lineage too: `spy`\n\nand the keyboard-driven file\ncommanders before it, rebuilt from scratch in Rust for the age of coding agents.\n\nspyc is an independent project, not affiliated with or endorsed by Side Effects Software Inc. or Anthropic.\n\nMarkdown renders, source arrives syntax-highlighted, a binary falls back to a hex dump — same key every time, no editor, file list still there. Images open as actual pictures on a terminal with a graphics protocol.\n\n`^s |`\n\nopens a live preview column on the cursor file; press it on another file\nto swap, again to close. It re-renders when the file changes on disk, so it\ndoubles as a watch window while something else writes.\n\nThe gutter marks what changed; `gd`\n\ndiffs against HEAD, `|`\n\ntoggles\nside-by-side/unified, `gb`\n\nblames. All in-process through gix — spyc never\nshells out to `git`\n\n.\n\n`map T lua todos`\n\nbinds a key to a script. This one runs spyc's own\ngitignore-aware search and picks every file with a TODO left in it. Scripts run\noff the main thread behind a kill switch; `init.lua`\n\ncan register `:`\n\ncommands\nand event hooks too.\n\nEach tab carries a live dot — pulsing while the agent works, settling to a hot-red square the moment it blocks — and that transition fires a border pulse and a desktop notification, so you get pulled back from another window. Driven by the agent reporting its own status over MCP, not by scraping the screen.\n\nPre-built, signed binaries — no Rust toolchain needed:\n\n```\nbrew install Tripstack-Corp/tap/spyc          # macOS & Linux\ncargo install spyc                            # any platform, with Rust\n```\n\nDebian/Ubuntu users get a signed apt repo, and every release ships verified\ntarballs. **Full install guide — apt, tarballs, terminal, font, clipboard and\nMCP setup — is in INSTALL.md;** building from source and running\nthe rolling CURRENT stream are in\n\n[BUILD.md](/Tripstack-Corp/spyc/blob/main/BUILD.md).\n\nYou'll want a coding agent for the pane (`npm install -g @anthropic-ai/claude-code`\n\n)\nand a [Nerd Font](https://www.nerdfonts.com/) for the powerline status bar —\npress `C`\n\ninside spyc for a mono fallback if you'd rather not install one.\n\n```\nspyc            # opens in the current directory\nspyc -r         # resume a session (tabs + each agent's conversation)\n```\n\nMove with `hjkl`\n\n, `Enter`\n\nopens, `e`\n\nedits, `?`\n\nshows the full help overlay.\nThen try the part that makes spyc spyc, in a git repo:\n\n- Press\n`t`\n\non two or three files to**pick** them. - Press\n`^\\`\n\nto open the agent pane — it launches`claude`\n\nby default. - Ask:\n**\"How do these files interact?\"** The agent reads your picks over MCP, with no pasting of paths. - When it names a file, press\n`gf`\n\nto jump straight to it.\n\n`^a j`\n\n/ `^a k`\n\nswitch focus between the list and the pane.\n\nOn startup spyc runs a local MCP server and writes the agent's config automatically — no flags, no setup. The agent can then ask spyc:\n\n**What you're looking at**—`get_spyc_context`\n\n: cwd, cursor file, picks, inventory, active filter, git branch.**Where things are**—`search_paths`\n\n/`search_content`\n\n(gitignore-aware), plus`search_picks`\n\nand`search_inventory`\n\nfor state generic filesystem tools can't see.**Git and worktrees**— status, log and diff in-process, plus worktree create/open/remove without ever shelling out to`git worktree`\n\n.\n\nThe handshake has to stay short, so the depth ships as an installable skill:\n\n```\nspyc --install-skill      # → Claude Code, codex, and agy skill dirs\n```\n\nspyc offers a `[Y/n]`\n\nupdate when its copy moves ahead of yours, never\noverwrites edits you've made, and is managed in-app with `:skill`\n\n. Multiple\nspyc instances coexist safely, and enterprise `managed-mcp.json`\n\npolicies are\nrespected — see [INSTALL.md](/Tripstack-Corp/spyc/blob/main/INSTALL.md#mcp-configuration).\n\nEach tab's **activity dot** answers *which one needs me* — hot pulse while\nworking, settled square when blocked or done, with a desktop notification on the\ntransition. An advisory **scope registry** (`register_scope`\n\n/ `list_scopes`\n\n/\n`wait_for_scope_clear`\n\n) keeps parallel agents off each other's files. Sessions\nauto-save within seconds of any change, so a crash loses almost nothing and\n`spyc -r`\n\nresumes every tab and conversation. Design:\n[docs/AGENT_ORCHESTRATION.md](/Tripstack-Corp/spyc/blob/main/docs/AGENT_ORCHESTRATION.md).\n\nThe essentials. Press `?`\n\nin spyc for the full overlay, or see\n[docs/KEYBINDINGS.md](/Tripstack-Corp/spyc/blob/main/docs/KEYBINDINGS.md) for the complete map.\n\n| Key | Action |\n|---|---|\n`h` `j` `k` `l` |\nMove (counts work: `5j` ) |\n`Enter` / `e` |\nOpen in pager / open in `$EDITOR` |\n`t` |\nPick / unpick a file (multi-select) |\n`^\\` or `F10` |\nToggle the agent pane |\n`^a j` / `^a k` |\nSwitch focus between list and pane |\n`^a s` |\nSend picked paths to the pane |\n`gf` / `gF` |\nJump from pane output to a file (+ line) |\n`F` / `:grep` |\nFuzzy filename finder / project content search |\n`?` / `q` |\nFull help overlay / quit |\n\nspyc reads `.spycrc.toml`\n\nfrom `~/.spycrc.toml`\n\n(user) and `./.spycrc.toml`\n\n(project), applying changes live. Bootstrap a fully-commented file with every\ndefault:\n\n```\nspyc --print-config > ~/.spycrc.toml\n```\n\nRebind keys, set colors and layout, tune agent notifications, script in Lua.\nNote that `^a`\n\nand `^w`\n\nare reserved as chord prefixes, and a project-local\nconfig can't bind executing verbs — full reference, including both rules, in\n[CONFIGURATION.md](/Tripstack-Corp/spyc/blob/main/CONFIGURATION.md).\n\n|\n\n[docs/KEYBINDINGS.md](/Tripstack-Corp/spyc/blob/main/docs/KEYBINDINGS.md)[CONFIGURATION.md](/Tripstack-Corp/spyc/blob/main/CONFIGURATION.md)`.spycrc.toml`\n\n, notifications, keymap DSL, Lua[INSTALL.md](/Tripstack-Corp/spyc/blob/main/INSTALL.md)[BUILD.md](/Tripstack-Corp/spyc/blob/main/BUILD.md)[docs/HARNESS.md](/Tripstack-Corp/spyc/blob/main/docs/HARNESS.md)[docs/AGENT_ORCHESTRATION.md](/Tripstack-Corp/spyc/blob/main/docs/AGENT_ORCHESTRATION.md)[ARCHITECTURE.md](/Tripstack-Corp/spyc/blob/main/ARCHITECTURE.md)[DESIGN.md](/Tripstack-Corp/spyc/blob/main/DESIGN.md)[CHANGELOG.md](/Tripstack-Corp/spyc/blob/main/CHANGELOG.md)·[ROADMAP.md](/Tripstack-Corp/spyc/blob/main/ROADMAP.md)[CONTRIBUTING.md](/Tripstack-Corp/spyc/blob/main/CONTRIBUTING.md)[Issues](https://github.com/Tripstack-Corp/spyc/issues)[roadmap board](https://github.com/orgs/Tripstack-Corp/projects/1)BSD-3-Clause. Logo uses [Twemoji](https://github.com/jdecked/twemoji) pepper\nartwork (CC-BY 4.0).", "url": "https://wpnews.pro/news/show-hn-spyc-a-vi-driven-terminal-file-commander-for-your-coding-agents", "canonical_source": "https://github.com/Tripstack-Corp/spyc", "published_at": "2026-08-18 14:21:16+00:00", "updated_at": "2026-08-18 14:41:22.263574+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-agents"], "entities": ["Tripstack Corp.", "spyc", "Claude Code", "Codex", "Antigravity", "zot", "Side Effects Software Inc.", "Anthropic"], "alternates": {"html": "https://wpnews.pro/news/show-hn-spyc-a-vi-driven-terminal-file-commander-for-your-coding-agents", "markdown": "https://wpnews.pro/news/show-hn-spyc-a-vi-driven-terminal-file-commander-for-your-coding-agents.md", "text": "https://wpnews.pro/news/show-hn-spyc-a-vi-driven-terminal-file-commander-for-your-coding-agents.txt", "jsonld": "https://wpnews.pro/news/show-hn-spyc-a-vi-driven-terminal-file-commander-for-your-coding-agents.jsonld"}}