- 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.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.
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.
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.
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.
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.
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.
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.
- linear-cli - client for the
Linear GraphQL API.
linear graphqlis 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.mdURLs are fetched to a cache and opened in a buffer; GitHub blob URLs are rewritten to raw first.


