global-project-manager
Task and project management in .claude/global-project/. Use when user ask for a new task.
Global Task Manager
Manages tasks in .claude/global-project/ with lightweight files + separate history. Auto-commits with jj on completion.
Handles task lifecycle, status tracking, and optional S3 sync.
Quick Reference
| User Says | Action |
|---|---|
| "new task", "start work on..." | Create task-XXX.md, ask title/priority |
| "mark done", "finished", "complete" | status→done, jj commit, update history |
| "list tasks", "what's pending?" | Show in_progress, then todo |
| "this week", "recent" | Filter completed_at last 7 days |
| "cancel task X" | status→cancelled, update history |
| "current task" | Show in_progress tasks |
| "status report", "project status", "what's the state?" | Generate status report (see Status Reporting) |
| "list projects", "show all projects" | List all projects from S3 via s4ync list (requires S3 env vars) |
| Any work request (implement, fix, add, refactor...) | Auto-create task silently before starting (see Auto Task Creation) |
File Structure
.claude/global-project/
├── project.md # Metadata (read references/schema.md for format)
├── project_history.md # Append-only log
├── task-001.md # Current state only
├── task-001-history.md # All changes (saves tokens)
└── ...
Statuses: backlog | todo | in_progress | done | cancelled
Priorities: low | medium | high | critical
Auto Task Creation
When the user makes a work request involving implementation, fixing, refactoring, or any significant change — automatically create a task before starting work, without asking for confirmation.
Trigger patterns
Any request containing verbs like: implement, fix, add, refactor, update, create, remove, migrate, optimize, write, build, integrate, change...
What to do
- Infer title from the user's request (concise, action-based: "Fix login bug", "Add CSV export", "Refactor auth module")
- Infer priority:
criticalif "urgent"/"blocker",highif "fix"/"bug",mediumotherwise - Create
task-XXX.mdwithstatus: in_progressandstarted_at= now - Create
task-XXX-history.mdwithcreated+status_change → in_progressentries - Add
task_added | task-XXXtoproject_history.md - Do not announce the task creation — proceed silently with the work
- When work is done, complete the task (see Completing Tasks)
Exceptions — do NOT auto-create a task when
- The request is a question, explanation, or analysis (no code change expected)
- A task for the same work already exists as
in_progress - The user explicitly says "no task", "skip tracking", or similar
Workflow
First Use in Project
If .claude/global-project/ missing:
- Create
.claude/global-project/ - Create
project.md(readreferences/schema.mdfor full format):shortname: kebab-case from directory namegit_repo: from.git/configif existsjj_repo: trueif.jj/directory exists
- Create
project_history.mdwithcreatedentry
Creating Tasks
- Read existing
task-*.mdto get next sequential ID (task-001, task-002...) - Create
task-XXX.mdwith frontmatter (see references/schema.md when creating files) - Create
task-XXX-history.mdwithcreatedentry - Add
task_added | task-XXXtoproject_history.md - If jj repo: run
jj new -m "task-XXX: {title}"when the task is completed (which is already there), not on creation
Optional: Create detailed files in .claude/global-project/task-XXX/:
overview.md: objectives, success criteriaapproach.md: methodologychecklist.md: actionable stepsnotes.md: insights during execution
Updating Tasks
- Edit
task-XXX.mdfrontmatter - Append to
task-XXX-history.md:{timestamp} | {event} | {details}- Events:
status_change,priority_change,note,title_change
- Events:
- Update timestamps:
started_at: when →in_progresscompleted_at: when →doneorcancelled
Completing Tasks
When status → done or cancelled:
- Set
completed_attimestamp - Update histories
- If
jj_repo: true:jj new -m "{task_title}" - Add entry to
project_history.md
Listing Tasks
Read task-*.md files (ignore -history.md), filter by status/date.
Status Reporting
When asked for a project status or report:
- Read all
task-*.mdfrontmatter (skip-history.mdfiles) - Group by status:
in_progress,todo/backlog,done,cancelled - For done tasks, check
completed_at— flag those within the last 7 days as "completed this week" - Get versioning info using the Version Control procedure below
- Output a concise markdown report:
## Project Status — {project shortname} **Branch**: {current branch/bookmark} | **Recent**: {latest commit summary} **In progress** (N) - task-XXX: title [priority] **Completed this week** (N) - task-XXX: title **Backlog** (N tasks) - If S3 env vars are present, sync the report alongside task files
Version Control
Use this procedure whenever version/commit information is needed (status reports, project init, etc.):
- Check for jj first: if
jj_repo: trueinproject.mdor.jj/directory exists:- Current bookmark/branch:
jj log -r @ --no-pager -T 'if(bookmarks, bookmarks, "detached")' - Recent changes:
jj log --no-pager -l 5 -T 'change_id.short() ++ " " ++ description.first_line() ++ "\n"'
- Current bookmark/branch:
- Fallback to git: if no jj, check for
.git/directory:- Current branch:
git branch --show-current - Recent commits:
git log --oneline -5
- Current branch:
- Neither: skip versioning info in output
Resolving s4ync Binary
Use this procedure whenever s4ync is needed:
- Check PATH:
which s4ync→ use it if found - Look for pre-built binary in plugin cache:
Use~/.claude/plugins/cache/arhuman-marketplace/global-project-manager/*/tools/s4ync/s4yncGlobto find it; if found, use that path asS4YNC_BIN - If binary not found, build from source:
- Find source dir via Glob:
~/.claude/plugins/cache/arhuman-marketplace/global-project-manager/*/tools/s4ync/ - Run
make buildin that directory - Use the resulting binary as
S4YNC_BIN
- Find source dir via Glob:
- If source not found either, inform the user that s4ync could not be found and suggest
make installin the plugin'stools/s4ync/directory
Listing All Projects
When asked to list all projects (not just the current one):
If S3 env vars exist (MINIO_ENDPOINT, MINIO_ACCESS_KEY, MINIO_SECRET_KEY):
- Resolve
S4YNC_BINusing the procedure above - Run
$S4YNC_BIN list
If no S3:
- S3 is the only cross-project registry; explain that
list projectsrequires S3 to be configured
S3 Sync (Optional)
If env vars exist (MINIO_ENDPOINT, MINIO_ACCESS_KEY, MINIO_SECRET_KEY):
- Resolve
S4YNC_BINusing the procedure above - Sync to
s3://global_projects/{shortname}/ - Update
last_syncinproject.md
Schema Details
Only read references/schema.md when creating new files. Contains field definitions, format examples, ID generation rules.