Runner is now re-registered with `:docker://node:20-bookworm-slim` schema in its labels, so workflows targeting `pfi-fleet` get that image automatically. Saves a few lines per workflow and gives us one place (the runner config) to bump the default image when a new node/debian release lands.
task-board
MCP + web dashboard that shows what the assistant is working on. Green (active) / Red (waiting) / Grey (dormant) cards with comment streams.
Server: ana-docker
Port: 7878 (configurable via .env)
Upstream repo: vh/task-board
Image: task-board:local — built on the host from the git repo by
the deploy playbook. Not pulled from a registry.
Deploy
Two paths — automated (preferred) and manual (escape hatch / first-time).
Automated (Gitea Actions, push-to-main)
Once the central gitea-runner is up (see stacks/gitea-runner/README.md),
every push to main on vh/task-board triggers a deploy. The workflow
just calls the same elway playbook below; the playbook stays the
single source of truth for "how task-board is deployed."
Workflow template lives next to this README at
gitea-workflow-deploy.yaml.example;
copy it into the task-board repo at .gitea/workflows/deploy.yaml.
The example header lists the two repo secrets required
(DEPLOY_SSH_KEY, MGMT_REPO_TOKEN).
Manual (elway from a workstation)
The playbook owns the full flow: clone/update the source repo,
docker build, install compose + seed .env, bring up, verify health.
# First deploy (or update to latest main)
scripts/elway ana-docker --playbook playbooks/deploy-task-board.yaml
# Pin to a specific ref (tag, branch, or commit SHA)
scripts/elway ana-docker --playbook playbooks/deploy-task-board.yaml --var ref=v0.1.0
Wiring into Claude Code
After deploy, add to ~/.claude/settings.json (user-level) or .mcp.json
(project-level):
{
"mcpServers": {
"task-board": {
"type": "http",
"url": "http://10.250.50.70:7878/mcp"
}
}
}
Assistant gains four tools (task_start, task_update, task_wait,
task_complete). Web UI at http://10.250.50.70:7878/.
Path layout (on ana-docker)
| Host path | Container path | Purpose | Restic? |
|---|---|---|---|
/opt/docker/build/task-board/ |
— | git checkout used as docker build context | excluded |
/opt/docker/compose/task-board/ |
— | compose.yaml + .env | included (via /opt/docker) |
/opt/docker/conf/task-board/data/ |
/app/data |
SQLite (tasks.db) |
included |