ClawDone is a mobile-friendly control surface for coding agents running on remote Linux servers.
It connects a phone browser to remote tmux panes over SSH, so you can inspect sessions, send commands, interrupt running work, review recent output, and track lightweight task state without opening a full laptop environment.
ClawDone is built around this flow:
Mobile Browser
-> ClawDone Web UI
-> ClawDone service
-> SSH
-> remote tmux pane
-> coding agent
In practice, it is designed for developers who:
- run Codex or other coding agents on remote machines
- keep long-lived agents inside
tmux - want to trigger or monitor work from a phone
- need a clearer interface than raw SSH on mobile
- Save multiple SSH targets
- Organize targets with groups, tags, favorites, and notes
- Store per-target SSH options such as timeouts, retries, and host key policy
- View aggregated dashboard status across targets
- List remote
tmuxsessions, windows, and panes - Treat a pane as an agent endpoint
- Assign a local alias to a pane such as
backend-agent - Send commands to a pane
- Send
Ctrl+C - Capture recent pane output
- Built-in mobile web UI
- Command templates and command history
- Voice-to-text input in the browser
- Faster switching between targets and panes
- Create todos for a specific target and pane
- Track todo status such as
todo,in_progress,blocked,done, andverified - Attach evidence to a task, such as output snippets or summaries
- Clean older completed todos while keeping the latest completed items visible by default
- Record audit logs and task events
- Create workflow triplets for planner / executor / reviewer patterns
- Bearer-token protection for the web service
- Optional role mapping for
admin,operator, andviewer - Risk policy for dangerous commands:
allow,confirm, ordeny - SSH host key policies:
strict,accept-new, andinsecure - Read-only session sharing via scoped share tokens
ClawDone requires Python 3.11+.
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -e .This installs paramiko for outbound SSH connections.
Start the web service:
python -m clawdone serve \
--host 0.0.0.0 \
--port 8787 \
--token your-secretThen open the service from your phone browser:
http://<server-ip>:8787
If port 8787 is blocked or filtered in your LAN environment, switch to another port such as 8000:
python -m clawdone serve --host 0.0.0.0 --port 8000 --token your-secretA more explicit production-style example:
python -m clawdone serve \
--host 0.0.0.0 \
--port 8787 \
--token your-secret \
--store-path ~/.clawdone/profiles.json \
--host-key-policy strict \
--ssh-timeout 10 \
--ssh-command-timeout 15 \
--ssh-retries 1 \
--ssh-retry-backoff-ms 300 \
--dashboard-workers 8 \
--risk-policy confirmCreate a target in the web UI with fields such as:
- name
- host and port
- username
- password or SSH key path
tmuxbinary path- group, tags, description, favorite flag
- optional SSH overrides
After saving the target, ClawDone can load:
- sessions
- windows
- panes
Example pane identifiers:
codex:0.0codex:1.0research:2.1
Examples:
backend-agentfrontend-agentrelease-bot
ClawDone sends remote commands with tmux send-keys, for example:
tmux send-keys -t codex:0.0 -l 'run tests and summarize failures'
tmux send-keys -t codex:0.0 EnterIt can also send Ctrl+C and capture recent pane output.
You can create a todo for a specific target and pane, update its status, attach evidence, and review the result later from the mobile UI or API.
The TODO view also supports a safer completed-task cleanup flow: by default, Clear completed removes only older done / verified items and keeps the latest 5 completed tasks visible.
ClawDone keeps local tmux-oriented commands for debugging and scripting.
List local sessions:
python -m clawdone list-sessionsSend a command to a local tmux session:
python -m clawdone send --session codex --command "run tests"Interrupt a local tmux session:
python -m clawdone interrupt --session codexCapture recent output from a local tmux session:
python -m clawdone capture --session codex --lines 120- Prefer
--host-key-policy strictin real deployments. - Use
--tokenor--rbac-tokens-jsonwhen exposing the service beyond localhost. - Keep SSH credentials and the profile store in a protected location.
- Use
--risk-policy confirmordenyif agents may receive destructive commands.
clawdone/html.py— embedded mobile web UIclawdone/web.py— HTTP routes and request handlingclawdone/store.py— profiles, aliases, templates, todos, audit dataclawdone/remote.py— SSH execution and remote tmux inspectionclawdone/local_tmux.py— local tmux helper clientclawdone/cli.py— CLI entrypointstests/test_app.py— tests for storage, web API, and tmux behavior
Run tests:
python -m unittest tests.test_appTODO.mdtracks the current roadmap and unfinished work.DONE.mdtracks completed capabilities and recently shipped changes.
This repository now includes a static landing page under docs/ and an automated deployment workflow at .github/workflows/deploy-pages.yml.
Recommended setup for this repo:
- Commit and push the
docs/directory tomainormaster. - Open Settings → Pages in the GitHub repository.
- Set Source to Deploy from a branch.
- Select branch
mainand folder/docs. - Save and wait for GitHub Pages to publish.
Alternative setup:
- Set Source to GitHub Actions and use
.github/workflows/deploy-pages.yml. - Then push to
mainormaster, or manually run thedeploy-pagesworkflow.
For the current repository, the project page is expected at:
https://thuasta.github.io/ClawDone/
Note that this is a project site, not a user site. Opening https://thuasta.github.io/ may still show a 404 page, which is expected unless a separate user site exists there.
See TODO.md for the current roadmap and DONE.md for completed work.
