{"id":49760204,"url":"https://github.com/indrasvat/shux","last_synced_at":"2026-05-19T07:11:30.985Z","repository":{"id":356807281,"uuid":"1161368932","full_name":"indrasvat/shux","owner":"indrasvat","description":"A modern take on tmux","archived":false,"fork":false,"pushed_at":"2026-05-16T07:20:15.000Z","size":8420,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-16T09:40:41.190Z","etag":null,"topics":["agents","asciinema","automation","claude-code","codex","gemini","iterm2","tmux"],"latest_commit_sha":null,"homepage":"https://shux.pages.dev","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/indrasvat.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-19T03:00:05.000Z","updated_at":"2026-05-16T07:20:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/indrasvat/shux","commit_stats":null,"previous_names":["indrasvat/shux"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/indrasvat/shux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indrasvat%2Fshux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indrasvat%2Fshux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indrasvat%2Fshux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indrasvat%2Fshux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/indrasvat","download_url":"https://codeload.github.com/indrasvat/shux/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/indrasvat%2Fshux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33205730,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T09:27:30.708Z","status":"online","status_checked_at":"2026-05-19T02:00:06.763Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","asciinema","automation","claude-code","codex","gemini","iterm2","tmux"],"created_at":"2026-05-11T05:00:34.137Z","updated_at":"2026-05-19T07:11:30.980Z","avatar_url":"https://github.com/indrasvat.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.svg\" alt=\"shux\" width=\"400\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eThe terminal multiplexer built for AI coding agents\u003c/strong\u003e\u003cbr\u003e\n  \u003cem\u003eTyped API. Deterministic state. Zero wrappers needed.\u003c/em\u003e\u003cbr\u003e\n  \u003ca href=\"https://github.com/indrasvat/shux/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/indrasvat/shux/ci.yml?branch=main\u0026style=flat\u0026labelColor=1a1a1a\u0026label=CI\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://app.codecov.io/gh/indrasvat/shux\"\u003e\u003cimg src=\"https://img.shields.io/codecov/c/github/indrasvat/shux?style=flat\u0026labelColor=1a1a1a\" alt=\"coverage\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/indrasvat/shux/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/indrasvat/shux?style=flat\u0026labelColor=1a1a1a\" alt=\"release\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/lang-Rust-DEA584?style=flat\u0026labelColor=1a1a1a\" alt=\"Rust\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/license-MIT-blue?style=flat\u0026labelColor=1a1a1a\" alt=\"MIT\"\u003e\n\u003c/p\u003e\n\n---\n\n## Why shux\n\nEvery AI agent orchestration tool today wraps tmux. They do it because no\nmultiplexer offers a typed API for programmatic control. shux is what tmux\nwould be if designed today: humans and agents are equal citizens, every\noperation is available through both keyboard and JSON-RPC, state is always\nqueryable, deterministic, and streamable.\n\n```bash\n# As a human\nshux                                    # attach to last session, or create \"default\"\n\n# As an agent — every CLI verb mirrors an RPC method 1:1.\n# RPC dots become CLI spaces. No top-level shortcuts to memorize.\nshux session create work                # → session.create RPC\nshux session list                       # → session.list\nshux pane send-keys -s work --text 'j'  # → pane.send_keys\nshux rpc call \u003cmethod\u003e --params @file   # raw fallthrough for any method\n```\n\n## Install\n\nThe fastest path — pre-built binary for macOS and Linux (x86_64 / aarch64),\nverified by SHA-256 and dropped into `~/.local/bin`:\n\n```bash\ncurl -sSfL https://raw.githubusercontent.com/indrasvat/shux/main/install.sh | bash\n```\n\nPin a version or change the install dir:\n\n```bash\ncurl -sSfL https://raw.githubusercontent.com/indrasvat/shux/main/install.sh \\\n  | bash -s -- --version v0.1.0 --dir ~/.bin\n```\n\nOr build from source:\n\n```bash\ngit clone https://github.com/indrasvat/shux.git\ncd shux\nmake install   # → ~/.local/bin/shux\n```\n\nRequires Rust 1.93+ and a Unix-like OS (macOS, Linux). For dev setup, see\n[`docs/development.md`](docs/development.md).\n\n## Quickstart\n\n```bash\nshux                              # attach last session (TTY-only)\nshux session create work          # create + attach a named session\nshux pane split -s work           # split the active pane\nshux pane snapshot -s work        # PNG of the current frame\nshux config init                  # scaffold ~/.config/shux/config.toml\n```\n\nEvery command mirrors an RPC method: `shux session create` is the same\nRPC as `session.create`. Drop to the raw form with\n`shux rpc call session.create --params @spec.json` when you'd rather\nwrite the payload in a file.\n\nInside the TUI, the prefix key is `Ctrl+Space` by default:\n\n| Key | Action |\n|---|---|\n| `Ctrl+Space \\|`/`-` | split vertical / horizontal |\n| `Ctrl+Space h`/`j`/`k`/`l` | focus left / down / up / right |\n| `Ctrl+Space z` | toggle zoom |\n| `Ctrl+Space d` | detach |\n| click any pane | focus it |\n| drag a border | resize |\n\n## Extend shux with a process plugin\n\nA plugin is any executable that speaks shux's line-delimited\nJSON-RPC dialect on stdin/stdout. It subscribes to bus events and can\ncall the same RPC methods you use from outside (`window.rename`,\n`pane.send_keys`, `state.apply`, …). Any language — bash, python,\nnode — same trust model as a shell function.\n\n```bash\nshux plugin install ./my-plugin.sh   # spawn, handshake, register\nshux plugin list                      # what's running\nshux plugin kill \u003cname\u003e               # graceful shutdown (2s) → SIGKILL\n```\n\nThe smallest correct shape is\n[`examples/plugins/hello/plugin.sh`](examples/plugins/hello/plugin.sh)\n(~30 lines of bash). Full protocol is documented in\n[`skills/shux/references/plugins.md`](skills/shux/references/plugins.md)\nand the task design doc\n[`docs/tasks/044a-process-plugins-v0.md`](docs/tasks/044a-process-plugins-v0.md).\n\n## Documentation\n\nRead in this order:\n\n1. [**Quickstart for humans**](docs/users.md) — keybindings, status bar,\n   customization, dotfile integration\n2. [**Quickstart for agents**](docs/agents.md) — typed JSON-RPC surface,\n   `ensure` semantics, event streaming, scripting patterns\n3. [**Configuration**](docs/configuration.md) — `~/.config/shux/config.toml`\n   schema, hot reload, status-bar segments, starship integration\n4. [**Architecture**](docs/architecture.md) — daemon model, the seven crates,\n   why each one exists, the patterns that hold it all together\n5. [**Development**](docs/development.md) — dev setup, make targets, the L1–L4\n   testing strategy\n6. [**Roadmap**](docs/roadmap.md) — what's done, what's next, milestone plan\n7. [**Full PRD**](docs/PRD.md) — design philosophy, competitive analysis,\n   plugin WIT interfaces, performance budgets\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findrasvat%2Fshux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Findrasvat%2Fshux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Findrasvat%2Fshux/lists"}