← bobbyjohnstx.github.io

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.

Install

Three ways to start

Single binary for local dev. Container for teams. Operator for platform engineering.

Homebrew
$ brew install bobbyjohnstx/tap/tinycode
macOS and Linux
From source
$ git clone && make build
$ ./dist/tinycode
Requires Go 1.27+
Container
$ podman run -it --network host quay.io/bjohns/tinycode-container:latest
podman or docker
What's New

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, and scout. Slash commands like /debug and /review now invoke the matching agent directly.
  • Auto-formatter (v2.3) — runs after write, edit, and apply_patch. Built-in gofmt for .go files.
  • Plan mode and /init (v2.2) — plan is a native mode with plan_enter/plan_exit tools. /init generates AGENTS.md from 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, /context usage breakdown, /btw side questions, /copy clipboard.
  • 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

First 5 Minutes

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.
Terminal UI

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 — /swarm runs parallel agents as goroutines; --plan shows decomposition before dispatch.
  • Workflow commands — /effort adjusts reasoning depth, /goal runs autonomous loops until a condition is met, /branch forks conversations.
  • Context awareness — /context visualizes usage with category breakdown, /btw for side questions, /changes for tinycode-modified files only.
  • Extended thinking — /thinking controls reasoning budget (off/low/medium/high/max).
  • Snapshot undo/redo — /undo, /redo, and /rewind to any earlier conversation turn.
  • Built-in tools — monitor watches background processes, notepad survives compaction, report_findings for 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; additionalContext injects 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)
Web UI & API

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-prompt and --append-system-prompt-file inject custom instructions.
  • External editor — /editor opens $EDITOR; /editor @file edits a file directly.
  • Interactive shell — /shell drops into a shell session.
IDE Integration

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).
Agents, Skills & Plugins

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

build
Default, delegates to specialists
general
Plain assistant
ops
Cluster & host administration
plan
Read-only research & planning
architect
Design and trade-offs
code-reviewer
Severity-rated review
debugger
Root-cause analysis
executor
Scoped code changes
analyst
Acceptance criteria
critic
Plan and gap review
designer
UI implementation
document-specialist
External docs & references
explore
Fast codebase search
git-master
Commits, rebase, history
scout
Upstream dependency source
security-reviewer
OWASP Top 10, CVEs
test-engineer
Tests and TDD
tracer
Competing explanations
verifier
Proof a change works
writer
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
Container

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_URL to auto-configure endpoint and model.
  • Cluster-admin mode — TINYCODE_CLUSTER_ADMIN=true downloads 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.
Operator

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.hostPath is 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 in spec.discovery.namespaces.
  • GitOps mode — spec.git.url clones a repo into /projects with optional credentials and auto-pull.
  • Cluster-admin mode — spec.clusterAdmin.enabled mounts 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.
Ecosystem

Four projects, one stack

Use whichever level fits your environment.

Single Go binary. TUI, embedded HTTP server + web UI, 20 agents, 7 skills, 36 built-in plugins, Go plugin SDK.
OCI container image. UBI9, multi-arch, OpenShift arbitrary-UID compatible. GitOps, vLLM auto-config, cluster-admin mode.
Kubernetes Operator for OpenShift. TinycodeInstance CRs, Helm reconciliation, SCCs, Routes, vLLM auto-probing, self-service multi-user.
Homebrew formula for brew install bobbyjohnstx/tap/tinycode on macOS and Linux.