Documentation

Set up Handwork.

Install the CLI, connect a model, and run your first task. You need npm and an account with a model provider. Prefer a window? Download the desktop app; it includes the agent.

01Quick start

Install and launch
# Install Handwork
npm install -g handwork

# Open a project
cd /path/to/your/project
handwork

Connect a provider with /provider, then choose a model with /model.

Check Windows limitations. Windows x64 runs in CI. ARM64 is cross-compiled.

Check permissions first.

Run /permissions. The default auto mode can approve file changes and commands. Use ask to prompt for sensitive actions that no rule has approved.

02Model providers

Connect a cloud provider or an Ollama server. Providers include OpenAI, Anthropic, Gemini, and OpenRouter.

Use /provider to choose a provider and enter its key. Enter saves and connects. Escape cancels. Ollama servers can connect without a key.

Your provider controls model access and billing. Codex and Copilot adapters use their own agent engines, tools, sessions, and permissions.

See all providers and sign-in options

03First task

Describe the change and the checks to run.

Example task
Fix the failing parser test. Keep the change focused.
Run the parser tests and report the result.

Run a single request from your shell with ask.

Run a request
handwork ask "Explain this project's entry points"
handwork ask --json "Review the current changes without editing files"

A prompt to avoid edits does not change permissions. Review the diff and test results after each task.

04Permissions and data

ModeBehavior
askPrompts before sensitive actions that no rule has approved.
autoReviews sensitive actions that no rule has approved. This is the default.
full-accessTurns off Handwork's permission checks.

Run /permissions ask to require prompts. Use /allowlist to manage saved rules. If auto mode returns a caution, Handwork holds the action instead of opening a prompt.

Cloud providers receive task data.

A request can include your prompt, code excerpts, tool results, and conversation history. Read the provider's data policy before sending private code. Handwork stores native API keys in files that only your account can read. It does not encrypt them at rest.

Permission checks do not isolate the process from the operating system. They also do not prove that generated code is correct.

05Commands

CommandAction
/helpLists commands.
/providerConnects or switches providers.
/modelChooses a model and reasoning effort.
/newStarts a session.
/resumeOpens a saved session.
/compactSummarizes the conversation in a new context window.
/skillsLists and manages skills.
/mcpManages MCP servers and project trust.
/quitExits Handwork.

Use handwork --help for all commands, handwork doctor to check setup, and handwork update to update the CLI. Restart after updating.

06Saved sessions

Resume a session
handwork sessions
handwork session resume last

Native sessions live in ~/.handwork/sessions. Resuming restores the conversation, not files or running programs. Check your workspace after an interrupted task.

Run handwork ask --no-save "Your task" when you do not want to save the request. Provider runtime sessions use the provider's storage.

07Images and diagrams

Handwork displays local images, SVG, and supported Mermaid diagrams. Image quality depends on your terminal.

Try a diagram

Ask for a fenced mermaid or svg block.

Diagram prompt
Return only a fenced mermaid block, without tools or explanation.
Create a flowchart: Open project -> Run tests -> Tests pass?
If yes, finish. If no, fix the code and run tests again.

Handwork renders flowcharts, state diagrams, sequence diagrams, and pie charts. Other types stay as code. Its renderer may produce a different layout than Mermaid in a browser.

Show a local image

Ask for a Markdown image on its own line:

Markdown image
![Test results](out/results.png)

Use an existing PNG, JPEG, GIF, or WebP file. Relative paths start where you launched Handwork. Animated images show their first frame.

Choose a terminal

How Handwork displays visual output
TerminalWhat to expect
Kitty, GhosttyInline graphics using the Kitty graphics protocol.
iTerm2, WezTermInline graphics using the iTerm2 image protocol.
VS CodeInline graphics using SIXEL when terminal images and GPU acceleration are enabled.
Windows Terminal and other SIXEL terminalsInline graphics when SIXEL support and cell pixel dimensions are detected.
Apple TerminalReadable text equivalents for supported Mermaid diagrams. SVG blocks keep their source. Raster images use coarse colored character previews.
tmux, screenText diagrams and character previews. Graphics passthrough is not supported.
Apple Terminal does not display full-resolution inline images.

SVG stays as source. Use a terminal with graphics support to see the drawing.

Enable images in VS Code

Add these settings, then open a new VS Code terminal and restart Handwork:

VS Code settings
{
  "terminal.integrated.enableImages": true,
  "terminal.integrated.gpuAcceleration": "auto"
}

See VS Code's terminal image documentation for host requirements.

Controls and limits

Press Control-O to open the conversation viewer. Use the trackpad or Page Up / Page Down to scroll. In Apple Terminal, enable View > Allow Mouse Reporting for trackpad scrolling.

To keep image labels and diagram source as text, start Handwork with:

Disable images
HANDWORK_IMAGES=off handwork

Remote image URLs are off by default. SVG supports common shapes, paths, gradients, and text, but not every browser feature: masks, filters, clipping paths, patterns, and embedded images are not drawn. SVG text uses Handwork's stroke font rather than the font named in the file.

Read the full image rendering reference

08Build from source

The repository uses Zig 0.16.0.

Build from source
git clone https://github.com/loveconnor/handwork.git
cd handwork
zig build
./zig-out/bin/handwork --help

For Codex or Copilot adapters, also run npm ci. They require Node.js 22.12 or newer, or 20.19 or newer.

Read the development reference