tinycode
Local-first AI coding assistant. A single Go binary embeds everything — TUI, HTTP server, session management, LLM client, and 36 plugins. No runtime dependencies. Works with any OpenAI-compatible endpoint: Ollama, vLLM, LM Studio, OpenRouter, or your own infrastructure.
Three ways to start
Single binary for local dev. Container for teams. Operator for platform engineering.
v2.3 highlights
- ops agent (v2.3) — cluster and host administration agent. New skills
/incident,/change, and/host. Cluster and host mutations (oc/kubectl apply, systemctl, firewall) require confirmation. - 20 agents (v2.3) — added
build,general,ops,analyst,designer,document-specialist,tracer, andscout. Slash commands like/debugand/reviewnow invoke the matching agent directly. - Auto-formatter (v2.3) — runs after
write,edit, andapply_patch. Built-ingofmtfor.gofiles. - Plan mode and /init (v2.2) —
planis a native mode withplan_enter/plan_exittools./initgeneratesAGENTS.mdfrom repo ecosystem detection. MCP CLI subcommands. - Workflow —
/effort,/goal,/branch, prompt stash (Ctrl+S), history browser (Ctrl+R). Doom loop detection stops after repeated identical tool calls. - TUI — LSP diagnostics in sidebar, fork from rewind, frecency command palette,
/contextusage breakdown,/btwside questions,/copyclipboard. - Agent efficiency (v2.3.3) — compact prompt threshold raised to 14B (9B models get simpler prompts). Verification loops removed from reviewers. Code-reviewer reduced from 100–649K to 23K tokens on a real codebase. Files-already-read hint prevents re-read spirals after compaction.
- Security — child processes drop credentials, secret-file access requires permission, CORS locked to own origin, cluster/host mutation confirmation gates.
Full release notes: CHANGELOG.md
Install, run, build something
Four workflows that show what tinycode does in practice. Copy-paste these into your terminal after installing.
Debug a failing test
$ tinycode /path/to/project # In the TUI, type: The test in auth_test.go is failing with "token expired." Find the root cause and fix it. # Or use the debug skill directly: /debug auth_test.go is failing with "token expired"
Plan a feature before writing code
# Switch to plan mode — read-only, safe to explore $ tinycode /path/to/project # Press Tab to switch to the plan agent, then: Add a /health endpoint that returns pod name, uptime, and connected LLM providers. # tinycode writes a plan to .tinycode/plans/ # Review it, approve, switch to build mode to execute
Review a pull request
$ tinycode /path/to/project # Ask the code-reviewer agent: /ask code-reviewer Review the diff on the current branch against main. Focus on correctness and security.
Explore an unfamiliar codebase
$ tinycode /path/to/new-project # Ask the architect agent: /ask architect How is authentication handled in this project? Trace from the HTTP handler to the token validation.
The primary interface
Built with bubbletea (Elm architecture). Starts instantly, runs anywhere a terminal does, keeps you in the same environment as your code.
# Start in the current directory $ tinycode # Or point at a specific project $ tinycode /path/to/project # Resume last session $ tinycode -c # Headless API server $ tinycode serve
Key features
- Multi-agent orchestration —
/swarmruns parallel agents as goroutines;--planshows decomposition before dispatch. - Workflow commands —
/effortadjusts reasoning depth,/goalruns autonomous loops until a condition is met,/branchforks conversations. - Context awareness —
/contextvisualizes usage with category breakdown,/btwfor side questions,/changesfor tinycode-modified files only. - Extended thinking —
/thinkingcontrols reasoning budget (off/low/medium/high/max). - Snapshot undo/redo —
/undo,/redo, and/rewindto any earlier conversation turn. - Built-in tools —
monitorwatches background processes,notepadsurvives compaction,report_findingsfor structured review output. - Which-key panel (
Ctrl+X) — floating overlay showing all leader key follow-ups. - Frecency command palette — ranked by usage frequency + recency.
- Session management — left sidebar, resume from CLI (
-c/-r), archive, HTML export, clipboard copy (/copy). - Hooks — shell hooks in
settings.json;additionalContextinjects text into model context.
Configuration
# ~/.config/tinycode/config.json (JSONC supported) { "model": "ollama/qwen3.5:9b", "small_model": "ollama/qwen3.5:1.7b" } # Provider auto-discovery at startup: # Ollama → 127.0.0.1:11434 (override: OLLAMA_HOST) # LM Studio → 127.0.0.1:1234 (override: TINYCODE_LMSTUDIO_HOST) # vLLM → requires env var (TINYCODE_VLLM_HOST) # OpenRouter → requires key (OPENROUTER_API_KEY)
Embedded web interface
SolidJS web UI embedded in the binary via go:embed. Same conversation, agent, and tool capabilities as the TUI, served from the built-in HTTP server.
$ tinycode serve # headless REST + SSE API server $ tinycode web # server + web UI
- Non-interactive mode —
tinycode run <prompt>runs a prompt and exits, for scripts and CI. - System prompt override —
--append-system-promptand--append-system-prompt-fileinject custom instructions. - External editor —
/editoropens$EDITOR;/editor @fileedits a file directly. - Interactive shell —
/shelldrops into a shell session.
Agent Client Protocol
tinycode supports the Agent Client Protocol (ACP) for IDE integration. Editors connect to tinycode via stdio.
# Start an ACP server for your editor $ tinycode acp --cwd /path/to/project
- VS Code extension — reference extension included at
packages/vscode-extension/. See docs/acp-integration.md for building custom integrations. - Supported editors — VS Code, Zed, JetBrains (any editor implementing ACP).
20 agents, 7 skills, 36 plugins
Tab cycles build, general, ops, plan, architect, code-reviewer. Models at 14B and under receive compact prompts. Plugins are standalone Go binaries over JSON-RPC.
Built-in agents
Default, delegates to specialists
Plain assistant
Cluster & host administration
Read-only research & planning
Design and trade-offs
Severity-rated review
Root-cause analysis
Scoped code changes
Acceptance criteria
Plan and gap review
UI implementation
External docs & references
Fast codebase search
Commits, rebase, history
Upstream dependency source
OWASP Top 10, CVEs
Tests and TDD
Competing explanations
Proof a change works
Technical documentation
Skills & slash commands
Slash commands like /debug, /review, /trace, /plan, /verify, and /test invoke the matching agent. Bundled skills provide checklists and workflows.
- /incident — incident response checklist for the ops agent
- /change — change management workflow for the ops agent
- /host — host administration checklist for the ops agent
- /doctor — diagnose tinycode configuration and environment issues
- /mcp-setup — configure MCP servers via guided menu
- /remember — triage session findings across memory surfaces
- /deepinit — generate per-directory AGENTS.md files across a codebase
Plugins
36 built-in plugins ship as standalone Go binaries. Build custom plugins with the Go SDK in pkg/plugin/. See docs/plugin-development.md.
- General — log-sanitizer, safety-net, code-review, command-inject, context-pruning, handoff, notify, pilot, snippets, telemetry, web-search, cluster-ops
- OpenShift — ocp-oauth, ocp-context-injection, ocp-obs-metrics, ocp-obs-logging
- Ansible — aap-bridge, eda-events
- RHOAI — rhoai-serving, rhoai-pipelines, rhoai-mlflow, rhoai-experiment-tracker, rhoai-eval-trustyai, rhoai-mcp-bridge
- Platform — satellite, quay, rhdh, tekton, rhacm, rhacs, rh-api-catalog, rh-dev-content, rh-ecosystem-catalog, rhdp-provisioner, container-linter, lightwell
tinycode-container
github.com/bobbyjohnstx/tinycode-container
OCI container image packaging tinycode with tmux and git. Built on UBI9, multi-arch (amd64 + arm64), OpenShift arbitrary-UID compatible.
# Run with Ollama on the host network $ podman run -it --network host \ -e TINYCODE_SERVER_PASSWORD=changeme \ quay.io/bjohns/tinycode-container:latest # With a remote vLLM endpoint $ podman run -it -p 4096:4096 \ -e TINYCODE_VLLM_URL=http://your-vllm-server:8000 \ -e TINYCODE_SERVER_PASSWORD=changeme \ quay.io/bjohns/tinycode-container:latest
Deploy to OpenShift / Kubernetes
$ kubectl apply -k k8s/base # Deployment + Service + Route $ kubectl apply -k k8s/overlays/ephemeral # no PVC, testing only $ kubectl apply -k k8s/overlays/ingress # vanilla K8s with Ingress
Features
- GitOps mode — clone a repo on startup via
TINYCODE_GIT_REPO, optional auto-pull on restart. - vLLM auto-config — set
TINYCODE_VLLM_URLto auto-configure endpoint and model. - Cluster-admin mode —
TINYCODE_CLUSTER_ADMIN=truedownloads oc CLI for cluster management. - Swarm tool — includes tmux for supervised multi-worker sessions with shared persistence.
- RHOAI auto-detection — detects Kubernetes environment and disables LSP downloads in air-gapped clusters.
tinycode-operator
github.com/bobbyjohnstx/tinycode-operator
Kubernetes Operator for OpenShift. Manages TinycodeInstance custom resources with Helm-based reconciliation. Handles Routes, PVCs, SCCs, vLLM auto-probing, and pod lifecycle.
Install the operator
$ git clone https://github.com/bobbyjohnstx/tinycode-operator $ cd tinycode-operator $ make push IMAGE_ORG=yourorg IMAGE_TAG=v0.1.0 $ make install OPERATOR_IMAGE=quay.io/yourorg/operator:v0.1.0
Prepare a namespace
$ oc new-project tinycode-dev $ oc create rolebinding tinycode-operator-admin \ --clusterrole=admin \ --serviceaccount=tinycode-operator-system:tinycode-operator-manager \ -n tinycode-dev $ oc create secret generic tinycode-password \ --from-literal=TINYCODE_SERVER_PASSWORD=mysecretpass \ -n tinycode-dev
Create a TinycodeInstance
apiVersion: tinycode.dev/v1alpha1 kind: TinycodeInstance metadata: name: my-tinycode spec: vllm: - name: vllm-qwen3 url: http://qwen3-30b.qwen3.svc.cluster.local:8080 model: "vllm-qwen3/qwen3-30b" auth: passwordSecret: tinycode-password storage: projectsSize: "20Gi"
Security contexts
- tinycode-restricted — default. Non-root (UID 1001), all capabilities dropped.
- tinycode-hostpath — when
spec.storage.hostPathis set. Requires cluster-admin approval. - tinycode-shell — when
spec.shell.enabled: true. Adds hostPID + SYS_PTRACE. Requires review.
Additional capabilities
- Cross-namespace vLLM discovery — annotate model services with
tinycode.dev/discover=vllm, list namespaces inspec.discovery.namespaces. - GitOps mode —
spec.git.urlclones a repo into/projectswith optional credentials and auto-pull. - Cluster-admin mode —
spec.clusterAdmin.enabledmounts kubeconfig and downloads oc CLI. - Self-service provisioning — users create their own TinycodeInstance CRs in prepared namespaces. Instance-per-user isolation with no collisions.
- Vanilla Kubernetes — deploy without the operator using Kustomize manifests from tinycode-container, or Tekton + Argo CD for CI/CD.
Four projects, one stack
Use whichever level fits your environment.
brew install bobbyjohnstx/tap/tinycode on macOS and Linux.