A local command center for a one-person, multi-project workspace: a GUI over every repo (project rail, embedded Claude terminal, boards, tasks) and the same workspace exposed as read-only MCP tools. One config file drives both.
Six read-only tools with clear, domain-specific purposes. Tool names follow verb_noun convention (list_projects, get_board, get_tasks, daily_standup, deploy_health, next_actions). Descriptions are substantive (100-200 chars) and explain what each tool returns and when to use it. However, input schemas are inferred from demo code rather than explicitly visible in tool registration. Parameter descriptions exist but lack type constraints (enums, ranges). Output schemas are documented in descriptions but not formally specified. Error handling is absent, no guidance on what happens if a project is not found or a URL is unreachable.
Today's standup: commits since midnight and open-task counts, per project. Each project carries `sources` (its repo, and TASKS.md when tasks are mapped).
Production health: HTTP ping (status + latency) to each configured production URL. Each entry carries `sources` (the repo that declares the URL).
A project's Kanban board, parsed from the Obsidian vault (columns such as Ideas / Next / In progress / Blocked / Done). Carries `sources` (the board file read, and the vault folder the config maps to this project).
Tasks for a project from TASKS.md. Open ones by default; flags which items are a manual action of the user (not delegable). Carries `sources`: the shared file read and the declared filters that assign those sections to this project.
State of every project in the workspace: branch, recent commits, uncommitted files, staleness in days, and commits ahead/behind upstream. Each project carries `sources` (the repo behind the answer).
Input schemas inferred from demo code, not explicitly registered in tool definitions. Cannot verify actual JSON Schema structure or type constraints.
Output schemas documented in descriptions but not formally specified. LLMs cannot reliably parse response structure without explicit schema documentation.
No error handling guidance. Descriptions do not explain what happens if a project is not found, a URL is unreachable, or a file is missing. No recovery hints for LLMs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
What to attack first, ranked. Crosses focus priority + open tasks + repo signals (unpushed commits, uncommitted changes, staleness) and returns a prioritized list with the reason and a suggested task per project. Each action carries `sources`: the repo state and the shared TASKS.md it was ranked from.
Parameter 'project' in get_board and get_tasks lacks enum constraint. Description says '(dynamic from config)' but LLMs cannot discover valid values without explicit enumeration.
Parameter 'limit' in next_actions has min/max constraints in description but no formal JSON Schema range validation visible.