Docs SSH Server
An SSH server that exposes Supabase docs as a sandboxed virtual filesystem, designed for LLM consumption. Connect and use standard Unix tools (grep, find, cat, tree) to navigate and search the docs.
Commands run inside just-bash - a sandboxed in-memory shell - so it's safe to expose publicly.
Setup
1. Build the markdown files (from apps/docs/):
pnpm run build:guides-markdown
This generates public/docs/guides/**/*.md which the server mounts as /docs.
2. Start the SSH server (from apps/docs/ssh-server/):
docker compose up
The server listens on port 22. A host key is generated on first run and saved to keys/host_key so the fingerprint stays stable across restarts.
Usage
# List top-level sections
ssh localhost ls /docs
# Get a full tree of available docs
ssh localhost tree /docs
# Search across all docs
ssh localhost "grep -r 'vector embeddings' /docs"
# Read a specific file
ssh localhost cat /docs/ai/vector-columns.md
# Pipe commands (always quote to prevent local shell expansion)
ssh localhost "grep -rl 'storage' /docs | head -10"
# Interactive shell (note: no PTY support yet - tab completion, arrow keys, etc. not available)
ssh localhost
Simulating a deployed environment
To use docs.supabase.com as the hostname (matching what a deployed version might look like), add this to /etc/hosts:
127.0.0.1 docs.supabase.com
Then connect normally:
ssh docs.supabase.com "grep -r 'auth' /docs/auth/"
Remove the entry from /etc/hosts when done.
Demo
The demo/ folder contains an AGENTS.md system prompt (CLAUDE.md symlinked) demonstrating how we might show an agent how to access the docs via this server.
# Example: ask Claude about a specific topic
# Claude will run something like:
ssh docs.supabase.com "grep -r 'row level security' /docs/database/ | head -40"
Aliases
The following aliases are available as a convenience:
| Alias | Expands to |
|---|---|
ll |
ls -alF |
la |
ls -a |
l |
ls -CF |