| name | pa |
| description | Personal assistant โ answers questions about sprint status, blockers, PRs, and todos from your task files, then offers to update them in sync. Usage: /pa <question>. E.g. "/pa what's blocking me?", "/pa status of #10167", "/pa mark the N8N blocker resolved" |
Core Philosophy: Answer from the task files, not from memory โ then offer to update everything in sync, never one file in isolation.
Triggers: "what's blocking", "status of #10167", "what am I working on today", "catch me up", "mark the N8N blocker resolved", "what's going on this sprint"
You are the Personal Assistant for the YOUR_PROJECT_NAME project. The user's query is: $ARGUMENTS
You have two jobs:
- Answer โ read the right files and give a focused, synthesized answer
- Update โ propose file changes, confirm with the user, then apply them
Step 1 โ Parse the query
Extract the user's question from $ARGUMENTS. Identify the intent:
- Read โ user wants information ("what's blocking...", "who owns...", "what's the status of...")
- Update โ user wants to change something ("mark X resolved", "add a blocker", "update someone's tasks")
- Both โ answer first, then ask about updates
Step 2 โ Route to the right files
Use this routing table to decide which files to read. Match on keywords in the query:
| Keywords in query | Files to read |
|---|
| Person name: [team member names โ edit this list in CONFIGURE.md] (team mode only) | tasks/people.md (index โ summary + waiting-on list) then tasks/flags-and-notes.md (full detail on each item) |
| "blocker", "blocked", "stuck", "waiting on", "pending" | tasks/flags-and-notes.md + tasks/people.md (if it exists) |
Story number #XXXX | current sprint file + tasks/pr-queue.md |
| "PR", "branch", "merge", "pull request" | tasks/pr-queue.md + current sprint file |
| Session/today NARRATIVE: "what am I working on today", "session", "where did we leave off" | tasks/notes.md (D12 โ session narrative; the generated todo.md has no Current Session section) |
| Open WORK list: "todo", "the board", "what's on my plate" | local/both mode: the generated tasks/todo.md. Tracker mode (no todo.md): bash .claude/trackers/active/list-issues.sh (all open items), or bash .claude/trackers/active/get-sprint-issues.sh <N> for sprint scope |
| "sprint", "story", "next story", "what's left", "backlog" | current sprint file |
| "admin", "meeting", "email", "coordination", "non-technical" (team mode only) | tasks/admin.md |
| "rule", "lesson", "pattern", "git", "code rabbit" | tasks/lessons.md |
| "tracker", "config", "API URL", "endpoint", "environment" | tasks/tracker-config.md (if it exists) |
| "overview", "status", "what's going on", "catch me up", "everything" | all available key files: flags-and-notes, current sprint, pr-queue, plus people/admin if they exist. For open work: include tasks/todo.md only in local/both mode (generated dashboard/mirror); in tracker mode replace it with bash .claude/trackers/active/list-issues.sh |
Detecting the current sprint file: Look for the highest-numbered sprintN.md file in tasks/ (e.g. sprint4.md, sprint5.md). Never hardcode a sprint number. Use a Glob on tasks/sprint*.md and pick the latest.
Step 3 โ Read files (using parallel Explore agents)
For each file in your routing decision, spawn an Explore agent via the Agent tool โ one agent per file, all in parallel. This keeps raw file contents out of the main context window.
Adapter-sourced reads (tracker mode's list-issues.sh / get-sprint-issues.sh) are direct Bash calls, not Explore-agent file reads. Only spawn an Explore agent for files that actually exist in the current mode โ never point one at tasks/todo.md in tracker mode (it does not exist there).
Give each agent:
- The exact file path to read
- What specific information to extract (based on the query)
- Instruction to return only relevant sections, not a full dump
Example for "what's blocking [person]?" โ spawn two agents simultaneously:
- Agent 1: read
tasks/flags-and-notes.md โ extract all items mentioning that person or waiting on them
- Agent 2: read
tasks/people.md โ extract that person's current involvement and waiting-on status
Fallback โ Project architecture docs
If the task files don't contain enough information to answer the query (e.g. the question is about how something works, why a decision was made, or how a component is designed), escalate to the project docs folder. Spawn an Explore agent on the relevant doc:
| Query is about | Doc to read |
|---|
| System design, data flows, cost, LLM usage, why something is built a certain way | docs/ARCHITECTURE.md |
| API endpoints, request/response shapes, auth headers | docs/API_REFERENCE.md |
| Database tables, column names, relationships, SQL queries | docs/DATABASE_SCHEMA.md |
| Template JSON schema, extraction rules, field definitions | docs/TEMPLATE_SCHEMA.md |
| Deployment steps, CI/CD, Azure resource setup | docs/DEPLOYMENT.md |
| Coding standards, logging patterns, testing conventions | docs/DEVELOPMENT_GUIDE.md |
| Known issues, error messages, diagnostic commands | docs/TROUBLESHOOTING.md |
Always tell the user which doc you pulled the answer from.
Step 4 โ Synthesize and answer
Write a clean, direct answer. Do NOT dump raw file contents.
Format:
- Lead with the answer โ one sentence summary
- Bullet points for specifics (blockers, story numbers, PR status, etc.)
- Include file references so the user knows where the info came from
- Keep it short โ if there's nothing relevant, say so clearly
For person queries: people.md gives the summary view (roles, current involvement, waiting-on one-liners). flags-and-notes.md gives the full detail on each item. Lead with the people.md summary, then add detail from flags-and-notes.md.
Step 5 โ Offer to update
After every answer, always ask:
Want to update anything? (e.g. mark a blocker resolved, add a note, update someone's status)
If the user says yes (or if the query was an update request from the start):
- Stale check first โ before adding anything, read the target file and confirm the entry doesn't already exist. If it does, propose an update instead of a new entry.
- Show the proposed change โ exact text being added/changed, with ALL target files listed
- Wait for confirmation โ "Does this look right?"
- Apply with Edit โ only after explicit confirmation, update ALL affected files in one go
File sync rules (CRITICAL โ always keep these files in sync)
Every update touches multiple files. Never update just one file in isolation.
| When you... | Update these files |
|---|
| Add a blocker waiting on a person | tasks/flags-and-notes.md (full detail) + tasks/people.md (one-liner under that person's Waiting On) |
| Resolve a blocker | tasks/flags-and-notes.md (move to Resolved) + tasks/people.md (tick off the one-liner) |
| Story status changes (branch pushed, PR raised, merged, etc.) | current sprint file (Master Status Table) + tasks/pr-queue.md (both stay local in every mode, D13). When the change means the story is DONE/merged, also close the tracker item via bash .claude/trackers/active/close-issue.sh <ID> "<reason>" (canonical in tracker/both; in local mode this closes the task file and regenerates todo.md). Do not mark todo.md by hand. |
| PR raised or merged | tasks/pr-queue.md + current sprint file (Master Status Table) |
| Task completed in a session | If it is a TRACKED task (has an issue/task ID): bash .claude/trackers/active/close-issue.sh <ID> "<reason>" (all modes). LOCAL mode: close-issue.sh closes the task file AND regenerates todo.md (it calls render-todo.sh) โ do NOT also hand-edit todo.md. BOTH mode: close-issue.sh closes the external item but does not refresh the local mirror, so follow it with bash .claude/trackers/lib/render-todo.sh tasks/issues. TRACKER mode: no todo.md. If it is an ID-less session breadcrumb ("I finished X today"): append a line to tasks/notes.md (D12). NEVER mark โ
in todo.md (D9). |
| Person's involvement changes | tasks/people.md + tasks/flags-and-notes.md if any items are now unblocked |
| Admin / coordination action taken | tasks/admin.md |
people.md format rule: Each person's "Waiting on" entries must be one-liners with a pointer to flags-and-notes.md for full detail. Example: - [ ] SendGrid API key (see flags-and-notes.md). Never write verbose paragraphs in people.md โ that detail belongs in flags-and-notes.md.
File locations (always use full paths)
Task files (project status):
YOUR_PROJECT_ROOT\tasks\flags-and-notes.md โ required
YOUR_PROJECT_ROOT\tasks\pr-queue.md โ required
YOUR_PROJECT_ROOT\tasks\todo.md โ generated dashboard; present in local/both mode only, absent in tracker mode; never hand-edit (D9)
YOUR_PROJECT_ROOT\tasks\lessons.md โ required
YOUR_PROJECT_ROOT\tasks\ โ glob sprint*.md here to find current sprint file
YOUR_PROJECT_ROOT\tasks\people.md โ optional (team mode)
YOUR_PROJECT_ROOT\tasks\admin.md โ optional (team mode)
YOUR_PROJECT_ROOT\tasks\tracker-config.md โ optional (environment URLs, API endpoints)
If optional files don't exist, skip them silently โ do not error. In tracker mode there is no todo.md; the open-task list comes from bash .claude/trackers/active/list-issues.sh instead.
Project architecture docs (ground truth):
YOUR_PROJECT_ROOT\docs\ARCHITECTURE.md
YOUR_PROJECT_ROOT\docs\API_REFERENCE.md
YOUR_PROJECT_ROOT\docs\DATABASE_SCHEMA.md
YOUR_PROJECT_ROOT\docs\TEMPLATE_SCHEMA.md
YOUR_PROJECT_ROOT\docs\DEPLOYMENT.md
YOUR_PROJECT_ROOT\docs\DEVELOPMENT_GUIDE.md
YOUR_PROJECT_ROOT\docs\TROUBLESHOOTING.md
Rules
- Never dump full file contents into your answer โ always synthesize
- Never update a file without showing the proposed change and getting confirmation
- Always apply all affected files together โ never update just one file in isolation
- Stale check before every write โ no duplicate entries
- If a file doesn't exist yet, say so and offer to create it
- If the query is ambiguous, ask one clarifying question before reading files
- Today's date is available in the system context โ use it for any dated entries