The board edits the agent task database through the Python MCP server, which now lives in this module (Taskboard/server). Code is versioned here; the data (tasks.db and per-task session workspaces) stays in AGENTS_DATA_DIR, by default ~/agents/manager, decided only in server/paths.py. UI: - Tasks are graph nodes; parent/child and dependency links map to set_parent and dependencies. Dropping a link on empty space creates a connected task. - Inspector edits title, description, status, priority, model, effort, permission mode and colour. - Edits stay local until Save (Ctrl+S, File > Save); the status bar shows the unsaved count. Unsaved work is the difference between the board and the last server board (BoardSnapshot), saved atomically with save_board. - Server changes merge in on a one-second poll without touching unsaved edits; the same field changed on both sides becomes a keep-mine/use-theirs conflict. - Sessions: start, stop, restart with new settings (keeping or dropping the conversation), open in a terminal, send messages; a node badge shows the live session state. Server: - Headless Claude Code sessions, one tmux session per task, with state from hooks and the exit reason recorded; manual or auto permission modes. - save_board, edit_task conflict checks, field history, get_board and revision polling, session tools, task workspaces with report conventions.
23 lines
1.1 KiB
Bash
Executable file
23 lines
1.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Start the whole system in tmux session "agents":
|
|
# window board : board TUI (top) + supervisor Claude session (bottom)
|
|
# window dispatcher : dispatcher loop
|
|
# Task sessions run headless in their own tmux sessions (task-<id>); data lives in $AGENTS_DATA_DIR
|
|
# (default ~/agents/manager), see paths.py.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
S="${AGENTS_TMUX:-agents}"
|
|
SUP_MODEL="${SUPERVISOR_MODEL:-opus}"
|
|
WORKERS="${WORKERS:-3}"
|
|
|
|
uv sync -q
|
|
if tmux has-session -t "$S" 2>/dev/null; then exec tmux attach -t "$S"; fi
|
|
|
|
tmux new-session -d -s "$S" -n board -c "$PWD" "uv run python board.py"
|
|
MCP_CONFIG="$(uv run python -c 'import json, sessions; print(json.dumps(sessions.mcp_config()))')"
|
|
tmux split-window -v -t "$S:board" -c "$PWD" \
|
|
"claude --model $SUP_MODEL --mcp-config $(printf %q "$MCP_CONFIG") --allowedTools mcp__task-manager \
|
|
-n supervisor --append-system-prompt \"\$(cat supervisor.md)\"; read"
|
|
tmux new-window -d -t "$S" -n dispatcher -c "$PWD" "uv run python dispatcher.py --workers $WORKERS; read"
|
|
tmux select-pane -t "$S:board.0"
|
|
exec tmux attach -t "$S"
|