Homegrown TUI Coding Agent.
  • Rust 98.5%
  • Lua 1.5%
Find a file
2026-10-18 10:14:13 +00:00
.forgejo/workflows Skeleton for the Coding Agent. (#1) 2026-02-24 19:50:38 +00:00
app Move all lua to plugins module. (#149) 2026-10-18 10:14:13 +00:00
contrib/models_endpoint Parsing model endpoint. (#52) 2026-06-15 13:32:16 +00:00
core Move all lua to plugins module. (#149) 2026-10-18 10:14:13 +00:00
docs Add the concept of "rinks" for grouped agents. (#140) 2026-10-18 00:58:08 +00:00
plugin Move all lua to plugins module. (#149) 2026-10-18 10:14:13 +00:00
scripts Add README.md and documentation (#49) 2026-06-03 06:05:36 +00:00
tools Move all lua to plugins module. (#149) 2026-10-18 10:14:13 +00:00
tui Cleanup core (#148) 2026-10-18 09:11:00 +00:00
.fdignore Agent context cleanups. (#142) 2026-10-18 02:08:34 +00:00
.gitignore Add README.md and documentation (#49) 2026-06-03 06:05:36 +00:00
.rgignore Agent context cleanups. (#142) 2026-10-18 02:08:34 +00:00
AGENTS.md Move all lua to plugins module. (#149) 2026-10-18 10:14:13 +00:00
Cargo.lock Move all lua to plugins module. (#149) 2026-10-18 10:14:13 +00:00
Cargo.toml Register tools as plugins. (#139) 2026-10-18 00:05:53 +00:00
DESIGN.md Add the concept of "rinks" for grouped agents. (#140) 2026-10-18 00:58:08 +00:00
pyproject.toml Add README.md and documentation (#49) 2026-06-03 06:05:36 +00:00
README.md Add resume capabilities (#138) 2026-10-17 22:58:46 +00:00
uv.lock Add README.md and documentation (#49) 2026-06-03 06:05:36 +00:00
zensical.toml Add README.md and documentation (#49) 2026-06-03 06:05:36 +00:00

Skate Coding Agent Harness

This is a bespoke coding agent harness with a couple of unique features.

The only supported operating system is Linux.

Unique Features

The features below are the driving factors that led me to writing my own harness instead of reusing an already available one.

Modal Editing

The skate TUI is modal and makes heavy use of hotkeys and commands.

The hotkeys are vim-inspired but are not intented to be a one-to-one mapping. Some shortcuts attempt to mirror existing coding agents instead (for instance Ctrl + G to edit a plan).

Zero Tool Confirmations

The skate harness has no concept of a tool confirmation. Instead the agent is given a set of permissions and these are enforced on tool uses, either working or failing transparently.

By default when executing the agent can modify any files in the current directory but has read only access to files in other directories. (This applies to both the builtin read/edit file tools as well as any bash commands that may be executed). Network access can also be toggled on or off.

Standard Features

Model/Provider Selection

The skate harness can work with multiple different model providers via plugin definitions.

Anthropic and Synthetic are fully supported by default. Vertex AI has partial support for Anthropic models.

Plan/Execute Modes

The skate harness has the concept of different modes for a conversation to be in along with different system prompts for each.

Currently there is plan and execute mode. In planning mode the agent is told to create a plan and only given access to write the current plan file along with read access to the rest of the system.

In execute mode, the agent is provided a pointer to the created plan file and write access to the current directory.

Usage

Start by cloning the repository to your machine

git clone https://git.tiramisu.one/drew/skate.git
# OR for JJ
jj git clone https://git.tiramisu.one/drew/skate.git

Running for test:

cargo run

Installing:

cargo install --path=app/
skate

Sessions

Every run is a session, stored under $XDG_STATE_HOME/skate/sessions/<project-slug>/<uuid>/. skate opens on a dashboard: the left pane lists the project's recent sessions (newest first, with last activity, plan/exec, first message, id and model), the right pane the available models. j/k move, Enter on <create new agent> (or n anywhere) opens the new-agent dialog, Enter on a past session resumes it and q quits. A resumed session restores the conversation for the model, re-renders the transcript and keeps appending to the same logs. Tool calls that were still running when the previous run ended are marked as failed. Sandbox changes made live (such as :net on) are not remembered; a resumed session starts from the configured policy.

skate                   # dashboard
skate --exec            # skip the dashboard, new session in execute mode
skate --resume <uuid>   # skip the dashboard, resume that session
skate sessions          # list sessions (time, uuid)

To view the documentation locally, run:

uv run docs

AI Usage

Almost all of the code in this project was produced by LLMs and reviewed by a human. The top level architecture is fairly scrutinized while individual functions and unit tests are not.

This README file and all documentation is human written.