Website: https://strike.jonathanung.ca/
An agentic coding TUI in Go/Bubble Tea. The engine emits protocol events; the TUI consumes them. Sessions are JSONL event logs.
Architecture is informed by deep-dives into opencode and codex. Full package map and dependency rules: docs/ARCHITECTURE.md.
Supported platforms: macOS, Linux, and Windows via WSL2. Native Windows is not supported in v1.
curl -fsSL https://strike.jonathanung.ca/install | bashThat URL redirects to the install script on GitHub; binaries come from GitHub Releases. Details, PATH, upgrade, and uninstall: docs/install.md.
strike version
strike --upgrade # or /upgrade in the TUIRequires Go 1.26+.
make setup # one-time: ~/.strike (config + example agent/skill)
make restore # repair missing/corrupt ~/.strike (or: strike restore)
make build # builds ./strike (stamps version via git describe)
make run-echo # offline dev loop — no API key
make run # real agent with your configured providerexport ANTHROPIC_API_KEY=sk-ant-… # or: ./strike auth login anthropic
./strike # or: --provider <p> --model <m> --effort <level>
./strike --continue # resume last root session
./strike exec "summarize this repo" # headless one-shot → stdoutRequires Nix with flakes enabled. Pins the exact Go 1.26, gopls, make, and git.
nix profile install github:jonathanung/strike
# or run without installing:
nix run github:jonathanung/strike
# development:
nix develop
make buildDetails: docs/nix.md.
In the TUI: /provider, /model, /auth, /theme, /session, /init,
/ftue, /help, /upgrade. /init bootstraps project AGENTS.md (confirms
before overwrite). /ftue opens the setup wizard (provider, model, optional
init, feature tour, scheduler presets, first prompt); clean installs auto-open
it once until finish or dismiss. Enter sends; Shift+Enter newline; esc interrupts;
ctrl+t jumps to latest output; ctrl+c quits. @path attaches project
files. See docs/keybinds.md and docs/usage.md.
Opt-in browser cockpit: live composer/ops over WebSocket, permissions and
questions, status chrome, plus read-only SSE attach to any session JSONL.
Defaults to the offline echo provider. The TUI remains primary.
make serve
# or: ./strike serve --addr 127.0.0.1:8787 --auth --token <secret> --provider echo
curl -s http://127.0.0.1:8787/health
# open http://127.0.0.1:8787/attach?token=<secret>
# remote access (encrypted tunnel — no cleartext LAN bind):
ssh -L 8787:127.0.0.1:8787 user@strike-hostGET /health— JSON{ok, version, commit}(no auth)GET /attach— cockpit page (composer, transcript, permission modal)GET /v1/ws— WebSocket ops in / events out (cookie or Bearer; no query token)POST /v1/ops— submit one op envelopeGET /v1/live/events,/v1/status,/v1/agents,/v1/sessionsGET /v1/sessions/{id}/events— SSE JSONL tail
Bind is loopback-only. Open /attach?token=… once for cookie handoff; /v1/*
rejects query tokens. Optional Vite dev proxy lives in web/. Details:
docs/web.md.
| Topic | |
|---|---|
| Changelog | release history and upgrade notes |
| Install & build | curl install, releases, upgrade, make targets |
| Usage | slash commands, @file, resume/fork, panes |
| Loop | /loop recurring session jobs (vs /goal) |
| Nix dev env | Nix philosophy, best practices, reference projects |
| Keybinds | keyboard reference (f1 / /keys in-app) |
| Auth & providers | credentials, OAuth, billing routing |
| Config | JSON, permissions, custom providers, vimMode/nanoMode |
| Agents & skills | personas, skills, workflows / autonomy |
| Plugins | Agent Plugins 1.0.0 contract (skills, MCP, com.strike.cli, trust) |
| Web cockpit | experimental strike serve (live + RO) |
| Web cockpit contract | progressive modes, parity matrix, attach-only (#1069) |
| Go SDK | pkg/sdk client over pkg/protocol |
| Architecture | packages, seams, recipes |
| Contributing | layout, verification, doc check |
Licensed under the Apache License, Version 2.0.
Free to use, modify, and distribute. You must retain the copyright notice and
attribution (see LICENSE and NOTICE). Copyright 2026 Jonathan Ung.