A local-first, provider-agnostic terminal coding agent for your own LLM.
No accounts, no telemetry, no cloud — your code and credentials never leave your machine.
$ pip install drydock-cli $ drydock # autodetects your local model server
A full agentic CLI harness in a Textual TUI: scrolling transcript, collapsible tool &
reasoning cards, a live activity line. The model drives every tool below autonomously — all clean-room,
dependency-free (nothing beyond openai + textual).
Read (with a structure index for huge files), Write, Edit, Bash, Glob, Grep — with advisory write guards.
Point at an image — a screenshot, mockup, or diagram — and a vision model sees it. The agent can also Screenshot your screen and read it back.
First-class GitStatus / GitDiff / GitLog / GitCommit — structured and truncated; commits are local and reversible.
WebSearch + WebFetch bring live results and pages into context — and degrade cleanly offline.
Ingest your docs — text, PDF, Word, STIG checklists — with /graphrag build; the agent retrieves facts via the Knowledge tool.
Dispatch runs read-only sub-agents in parallel, each in a fresh context, for focused investigation.
Wire in a stronger model (e.g. Gemini, any OpenAI-compatible endpoint) with /advisor; the agent consults it when stuck.
Connect Model Context Protocol servers; their tools appear as mcp__server__tool — works with third-party servers like Graphify.
The model proposes; the harness governs. Explicit task phases, a verification gate on "done", per-action progress scoring, and graduated recovery when a run stalls — advisory → reflection → suppressing the looping call → an honest stop. Watch it work: /events · /trace.
Every turn checkpoints the session. Killed mid-task? The next launch offers /resume — the transcript and objective come back, and anything left in-flight is flagged before it's retried.
Keep several model servers configured and switch live: /model add qwen http://box2:8001/v1, then /model qwen — each model routes to its own endpoint, with a configurable default.
Drydock is an original, Apache-2.0, clean-room codebase owned end to end.
Reusable /<name> commands — author your own as markdown, or use the built-in families for compliance and ML engineering.
Defensive, clean-room skills for AI & cyber risk management.
Ingest the NIST 800-53 catalog and DISA STIG benchmarks; assess, remediate, and export POA&Ms — 100% local for CUI.
PyTorch workflows: training, full & LoRA fine-tuning, metrics (F1 · MCC · ROC-AUC), RL, and data prep.
Provider-agnostic — any OpenAI-compatible endpoint (llama.cpp, vLLM, Ollama, LM Studio). Tuned against dense Gemma-4-31B (QAT, 64K) on a single workstation; first launch autodetects a local model server with no account or API-key prompt.
Serve Gemma-4-31B on a 2×GPU box — either runtime exposes an OpenAI API on :8000 as gemma4:
# llama.cpp — flexible concurrency llama-server -m gemma-4-31B-it-qat-UD-Q4_K_XL.gguf -c 65536 -np 2 --port 8000 --alias gemma4 # vLLM — ~2× faster/request, 128K context (max-num-seqs 2) docker run -d --gpus all --ipc=host -v /data3/Models:/models -p 8000:8000 -e NCCL_P2P_DISABLE=1 \ vllm/vllm-openai:v0.26.0 --model /models/gemma-4-31B-it-qat-w4a16-ct --served-model-name gemma4 \ --tensor-parallel-size 2 --max-model-len 131072 --max-num-seqs 2 --gpu-memory-utilization 0.97 \ --kv-cache-dtype fp8 --tool-call-parser gemma4 --enable-auto-tool-choice
Then point drydock at it: drydock --provider vllm --base-url http://<host>:8000/v1 --model gemma4. Drydock handles the vLLM-Gemma quirks (empty-content-on-truncation, /props fallback) as of 3.1.7.
Tools Read · Write · Edit · Bash · Glob · Grep · ViewImage · Screenshot · todo · task · Dispatch · Worker · GitStatus · GitDiff · GitLog · GitCommit · WebSearch · WebFetch · Knowledge · BuildKnowledge · mcp__<server>__<tool>
Commands /help · /model · /cwd · /undo · /back · /resume · /compact · /context · /graphrag · /events · /trace · /shell · /skills · /loop · /mcp · /advisor · /ask · /status · /clear · /quit
Or just ask the agent — "how do I add my own docs?" — it knows its own commands.