TokenEconomizer
코딩 에이전트를 위한 경험 기반 블랙박스 비용 제어
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A modern take on tmux
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Latest coverage report: Codecov dashboard.
Every AI agent orchestration tool today wraps tmux. They do it because no multiplexer offers a typed API for programmatic control. shux is what tmux would be if designed today: humans and agents are equal citizens, every operation is available through both keyboard and JSON-RPC, state is always queryable, deterministic, and streamable.
# As a human
shux # attach to last session, or create "default"
# As an agent — every CLI verb mirrors an RPC method 1:1.
# RPC dots become CLI spaces. No top-level shortcuts to memorize.
shux session create work # → session.create RPC, cwd = caller $PWD
shux session create work --title work # pin the initial pane border title
shux session list # → session.list
shux pane send-keys -s work --text 'j' # → pane.send_keys
shux rpc call <method> --params @file # raw fallthrough for any method
The fastest path — pre-built binary for macOS and Linux (x86_64 / aarch64),
verified by SHA-256 and dropped into ~/.local/bin:
curl -sSfL https://raw.githubusercontent.com/indrasvat/shux/main/install.sh | bash
Pin a version or change the install dir:
curl -sSfL https://raw.githubusercontent.com/indrasvat/shux/main/install.sh \
| bash -s -- --version v0.1.0 --dir ~/.bin
Or build from source:
git clone https://github.com/indrasvat/shux.git
cd shux
make install # → ~/.local/bin/shux
Requires Rust 1.93+ and a Unix-like OS (macOS, Linux). For dev setup, see
docs/development.md.
shux # attach last session (TTY-only)
shux session create work # create + attach in the caller's cwd
shux session create work --title work # also pin the initial pane title
shux pane split -s work # split the active pane
shux pane snapshot -s work # PNG of the current frame
shux pane record -s work -p <pane-id> --to pane.raw # byte-exact PTY capture
shux config init # scaffold ~/.config/shux/config.toml
PNG snapshots are headless: no terminal emulator participates. shux bundles a
snapshot font chain for common TUI output out of the box: JetBrains Mono Nerd
Font for primary monospace metrics and Nerd Font icons, Noto Sans Math/Symbols
for arrows, braille spinners, status glyphs, box/progress symbols, and
Miscellaneous Technical glyphs, plus monochrome Noto Emoji for standalone
emoji. Use appearance.font only when you want to replace the primary metrics
font; appearance.font_fallbacks is for extra snapshot-only fallback coverage.
Every command mirrors an RPC method: shux session create is the same
RPC as session.create. Drop to the raw form with
shux rpc call session.create --params @spec.json when you'd rather
write the payload in a file. CLI-created sessions start in the current
directory of the shux invocation unless you pass --cwd. Use --title
when the initial pane's border label should be pinned instead of following
app-emitted OSC titles or command/cwd auto-title derivation.
For live observation, shux pane watch follows the sampled data-plane stream.
For audits, transcripts, or absence-of-bytes checks, use shux pane record;
it writes raw PTY bytes before VT processing and before sampled coalescing.
For repeatable terminal UI verification, use the first-party Sightline package instead of hand-rolled snapshot scripts when you need a verdict for layout, keyboard probes, color rendering, or PR evidence:
plugins/sightline/bin/sightline verify \
--session work \
--pane <pane-id> \
--viewport 80x24 \
--color-probe-shell \
--expect-text READY
Sightline writes reports, captures, raw color evidence, and PNG snapshots under
.shux/out/sightline/ by default. If this repository is not checked out, the
shux skill includes a helper that downloads only the minimal Sightline package
into a user-scoped cache.
Inside the TUI, the prefix key is Ctrl+Space by default:
| Key | Action |
|---|---|
Ctrl+Space |/- | split vertical / horizontal |
Ctrl+Space h/j/k/l | focus left / down / up / right |
Ctrl+Space z | toggle zoom |
Ctrl+Space d | detach |
| click any pane | focus it |
| drag a border | resize |
| scroll wheel | scroll the pane's scrollback (or the app under the cursor when it uses the mouse) |
| drag pane text | select visible text and copy on release |
| right-click selected text | open inline Copy / Clear menu |
The scroll wheel just works: over a normal pane it scrolls shux's scrollback;
over a mouse-aware app (vim, htop, less --mouse) it scrolls the app; and
over a full-screen pager on the alternate screen (less, man) it moves by
arrow keys. For keyboard-driven selection and search, use Ctrl+Space [ to
enter copy mode. Normal visible text copy is mouse-first: drag text, release,
paste.
A plugin is any executable that speaks shux's line-delimited
JSON-RPC dialect on stdin/stdout. It subscribes to bus events and can
call the same RPC methods you use from outside (window.rename,
pane.send_keys, state.apply, …). Any language — bash, python,
node — same trust model as a shell function.
shux plugin install ./my-plugin.sh # spawn, handshake, register
shux plugin list # what's running
shux plugin kill <name> # graceful shutdown (2s) → SIGKILL
The smallest correct shape is
examples/plugins/hello/plugin.sh
(~30 lines of bash). Full protocol is documented in
skills/shux/references/plugins.md
and the task design doc
docs/tasks/044a-process-plugins-v0.md.
Read in this order:
ensure semantics, event streaming, scripting patterns~/.config/shux/config.toml
schema, hot reload, status-bar segments, starship integrationMIT