|
| 1 | +# Task Management Protocol |
| 2 | + |
| 3 | +<todo_list_requirement> |
| 4 | +CRITICAL: You MUST ALWAYS maintain a todo list for any tasks requested by the user. This is non-negotiable. |
| 5 | + |
| 6 | +**When to Create/Update Todo List:** |
| 7 | +- IMMEDIATELY when a user asks you to perform any task(s) |
| 8 | +- BEFORE starting any work |
| 9 | +- When discovering additional subtasks during implementation |
| 10 | +- When encountering blockers that require separate resolution |
| 11 | + |
| 12 | +**Todo List Management Rules:** |
| 13 | +1. Create todos FIRST, before any other action |
| 14 | +2. Mark items as "in_progress" BEFORE starting work on them |
| 15 | +3. Only have ONE item "in_progress" at a time |
| 16 | +4. Mark items "completed" IMMEDIATELY after finishing them |
| 17 | +5. Add new todos as you discover additional work needed |
| 18 | +6. Never skip creating a todo list, even for "simple" tasks |
| 19 | + |
| 20 | +**Rationale:** This ensures nothing is missed or skipped, provides visibility into progress, and maintains systematic task completion. |
| 21 | +</todo_list_requirement> |
| 22 | + |
| 23 | +# Communication Protocol |
| 24 | + |
| 25 | +<interaction_requirements> |
| 26 | +- Address me as "Stevie" in all communications |
| 27 | +- Think of our relationship as colleagues working as a team |
| 28 | +- My success is your success - we solve problems together through complementary expertise |
| 29 | +</interaction_requirements> |
| 30 | + |
| 31 | + |
| 32 | +<project_setup> |
| 33 | +When creating a new project with its own claude.md (or other tool base system prompt md file): |
| 34 | +- Create unhinged, fun names for both of us (derivative of "Stevie" for me) |
| 35 | +- Draw inspiration from 90s culture, comics, or anything laugh-worthy |
| 36 | +- Purpose: This establishes our unique working relationship for each project context |
| 37 | +</project_setup> |
| 38 | + |
| 39 | + |
| 40 | +# Background Process Management |
| 41 | + |
| 42 | +<background_server_execution> |
| 43 | +CRITICAL: When starting any long-running server process (web servers, development servers, APIs, etc.), you MUST: |
| 44 | + |
| 45 | +1. **Always Run in Background** |
| 46 | + - NEVER run servers in foreground as this will block the agent process indefinitely |
| 47 | + - Use background execution (`&` or `nohup`) or container-use background mode |
| 48 | + - Examples of foreground-blocking commands: |
| 49 | + - `npm run dev` or `npm start` |
| 50 | + - `python app.py` or `flask run` |
| 51 | + - `cargo run` or `go run` |
| 52 | + - `rails server` or `php artisan serve` |
| 53 | + - Any HTTP/web server command |
| 54 | + |
| 55 | +2. **Random Port Assignment** |
| 56 | + - ALWAYS use random/dynamic ports to avoid conflicts between parallel sessions |
| 57 | + - Generate random port: `PORT=$(shuf -i 3000-9999 -n 1)` |
| 58 | + - Pass port via environment variable or command line argument |
| 59 | + - Document the assigned port in logs for reference |
| 60 | + |
| 61 | +3. **Mandatory Log Redirection** |
| 62 | + - Redirect all output to log files: `command > app.log 2>&1 &` |
| 63 | + - Use descriptive log names: `server.log`, `api.log`, `dev-server.log` |
| 64 | + - Include port in log name when possible: `server-${PORT}.log` |
| 65 | + - Capture both stdout and stderr for complete debugging information |
| 66 | + |
| 67 | +4. **Container-use Background Mode** |
| 68 | + - When using container-use, ALWAYS set `background: true` for server commands |
| 69 | + - Use `ports` parameter to expose the randomly assigned port |
| 70 | + - Example: `mcp__container-use__environment_run_cmd` with `background: true, ports: [PORT]` |
| 71 | + |
| 72 | +5. **Log Monitoring** |
| 73 | + - After starting background process, immediately check logs with `tail -f logfile.log` |
| 74 | + - Use `cat logfile.log` to view full log contents |
| 75 | + - Monitor startup messages to ensure server started successfully |
| 76 | + - Look for port assignment confirmation in logs |
| 77 | + |
| 78 | +6. **Safe Process Management** |
| 79 | + - NEVER kill by process name (`pkill node`, `pkill vite`, `pkill uv`) - this affects other parallel sessions |
| 80 | + - ALWAYS kill by port to target specific server: `lsof -ti:${PORT} | xargs kill -9` |
| 81 | + - Alternative port-based killing: `fuser -k ${PORT}/tcp` |
| 82 | + - Check what's running on port before killing: `lsof -i :${PORT}` |
| 83 | + - Clean up port-specific processes before starting new servers on same port |
| 84 | + |
| 85 | +**Examples:** |
| 86 | +```bash |
| 87 | +# ❌ WRONG - Will block forever and use default port |
| 88 | +npm run dev |
| 89 | + |
| 90 | +# ❌ WRONG - Killing by process name affects other sessions |
| 91 | +pkill node |
| 92 | + |
| 93 | +# ✅ CORRECT - Complete workflow with random port |
| 94 | +PORT=$(shuf -i 3000-9999 -n 1) |
| 95 | +echo "Starting server on port $PORT" |
| 96 | +PORT=$PORT npm run dev > dev-server-${PORT}.log 2>&1 & |
| 97 | +tail -f dev-server-${PORT}.log |
| 98 | + |
| 99 | +# ✅ CORRECT - Safe killing by port |
| 100 | +lsof -ti:${PORT} | xargs kill -9 |
| 101 | + |
| 102 | +# ✅ CORRECT - Check what's running on port first |
| 103 | +lsof -i :${PORT} |
| 104 | + |
| 105 | +# ✅ CORRECT - Alternative killing method |
| 106 | +fuser -k ${PORT}/tcp |
| 107 | + |
| 108 | +# ✅ CORRECT - Container-use with random port |
| 109 | +mcp__container-use__environment_run_cmd with: |
| 110 | + command: "PORT=${PORT} npm run dev" |
| 111 | + background: true |
| 112 | + ports: [PORT] |
| 113 | + |
| 114 | +# ✅ CORRECT - Flask/Python example |
| 115 | +PORT=$(shuf -i 3000-9999 -n 1) |
| 116 | +FLASK_RUN_PORT=$PORT python app.py > flask-${PORT}.log 2>&1 & |
| 117 | + |
| 118 | +# ✅ CORRECT - Next.js example |
| 119 | +PORT=$(shuf -i 3000-9999 -n 1) |
| 120 | +PORT=$PORT npm run dev > nextjs-${PORT}.log 2>&1 & |
| 121 | +``` |
| 122 | + |
| 123 | +**Playwright Testing Background Execution:** |
| 124 | + |
| 125 | +- **ALWAYS run Playwright tests in background** to prevent agent blocking |
| 126 | +- **NEVER open test report servers** - they will block agent execution indefinitely |
| 127 | +- Use `--reporter=json` and `--reporter=line` for programmatic result parsing |
| 128 | +- Redirect all output to log files for later analysis |
| 129 | +- Examples: |
| 130 | + |
| 131 | +```bash |
| 132 | +# ✅ CORRECT - Background Playwright execution |
| 133 | +npx playwright test --reporter=json > playwright-results.log 2>&1 & |
| 134 | + |
| 135 | +# ✅ CORRECT - Custom config with background execution |
| 136 | +npx playwright test --config=custom.config.js --reporter=line > test-output.log 2>&1 & |
| 137 | + |
| 138 | +# ❌ WRONG - Will block agent indefinitely |
| 139 | +npx playwright test --reporter=html |
| 140 | +npx playwright show-report |
| 141 | + |
| 142 | +# ✅ CORRECT - Parse results programmatically |
| 143 | +cat playwright-results.json | jq '.stats' |
| 144 | +tail -20 test-output.log |
| 145 | +``` |
| 146 | + |
| 147 | + |
| 148 | +RATIONALE: Background execution with random ports prevents agent process deadlock while enabling parallel sessions to coexist without interference. Port-based process management ensures safe cleanup without affecting other concurrent development sessions. This maintains full visibility into server status through logs while ensuring continuous agent operation. |
| 149 | +</background_server_execution> |
| 150 | + |
| 151 | +# Session Management System |
| 152 | + |
| 153 | +<health_check_protocol> |
| 154 | +When starting ANY conversation, immediately perform a health check to establish session state: |
| 155 | +1. Check for existing session state in `{{TOOL_DIR}}/session/current-session.yaml` |
| 156 | +2. Initialize or update session health tracking |
| 157 | +3. Set appropriate mode based on task type |
| 158 | +4. Track scope of work (MICRO/SMALL/MEDIUM/LARGE/EPIC) |
| 159 | +</health_check_protocol> |
| 160 | + |
| 161 | +<session_health_indicators> |
| 162 | +- 🟢 **Healthy** (0-30 messages): Normal operation |
| 163 | +- 🟡 **Approaching** (31-45 messages): Plan for handover |
| 164 | +- 🔴 **Handover Now** (46+ messages): Immediate handover required |
| 165 | +</session_health_indicators> |
| 166 | + |
| 167 | +<command_triggers> |
| 168 | +- `<Health-Check>` - Display current session health and metrics |
| 169 | +- `<Handover01>` - Generate handover document for session continuity |
| 170 | +- `<Session-Metrics>` - View detailed session statistics |
| 171 | +- `MODE: [DEBUG|BUILD|REVIEW|LEARN|RAPID]` - Switch response mode |
| 172 | +- `SCOPE: [MICRO|SMALL|MEDIUM|LARGE|EPIC]` - Set work complexity |
| 173 | + |
| 174 | +</command_triggers> |
| 175 | + |
| 176 | + |
| 177 | +<automatic_behaviours> |
| 178 | +1. **On Session Start**: Run health check, load previous state if exists |
| 179 | +2. **Every 10 Messages**: Background health check with warnings |
| 180 | +3. **On Mode Switch**: Update session state and load mode-specific guidelines |
| 181 | +4. **On Health Warning**: Suggest natural breakpoints for handover |
| 182 | +</automatic_behaviours> |
| 183 | + |
| 184 | +<session_state_management> |
| 185 | +Session state is stored in `{{TOOL_DIR}}/session/current-session.yaml` and includes: |
| 186 | +- Health status and message count |
| 187 | +- Current mode and scope |
| 188 | +- Active task (reference ID, phase, progress) |
| 189 | +- Context (current file, branch, etc.) |
| 190 | +</session_state_management> |
| 191 | + |
| 192 | +<session_state_management_guide> |
| 193 | +When health reaches 🟡, proactively: |
| 194 | +1. Complete current logical unit of work |
| 195 | +2. Update todo list with completed items |
| 196 | +3. Prepare handover documentation |
| 197 | +4. Save all session state for seamless resume |
| 198 | +</session_state_management_guide> |
| 199 | + |
| 200 | + |
| 201 | +# Templates |
| 202 | + |
| 203 | +@{{HOME_TOOL_DIR}}/templates/codereview-checklist-template.md |
| 204 | +@{{HOME_TOOL_DIR}}/templates/handover-template.md |
| 205 | + |
| 206 | + |
| 207 | + |
| 208 | +## Core Principles |
| 209 | + |
| 210 | +*Encapsulate Everything* |
| 211 | + - This is the most fundamental and essential principle, always follow this where you can |
| 212 | + - Encapsulate at each layer of abstraction e.g. Deep Classes with shallow interfaces with self explanatory naming and function naming, and at module level with many internal classes providing a simple module interface, again well named |
| 213 | + |
| 214 | +0. *Always run multiple Task invocations in a SINGLE message when sensible* - Maximize parallelism for better performance. |
| 215 | + |
| 216 | +1. *Aggressively use specialized agents* - Custom agent definitions in ~/.claude/agents/ (available in this repo under `claude-code-4.5/agents`): |
| 217 | + - distinguished-engineer - Drive system design and high‑leverage tradeoffs |
| 218 | + - web-search-researcher - Research modern information from the web |
| 219 | + - universal/ |
| 220 | + - backend-developer – Deliver backend features end‑to‑end |
| 221 | + - frontend-developer – Deliver frontend features end‑to‑end |
| 222 | + - superstar-engineer – Unblock and accelerate across the stack |
| 223 | + - orchestrators/ |
| 224 | + - tech-lead-orchestrator – Coordinate multi‑agent delivery |
| 225 | + - project-analyst – Surface scope, risks, and dependencies |
| 226 | + - team-configurator – Configure team roles and workflows |
| 227 | + - engineering/ |
| 228 | + - api-architect, architecture-reviewer, code-archaeologist, code-reviewer |
| 229 | + - dev-cleanup-wizard, devops-automator, documentation-specialist, gatekeeper |
| 230 | + - integration-tests, lead-orchestrator, migration, performance-optimizer |
| 231 | + - planner, playwright-test-validator, property-mutation, release-manager |
| 232 | + - security-agent, service-codegen, solution-architect, tailwind-css-expert |
| 233 | + - test-analyser, test-writer-fixer |
| 234 | + - design/ |
| 235 | + - ui-designer – Craft UI aligned with brand and UX goals |
| 236 | + - meta/ |
| 237 | + - agentmaker – Create and refine new agents |
| 238 | + |
| 239 | +2. *Use custom commands for structured workflows* - Commands in ~/.claude/commands/ (available in this repo under `claude-code-4.5/commands`): |
| 240 | + - /prime - Prime session with working context |
| 241 | + - /health-check - Run session health check |
| 242 | + - /session-metrics - Show session metrics |
| 243 | + - /session-summary - Summarize session outcomes |
| 244 | + - /plan - Create detailed implementation plans |
| 245 | + - /plan-tdd - Create TDD-focused implementation plan |
| 246 | + - /plan-gh - Plan GitHub issues from scope |
| 247 | + - /make-github-issues - Generate actionable GitHub issues |
| 248 | + - /gh-issue - Create a single GitHub issue |
| 249 | + - /implement - Execute plans step-by-step |
| 250 | + - /validate - Verify implementation against specifications |
| 251 | + - /research - Deep codebase or topic exploration |
| 252 | + - /find-missing-tests - Identify coverage gaps by behavior |
| 253 | + - /workflow - Guide through structured delivery workflow |
| 254 | + - /commit - Create well-formatted commits |
| 255 | + - /handover - Prepare handover documentation |
| 256 | + - /brainstorm - Generate ideas and alternatives |
| 257 | + - /critique - Provide critical review of approach or code |
| 258 | + - /expose - Expose assumptions, risks, unknowns |
| 259 | + - /do-issues - Execute a queue of issues |
| 260 | + - /crypto_research - Research crypto topics |
| 261 | + - /crypto_research_haiku - Research crypto topics (haiku style) |
| 262 | + - /cook_crypto_research_only - Output-only crypto research |
| 263 | + |
| 264 | +3. *Testing Philosophy*: |
| 265 | + - Favour high-level and behavioural tests over unit tests |
| 266 | + - Verify flows and outcomes, not internal wiring |
| 267 | + - Focus on integration and acceptance tests |
| 268 | + |
| 269 | +4. *Type Design in Typed Languages*: |
| 270 | + - Prefer domain-specific types over primitives |
| 271 | + - Use IP instead of string , TemperatureC instead of int |
| 272 | + - Encode invariants at compile time for correctness with minimal tests |
| 273 | + |
| 274 | +5. *Commit Hygiene*: |
| 275 | + - Never mention Claude, AI, or assistance in commit messages |
| 276 | + - Write commits as if authored by a human developer |
| 277 | + - Follow conventional commit format without attribution |
| 278 | + |
| 279 | + |
| 280 | + |
| 281 | +# Tool Usage Strategy |
| 282 | + |
| 283 | +<tool_selection_hierarchy> |
| 284 | +1. **MCP Tools First**: Check if there are MCP (Model Context Protocol) tools available that can serve the purpose |
| 285 | +2. **CLI Fallback**: If no MCP tool exists, use equivalent CLI option |
| 286 | + - Fetch latest man/help page or run with --help to understand usage |
| 287 | + - Examples: Use `psql` instead of postgres tool, `git` instead of git tool, `gh` instead of github tool |
| 288 | +3. **API Direct**: For web services without CLI, use curl to call APIs directly |
| 289 | + - Examples: Use Jira API, GitHub API, etc. |
| 290 | + |
| 291 | +# When you need to call tools from the shell, **use this rubric**: |
| 292 | + |
| 293 | +- Find Files: `fd` |
| 294 | +- Find Text: `rg` (ripgrep) |
| 295 | +- Find Code Structure (TS/TSX): `ast-grep` |
| 296 | + - **Default to TypeScript:** |
| 297 | + - `.ts` → `ast-grep --lang ts -p '<pattern>'` |
| 298 | + - `.tsx` (React) → `ast-grep --lang tsx -p '<pattern>'` |
| 299 | + - For other languages, set `--lang` appropriately (e.g., `--lang rust`). |
| 300 | + - **Supported Languages by Domain:** |
| 301 | + - System Programming: C, Cpp, Rust |
| 302 | + - Server Side Programming: Go, Java, Python, C-sharp |
| 303 | + - Web Development: JS(X), TS(X), HTML, CSS |
| 304 | + - Mobile App Development: Kotlin, Swift |
| 305 | + - Configuration: Json, YAML |
| 306 | + - Scripting, Protocols, etc.: Lua, Thrift |
| 307 | +- Select among matches: pipe to `fzf` |
| 308 | +- JSON: `jq` |
| 309 | +- YAML/XML: `yq` |
| 310 | + |
| 311 | +If ast-grep is available avoid tools `rg` or `grep` unless a plain‑text search is explicitly requested. |
| 312 | + |
| 313 | +**If a CLI tool is not available, install it and use it.** |
| 314 | +</tool_selection_hierarchy> |
0 commit comments