Skip to content
View kzsh's full-sized avatar

Block or report kzsh

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
kzsh/README.md

Projects

  • orbit - 2D orbital mechanics sim and trajectory planner
  • orka - LLM coding agents in isolated containers
  • recall - shell history in SQLite
  • space - workspace sets for Sway
  • xorc - LLM-generated text adventure
  • gh-ff - GitHub operations from reviewable YAML files
  • pi extensions and skills - client additions and agent behaviour for pi
  • Other tools - Linear client, tmux attach, markdown navigation

orbit

orbit.kzsh.dev - a 2D orbital-mechanics prototype. Ships move on Keplerian conics, solved in closed form and drawn ahead of time.

Plot a course by hand with manoeuvre nodes. A look-ahead scrub bar runs forward from now through the predicted future, and the encounter list reports every close approach to the target with its closing speed.

Rust, running natively and in the browser through wasm.

orka

getorka.dev - run LLM coding agents in isolated containers. Mount what they need; nothing else is reachable.

A session sees the paths you mount and nothing else. Files inside a mounted project can be shadowed with empty read-only stubs, so mounting a repository keeps its .env out of reach.

Toolchain paths and environment variables are reused through named presets. orka --preset rust mounts the Rust paths; presets stack when a project needs more than one, and always-on presets live in config.yaml.

Supported
Agents pi, claude-code, codex
Engines Docker, Podman, Apple container (alpha), bubblewrap (alpha)
Platforms Linux (alpha), macOS (alpha)

Alpha, and predominantly vibe-coded. Open source at kzsh/orka, which also carries the docs and release binaries; orka.nvim runs orka -f <current-buffer> in a Neovim terminal split.

recall

github.com/kzsh/recall - record shell commands into SQLite for later recall. I wanted part of atuin without all the rest.

recall log runs from PROMPT_COMMAND and stores each command line with its timestamp, working directory, session, host, exit code, and wall-clock duration measured in PS0. recall search filters on any of those - --cwd ., --since 7d, --failed, --unique - and --null output feeds fzf --read0 for a picker over the current directory's successful commands. recall sql streams arbitrary statements against the schema when the filters are not enough.

Rust, with a bundled SQLite trimmed to what the tool calls.

space

github.com/kzsh/space-daemon - workspace sets for Sway. Sway gives every workspace one flat namespace; space groups them into named sets, gives each monitor its own set, and switches a monitor's whole set at once.

A workspace is named <key>(<set>), so Q(main) and Q(work) are the same key in two sets. Icing a set records its window tree and parks the windows out of the way; thawing rebuilds the layout, so a set can sit frozen with no monitor showing it. Monitors are keyed by make, model and serial, so one keeps its set across ports. A pinned window belongs to a key rather than a set, and follows you into whichever set is on screen.

Rust over swayipc, with wofi for the pickers.

xorc

github.com/kzsh/xorc - a text adventure whose world is generated by an LLM.

The map is a graph in SQLite, built as it is walked. Leave a room in a direction that has no exit yet and the model decides whether the path opens somewhere new or loops back to a room you have already seen, reasoning from the nearby graph, the distance travelled, and the time of day. Rooms remember what happened in them; actions can change one permanently, create items, or reveal a passage. Compass directions and verbs like take and inspect are parsed directly; anything else is either mapped onto an existing action or interpreted freeform.

gh-ff

github.com/kzsh/gh-ff - execute GitHub operations from reviewable YAML files. An agent writes the file, you read it, then gh-ff runs it through the gh CLI.

Two layers. Ops entries map one-to-one onto gh invocations and run in order, stopping at the first failure; cmd: api reaches any REST or GraphQL endpoint. Specs are task-shaped documents compiled to ops - currently review, a whole PR review submitted as one atomic request, with server-assigned ids written back so resubmitting edits the review in place. --read-only audits every compiled command before the first one runs and aborts, naming the offenders, if any would mutate; unrecognized commands count as mutations.

Go, with the ops format published as an agent skill.

pi extensions and skills

Additions to the pi coding agent, in two kinds.

Extensions change the client. pi-burn tracks cost per request as context grows: a status-bar breakdown by token type, a braille sparkline of the session's history, a /burn report, and a --burn-budget that colours the graph as spend approaches the limit. pi-vi puts vim modal editing in the input editor, with normal and insert modes, counts, operators, and motions. pi-alt adds Alt+Enter as a newline shortcut.

Skills change the agent's behaviour. Each is a single SKILL.md, loaded when the task matches its description: git, markdown, python, rust, typescript, and partial-stage, which stages selected changes within a file when git add -p cannot split a hunk finely enough.

Other tools

  • linear-cli - client for the Linear GraphQL API. linear graphql is the primitive; a few subcommands (issue, team, project, viewer) sit on top of it.
  • ta - attach to a tmux session. One session attaches directly, several open an fzf picker, and a number, name, or substring argument skips the list when it resolves to one session.
  • markdown-navigation - follow markdown links in Neovim with <C-]>, including heading and line anchors. Remote .md URLs are fetched to a cache and opened in a buffer; GitHub blob URLs are rewritten to raw first.

Pinned Loading

  1. xorc xorc Public

    A text adventure game where the world is generated via LLM

    Rust

  2. orka.nvim orka.nvim Public

    Lua 1

  3. recall recall Public

    Record shell commands into SQLite for later recall

    Rust

  4. pi-vi pi-vi Public

    TypeScript

  5. pi-burn pi-burn Public

    Tracks cost-per-request acceleration in pi sessions

    TypeScript

  6. linear-cli linear-cli Public

    Rust