backlog
backlog
Claude Code를 위한 세션 간 지속적 작업 관리 도구입니다. 작업이 세션 간에 유지되므로 한 에이전트가 시작한 작업을 다른 에이전트가 이어받을 수 있습니다.
@backloghq/agentdb를 기반으로 구축되었으며, 타입이 지정된 스키마, 자동 증가 ID, 가상 필터, 블롭 저장소를 지원합니다. 순수 TypeScript로 작성되었으며 네이티브 종속성이 없습니다.
설치
/plugin marketplace add backloghq/backlog
/plugin install backlog@backloghq-backlog소스에서 설치
git clone https://github.com/backloghq/backlog.git
cd backlog && npm install && npm run build
claude --plugin-dir /path/to/backlog독립형 MCP 서버
프로젝트의 .claude/settings.json에 추가하세요:
{
"mcpServers": {
"backlog": {
"command": "node",
"args": ["/path/to/agent-teams-task-mcp/dist/index.js"],
"env": {
"TASKDATA": "/path/to/task-data"
}
}
}
}Related MCP server: Vibe Board VE
스킬
스킬 | 설명 |
| 현재 백로그 표시 — 대기 중, 활성, 차단됨, 기한 초과 작업 |
| 목표를 종속성, 우선순위, 사양을 포함한 작업으로 세분화 |
| 일일 스탠드업 — 완료됨, 진행 중, 차단됨, 다음 작업 |
| 백로그 정리 — 모호한 작업 수정, 누락된 우선순위, 깨진 종속성, 오래된 항목 수정 |
| 구현 전 작업에 대한 사양 문서 작성 |
| 작업을 선택하고 사양을 읽은 후 구현하고 완료 표시 |
| 다음 세션 준비 — 진행 상황 주석 달기, 활성 작업 중지, 상태 요약 |
에이전트
task-planner 에이전트는 누군가 작업 계획이 필요할 때 Claude에 의해 자동으로 호출될 수 있습니다. 코드베이스를 읽고, 목표를 종속성이 있는 작업으로 분해하며, 복잡한 항목에 대한 사양을 작성합니다.
후크
이벤트 | 기능 |
| 세션 시작 시 대기 중인 작업 수 표시 |
| Claude의 내장 작업을 지속적 백로그와 동기화 |
| Claude가 내장 작업을 완료하면 일치하는 백로그 작업을 완료로 표시 |
| 생성된 에이전트에 할당되지 않은 대기 중인 작업을 자동 할당 |
도구 (MCP)
전체 작업 수명 주기 관리를 위한 도구:
도구 | 설명 |
| 필터 구문을 사용하여 작업 쿼리. 모든 필드가 포함된 JSON 배열 반환. |
| 필터와 일치하는 작업 수 계산. task_list와 동일한 구문. |
| 새로운 대기 중인 작업 생성. 설명만 필수이며, 다른 모든 필드는 선택 사항. |
| 이미 완료된 작업을 완료 상태로 직접 기록. |
| 필터와 일치하는 하나 이상의 작업을 부분 업데이트. 제공된 필드만 변경됨. |
| 선택적 필드 재정의를 사용하여 기존 작업 복사. |
| 종료 타임스탬프와 함께 작업을 완료로 표시. |
| 작업을 소프트 삭제. task_undo로 복원 가능. 영구 삭제는 task_purge 사용. |
| 타임스탬프가 찍힌 메모 추가. 더 긴 내용은 task_doc_write 사용. |
| 정확한 텍스트 일치를 통해 주석 제거. |
| 작업을 활성 작업 중으로 표시. +ACTIVE 쿼리에서 확인 가능. |
| 작업 중지. 대기 상태로 되돌림. |
| 가장 최근 작업 취소. 반복 호출 가능. |
| ID 또는 UUID로 단일 작업의 전체 JSON 세부 정보 가져오기. |
| JSON 배열에서 작업을 대량 생성. 원자적 배치 작업. |
| 삭제된 작업을 영구적으로 제거. 되돌릴 수 없음. |
| 작업에 마크다운 문서(사양, 메모, 컨텍스트) 첨부/교체. |
| 작업에 첨부된 마크다운 문서 읽기. |
| 작업의 문서 제거. 영구적. |
| 오래된 완료/삭제된 작업을 분기별 아카이브 세그먼트로 이동. |
| 사용 가능한 아카이브 세그먼트 나열. |
| 읽기 전용 검사를 위해 아카이브된 작업 로드. |
| 대기 중/반복 작업이 있는 프로젝트 이름 나열. |
| 대기 중/반복 작업이 있는 태그 나열. |
필터 구문
status:pending # all pending tasks
project:backend +bug # bugs in backend project
priority:H due.before:friday # high priority due before friday
+OVERDUE # overdue tasks
+ACTIVE # tasks currently being worked on
+BLOCKED # tasks blocked by dependencies
+READY # actionable tasks (past scheduled date)
agent:explorer # tasks assigned to the explorer agent
( project:web or project:api ) # boolean with parentheses
description.contains:auth # substring match속성 수정자(.before, .after, .by, .has, .not, .none, .any, .startswith, .endswith), 태그(+tag, -tag), 가상 태그(+OVERDUE, +ACTIVE, +BLOCKED, +READY, +TAGGED, +ANNOTATED 등) 및 불리언 연산자(and, or)를 지원합니다.
작업 문서
모든 작업에 마크다운 문서(사양, 컨텍스트, 인수인계 메모)를 첨부할 수 있습니다:
task_doc_write id:"1" content:"# Spec\n\nBuild the auth flow.\n"
task_doc_read id:"1"
task_doc_delete id:"1"문서를 작성하면 +doc 태그와 has_doc:yes가 추가되어 에이전트가 문서가 있는 작업을 검색할 수 있습니다:
task_list filter:"+doc"
task_list filter:"has_doc:yes"에이전트 식별
작업은 어떤 에이전트가 작업을 소유하는지 추적하기 위한 agent 필드를 지원합니다:
task_add description:"Investigate bug" agent:"explorer"
task_list filter:"agent:explorer status:pending"프로젝트 격리
각 프로젝트는 자동으로 고유한 작업 데이터를 가집니다. 플러그인으로 사용될 때 작업 데이터는 ~/.claude/plugins/data/backlog/projects/<project-slug>/에 저장됩니다. 독립형으로 사용될 때는 TASKDATA를 명시적으로 설정하세요.
변수 | 설명 |
| 작업 데이터 디렉토리에 대한 명시적 경로 (자동 파생 재정의) |
| 자동 파생된 프로젝트별 작업 데이터의 루트 디렉토리 |
| 명시적 컬렉션 이름 (기본값: |
| CWD에서 컬렉션 이름을 파생하려면 |
| 다중 작성자 지원을 위한 에이전트 ID (Claude, Gemini 등) |
| 저장소 백엔드: 파일 시스템(기본값)은 생략, Amazon S3는 |
| S3 버킷 이름 ( |
| AWS 리전 (기본 자격 증명 사용 시 선택 사항) |
다중 작성자 지원
Backlog는 동일한 데이터를 공유하는 여러 프로세스(예: Claude Desktop 및 Gemini CLI)에서의 동시 액세스를 지원합니다. 이를 활성화하려면:
각 프로세스에 고유한
BACKLOG_AGENT_ID를 할당합니다(예:claude,gemini).에이전트 ID가 설정되면 엔진은 에이전트별 쓰기 로그를 사용하여 파일 잠금을 방지합니다.
각 프로세스는 다른 에이전트의 변경 사항을 가져오기 위해 작업 전에 자동으로
refresh()를 호출합니다.
네임스페이스
여러 프로젝트에 대해 단일 TASKDATA 디렉토리(공유 S3 버킷이나 전역 ~/.backlog 폴더 등)를 사용하려는 경우, 네임스페이스를 사용하여 작업을 분리할 수 있습니다:
수동:
BACKLOG_NAMESPACE=my-project를 설정하여 특정 컬렉션 이름을 사용합니다.자동:
BACKLOG_AUTO_NAMESPACE=true를 설정하여 Backlog가 현재 작업 디렉토리에서 자동으로 컬렉션 이름을 파생하도록 합니다(예:my-app-a1b2c3d4).
구성 예시 (.claude/settings.json):
{
"mcpServers": {
"backlog": {
"command": "node",
"args": ["/path/to/backlog/dist/index.js"],
"env": {
"TASKDATA": "/home/user/.backlog",
"BACKLOG_AUTO_NAMESPACE": "true",
"BACKLOG_AGENT_ID": "claude-desktop"
}
}
}
}두 방법 모두 여러 프로젝트가 동일한 저장소 백엔드를 공유하면서도 격리된 프로젝트별 백로그를 유지할 수 있게 합니다.
S3 백엔드
팀 공유나 클라우드 지속성을 위해 작업 데이터를 S3에 저장합니다. @backloghq/opslog-s3가 필요합니다:
npm install @backloghq/opslog-s3.claude/settings.json의 환경 변수를 통해 구성합니다:
{
"mcpServers": {
"backlog": {
"command": "node",
"args": ["/path/to/backlog/dist/index.js"],
"env": {
"TASKDATA": "my-project/tasks",
"BACKLOG_BACKEND": "s3",
"BACKLOG_S3_BUCKET": "my-team-backlog",
"BACKLOG_S3_REGION": "us-east-1"
}
}
}
}S3를 사용할 때 TASKDATA는 파일 시스템 경로 대신 버킷의 키 접두사가 됩니다.
Docker
docker build -t backlog .
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' \
| docker run --rm -i backlog개발
npm install
npm run build # compile TypeScript
npm run lint # run ESLint
npm test # run tests
npm run test:coverage # run tests with coverage
npm run dev # watch mode커뮤니티
GitHub Discussions — 질문, 아이디어, 공유 및 자랑
Issue Tracker — 버그 리포트 및 기능 요청
Documentation — 전체 문서, 스킬 참조, 필터 구문
backlog가 유용하다면 별표를 눌러주세요. 다른 사람들이 프로젝트를 찾는 데 도움이 됩니다.
라이선스
MIT
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
20 tool updates
v1.5.0- Changed
task_add12 fields changed- changed
Input schema / properties / agent / descriptionPrevious value: -"Agent identity, e.g. 'explorer', 'planner', 'reviewer'"New value: +"Agent identity for tracking task ownership across agent teams. E.g. 'explorer', 'planner', 'reviewer'." - changed
Input schema / properties / depends / descriptionPrevious value: -"UUID(s) of tasks this depends on, comma-separated"New value: +"Comma-separated UUIDs of tasks this depends on. Task shows as +BLOCKED until dependencies are completed." - changed
Input schema / properties / description / descriptionPrevious value: -"Task description text"New value: +"Task description (required, max 500 chars). Brief summary of what needs to be done." - changed
Input schema / properties / due / descriptionPrevious value: -"Due date, e.g. 'tomorrow', '2025-12-31', 'eow'"New value: +"Due date. Accepts: ISO dates ('2025-12-31'), relative ('3d', '2w'), named ('tomorrow', 'friday', 'eow', 'eom'), compound ('now+3d')." - changed
Input schema / properties / extra / descriptionPrevious value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag/-tag modifiers." - changed
Input schema / properties / priority / descriptionPrevious value: -"Priority: H (high), M (medium), L (low)"New value: +"Priority: H (high), M (medium), L (low). Affects urgency score and sort order." - changed
Input schema / properties / project / descriptionPrevious value: -"Project name, e.g. 'backend'"New value: +"Project name for grouping (alphanumeric, hyphens, underscores). E.g. 'backend', 'auth-refactor'" - changed
Input schema / properties / recur / descriptionPrevious value: -"Recurrence frequency, e.g. 'daily', 'weekly', '2wks', 'monthly'. Requires a due date."New value: +"Recurrence pattern. Requires 'due' to be set. Values: 'daily', 'weekly', 'weekdays', 'biweekly', 'monthly', 'quarterly', 'yearly', or numeric like '3d', '2w'." - changed
Input schema / properties / scheduled / descriptionPrevious value: -"Scheduled date — when to start working on the task, e.g. 'monday', 'tomorrow'"New value: +"Scheduled start date — when to begin working. Same date formats as 'due'." - changed
Input schema / properties / tags / descriptionPrevious value: -"Tags to apply, as comma-separated list or JSON array. E.g. 'bug,urgent' or '[\"bug\",\"urgent\"]'"New value: +"Tags as comma-separated list or JSON array. E.g. 'bug,urgent' or '[\"bug\",\"urgent\"]'. Used for filtering with +tag/-tag syntax." - changed
Input schema / properties / until / descriptionPrevious value: -"End date for recurrence — no instances generated past this date, e.g. '2026-12-31'"New value: +"End date for recurrence — no instances generated past this date. Only meaningful with 'recur'. Same date formats as 'due'." - changed
Input schema / properties / wait / descriptionPrevious value: -"Wait date — task hidden until this date"New value: +"Wait date — task is hidden from default views until this date. Same date formats as 'due'."
- Changed
task_annotate2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID." - changed
Input schema / properties / text / descriptionPrevious value: -"Annotation text"New value: +"Annotation text to add. Stored with a timestamp. Keep concise — use task_doc_write for longer content."
- Changed
task_archive1 field changed- changed
Input schema / properties / older_than_days / descriptionPrevious value: -"Number of days. Archive tasks completed/deleted more than this many days ago. Default: 90"New value: +"Archive tasks completed/deleted more than this many days ago. Default: 90. E.g. '30' for tasks older than a month."
- Changed
task_archive_load1 field changed- changed
Input schema / properties / segment / descriptionPrevious value: -"Archive segment name, e.g. '2026-Q1'"New value: +"Archive segment name, e.g. '2026-Q1'. Use task_archive_list to see available segments."
- Changed
task_count1 field changed- changed
Input schema / properties / filter / descriptionPrevious value: -"Filter expression. Leave empty for all pending tasks."New value: +"Filter expression. Same syntax as task_list. Examples: 'status:pending', '+OVERDUE', 'project:backend +bug'. Leave empty for all pending tasks."
- Changed
task_delete1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID of the task to delete."
- Changed
task_denotate2 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID." - changed
Input schema / properties / text / descriptionPrevious value: -"Exact annotation text to remove"New value: +"Exact annotation text to remove (case-sensitive). Must match a previously added annotation."
- Changed
task_doc_delete1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
- Changed
task_doc_read1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
- Changed
task_doc_write2 fields changed- changed
Input schema / properties / content / descriptionPrevious value: -"Document content (markdown)"New value: +"Document content in markdown format. Replaces any existing document on this task." - changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID."
- Changed
task_done1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Task must be in pending or active status."
- Changed
task_duplicate8 fields changed- changed
Input schema / properties / agent / descriptionPrevious value: -"Agent identity"New value: +"Agent identity for the new task." - changed
Input schema / properties / description / descriptionPrevious value: -"New description (overrides original)"New value: +"New description to override the original." - changed
Input schema / properties / due / descriptionPrevious value: -"New due date"New value: +"New due date. Pass empty string to clear." - changed
Input schema / properties / extra / descriptionPrevious value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag/-tag modifiers." - changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID to duplicate"New value: +"Task ID number (e.g. '1') or UUID of the task to copy." - changed
Input schema / properties / priority / descriptionPrevious value: -"New priority"New value: +"New priority. Pass empty string to clear." - changed
Input schema / properties / project / descriptionPrevious value: -"New project"New value: +"New project. Pass empty string to clear." - changed
Input schema / properties / tags / descriptionPrevious value: -"Tags to add or remove, as comma-separated list. E.g. 'frontend,urgent' or '-old,+new'"New value: +"Tags to add (+) or remove (-). E.g. '+frontend,-old'. Applied on top of the copied tags."
- Changed
task_import1 field changed- changed
Input schema / properties / tasks / descriptionPrevious value: -"JSON array of task objects, e.g. '[{\"description\":\"My task\",\"project\":\"foo\"}]'"New value: +"JSON array of task objects. Required field: 'description'. Optional: 'project', 'tags' (string[]), 'priority' (H/M/L), 'due', 'status', 'depends' (UUID[]), 'recur', 'agent', 'uuid' (to set explicit ID). Example: '[{\"description\":\"My task\",\"project\":\"foo\",\"priority\":\"H\"}]'"
- Changed
task_info1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Returns an error if no task matches."
- Changed
task_list1 field changed- changed
Input schema / properties / filter / descriptionPrevious value: -"Filter expression. Leave empty for all pending tasks."New value: +"Filter expression to match tasks. Examples: 'status:pending', 'project:backend +bug', 'due.before:tomorrow', '+OVERDUE', '+BLOCKED', 'priority:H', 'agent:explorer'. Combine with 'and'/'or' and parentheses. Leave empty for all pending tasks."
- Changed
task_log6 fields changed- changed
Input schema / properties / agent / descriptionPrevious value: -"Agent identity"New value: +"Agent identity that completed the work." - changed
Input schema / properties / description / descriptionPrevious value: -"Task description text"New value: +"Description of the completed work (required, max 500 chars)." - changed
Input schema / properties / extra / descriptionPrevious value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag modifiers." - changed
Input schema / properties / priority / descriptionPrevious value: -"Priority: H/M/L"New value: +"Priority: H (high), M (medium), L (low)." - changed
Input schema / properties / project / descriptionPrevious value: -"Project name"New value: +"Project name for grouping." - changed
Input schema / properties / tags / descriptionPrevious value: -"Tags to apply, as comma-separated list. E.g. 'done,reviewed'"New value: +"Tags as comma-separated list. E.g. 'done,reviewed'"
- Changed
task_modify13 fields changed- changed
Input schema / properties / agent / descriptionPrevious value: -"Agent identity, e.g. 'explorer', 'planner', 'reviewer'"New value: +"Agent identity. Pass empty string to unassign." - changed
Input schema / properties / depends / descriptionPrevious value: -"New dependency UUIDs"New value: +"New dependency UUIDs (comma-separated). Replaces existing dependencies. Pass empty string to clear." - changed
Input schema / properties / description / descriptionPrevious value: -"New description text"New value: +"New description text (max 500 chars). Only set if you want to change it." - changed
Input schema / properties / due / descriptionPrevious value: -"New due date"New value: +"New due date. Accepts ISO dates, relative ('3d'), named ('friday', 'eow'). Pass empty string to clear." - changed
Input schema / properties / extra / descriptionPrevious value: -"Additional raw attributes"New value: +"Space-separated additional attributes or +tag/-tag modifiers." - changed
Input schema / properties / filter / descriptionPrevious value: -"Filter to select tasks to modify (ID, UUID, or filter expression)"New value: +"Filter to select tasks. Can be a numeric ID ('1'), UUID, or filter expression ('project:backend priority:H'). Matches may update multiple tasks." - changed
Input schema / properties / priority / descriptionPrevious value: -"New priority (empty string to clear)"New value: +"New priority. Pass empty string to clear priority entirely." - changed
Input schema / properties / project / descriptionPrevious value: -"New project name"New value: +"New project name. Pass empty string to clear." - changed
Input schema / properties / recur / descriptionPrevious value: -"New recurrence frequency"New value: +"New recurrence pattern ('daily', 'weekly', '3d', etc). Pass empty string to clear." - changed
Input schema / properties / scheduled / descriptionPrevious value: -"New scheduled date"New value: +"New scheduled start date. Pass empty string to clear." - changed
Input schema / properties / tags / descriptionPrevious value: -"Tags to add (+) or remove (-), as comma-separated list. E.g. 'frontend,urgent' or '-old,+new'"New value: +"Tags to add (+) or remove (-). E.g. '+frontend,+urgent' or '-old,+new'. Prefix with + to add, - to remove. Without prefix, tags are added." - changed
Input schema / properties / until / descriptionPrevious value: -"End date for recurrence — no instances generated past this date, e.g. '2026-12-31'"New value: +"End date for recurrence. Pass empty string to clear." - changed
Input schema / properties / wait / descriptionPrevious value: -"New wait date"New value: +"New wait date. Task hidden from default views until this date. Pass empty string to clear."
- Changed
task_purge1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID of a deleted task"New value: +"Task ID number (e.g. '1') or UUID. Task must be in 'deleted' status."
- Changed
task_start1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Task must be in pending status."
- Changed
task_stop1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Task ID number or UUID"New value: +"Task ID number (e.g. '1') or UUID. Task must be currently active (started)."
24 tool updates
v1.4.0- First observed
task_add - First observed
task_annotate - First observed
task_archive - First observed
task_archive_list - First observed
task_archive_load - First observed
task_count - First observed
task_delete - First observed
task_denotate - First observed
task_doc_delete - First observed
task_doc_read - First observed
task_doc_write - First observed
task_done - First observed
task_duplicate - First observed
task_import - First observed
task_info - First observed
task_list - First observed
task_log - First observed
task_modify - First observed
task_projects - First observed
task_purge - First observed
task_start - First observed
task_stop - First observed
task_tags - First observed
task_undo
TDQS
Scored across 24 tools
Each tool has a distinct, clearly separated purpose with explicit cross-references in descriptions (e.g., 'use task_log instead', 'use task_doc_write instead'). No overlapping functionality—CRUD, lifecycle, archival, and document operations are cleanly partitioned.
Strict snake_case convention with consistent 'task_' prefix. Sub-resources follow predictable patterns (task_doc_read/write/delete, task_archive_list/load). Verbs are clear and consistently placed (task_add, task_delete, task_modify).
24 tools is above the typical ideal range but justified by the domain complexity. The set covers full task lifecycle, document attachments, archival management, annotations, and discovery without redundancy. Each tool earns its place for a comprehensive backlog system.
Excellent coverage of CRUD, status workflow (start/stop/done), soft-delete with purge, annotations, document attachments, and archival. Minor gap: archived tasks are view-only with no restore-to-active operation, though this appears to be an intentional cold-storage design.
Maintenance
Related MCP Connectors
Persistent AI memory shared across Claude, ChatGPT, coding agents, and compatible MCP clients.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
AI-native Kanban board — connect Claude to claim, work and move your tasks over MCP.
- mcpOAuthai.butlerbrain
Persistent memory for AI assistants. Save once; recall from Claude, ChatGPT, or any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAI-native project management with persistent memory for coding agents. 17 MCP tools for features, stories, sprints, architecture decisions, knowledge base, and session tracking.3MIT
- AlicenseAqualityBmaintenancePersistent memory and task board for Claude Code. 14 tools spanning projects, tasks, sessions, and activity logs — backed by Firestore, runs on the free tier. Handoff notes survive context compaction; the next session reads the last handoff and picks up where you stopped.14MIT
- AlicenseNot gradedqualityDmaintenanceA comprehensive project management and workflow tracking system that integrates with Claude Code via MCP, automatically capturing sessions, tools, agents, and project tasks into a centralized dashboard and database.11 npmMIT
- FlicenseNot gradedqualityDmaintenanceMCP server for project planning inside Claude. It tracks progress, knows your codebase, and resumes exactly where you left off every session.6 npm5-