project-progress
A lightweight MCP server that provides cross-project progress tracking tools (list, refresh, read, update, mark) for agents to query and manage work status across multiple tracked projects.
README
<div align="center">
Awesome Progress Tracker
Resumable memory for Codex, Claude Code, and any MCP-compatible agent.
Project-local Markdown that survives context resets — so your agent picks up exactly where it left off, every session, in one file it can read in a few hundred tokens.
Why · Features · Quick Start · MCP Tools · Troubleshooting
</div>
Why
Agent sessions end. Context windows reset. New sessions start cold, and a lot of the first few minutes gets spent re-deriving "what was I doing?" — or worse, redoing it.
Awesome Progress Tracker fixes that with one convention: every project keeps a project-progress/Progress.md file as its resume source of truth. A SessionStart hook injects the compact bits — Resume Snapshot, Next Action, Blockers — into the agent's context automatically. No dashboards, no databases, nothing to sync. Just a Markdown file the agent reads at kickoff and updates before it stops.
session 1 ──work──► Progress.md updated (Resume Snapshot · Next Action · Blockers)
│
new session ◄── SessionStart hook injects the snapshot, no lookup needed ──┘
Features
- 🗂️ One file per project, human-readable —
project-progress/Progress.mdis plain Markdown. Read it, edit it, diff it, commit it. - 🔁 Automatic resume context — a
SessionStarthook injects the Resume Snapshot and Next Action at kickoff, so the agent never starts blind. - 🛡️ Sensitive-commit guard — a
PreToolUsehook blocksgit commitwhen staged progress declarescommit_progress: falseorsensitivity: sensitive. - ⏰ Stop reminders — a
Stophook flags when the working tree changed butProgress.mddidn't, and scans for accidentally-committed secrets. - 🧩 Works everywhere — first-class plugins for Claude Code and Codex, plus an open-standard
SKILL.mdskill for Gemini CLI, Copilot, and Cursor. - 🌐 Cross-project index via MCP — a lightweight MCP server answers "what am I working on?" across every tracked project, with a tiny, validated tool surface (see MCP Server).
- 🩺 Scriptable health checks —
doctor --jsongives a non-zero exit code and a diagnostic report when setup is broken, so CI or a pre-flight script can catch it.
Choose Your Path
| I use... | Install this way |
|---|---|
| Claude Code | Install As A Claude Code Plugin — zero-config, one marketplace add |
| Codex | Install As A Codex Plugin — native plugin flow, no config.toml editing |
| Gemini CLI / Copilot / Cursor | Drop skills/project-progress/SKILL.md into ~/.agents/skills or a repo's .agents/skills |
| MCP client or CLI only | Install With npm/npx and, if needed, MCP Server |
Requirements: Node.js >= 18. The hooks and MCP server run entirely on Node; no Python is required.
Start a new agent session after plugin installation. Run awesome-progress-tracker doctor -g codex or awesome-progress-tracker doctor --json for a scriptable setup check.
Install As A Claude Code Plugin (recommended)
This is the zero-config path: one marketplace add + install wires the skill, the MCP index
server, and lifecycle hooks with no edits to your global CLAUDE.md or ~/.claude.json.
/plugin marketplace add AndriiLavrekha/awesome-progress-tracker
/plugin install project-progress@awesome-progress-tracker
Or from the CLI:
claude plugin marketplace add AndriiLavrekha/awesome-progress-tracker
claude plugin install project-progress@awesome-progress-tracker
What you get after install (restart the session to load it):
| Piece | What it does |
|---|---|
Skill project-progress |
Guides the agent to maintain project-progress/ during work |
Command /project-progress:init [name] |
Initializes tracking in the current repo |
MCP server project-progress |
list/refresh/read/update/mark tools over a cross-project index |
SessionStart hook |
Injects the Resume Snapshot / Next Action as context |
PreToolUse hook |
Blocks git commit on staged progress marked commit_progress: false or sensitivity: sensitive |
Stop hook |
Reminds you to update progress (and flags secrets) when the tree changed but Progress.md didn't |
To scope the MCP index to specific roots, set PROJECT_PROGRESS_ROOTS (semicolon-separated)
in the environment Claude Code runs in; the server scans those roots on refresh_projects.
The plugin ships prebuilt
dist/so it runs straight from the cloned repo with no build step.
Install As A Codex Plugin (recommended)
The same repo is also a Codex plugin (.codex-plugin/plugin.json + .agents/plugins/marketplace.json),
so it installs through the native Codex plugin flow — no manual config.toml editing:
codex plugin marketplace add AndriiLavrekha/awesome-progress-tracker
codex plugin add project-progress@awesome-progress-tracker
This wires the same skill, MCP server, and lifecycle hooks (hooks/hooks-codex.json)
as the Claude Code plugin. Codex hook commands use ${PLUGIN_ROOT} and the bundled MCP server
uses the Codex-specific .mcp.codex.json file. Restart Codex or start a new Codex session after
installing or updating the plugin so the manifest, MCP server, and hooks are reloaded.
[!NOTE] Codex does not auto-trust plugin-bundled hooks: the first time the
SessionStart/PreToolUse/Stophooks fire, Codex asks you to review and trust them. Approve once to enable the resume-context injection and the sensitive-commit guard.
<details> <summary><strong>Upgrade the plugin</strong></summary> <br>
Use the command path that matches how you installed the plugin.
Codex
codex plugin marketplace upgrade
codex plugin add project-progress@awesome-progress-tracker
codex plugin list
Codex refreshes configured Git marketplaces with the first command; re-adding the plugin installs
the latest marketplace snapshot. Start a new Codex session afterward. If prompted, review and
trust the updated hooks in /hooks.
Claude Code
claude plugin update project-progress@awesome-progress-tracker
claude plugin list
Restart Claude Code after the update so the plugin's skills, MCP server, and hooks reload.
</details>
Codex hooks are lifecycle context, not interactive modals. On an initialized project,
SessionStart injects compact resume context from project-progress/Progress.md. On an
uninitialized project, it emits guidance telling the agent to ask before initialization when the
requested work is multi-step. The agent and skill perform the user-facing ask:
This project is not initialized with Awesome Progress Tracker. Do you want me to create `project-progress/` here?
If you answer yes, the agent should run awesome-progress-tracker init . --project "<name>" or
project-progress init . --project "<name>". If you answer no, the agent should record a local
per-project opt-out so future sessions stay quiet:
awesome-progress-tracker state set . --state opted-out
The opt-out is stored outside the repository under the Awesome Progress Tracker user data directory; it does not dirty the project.
Skills follow the cross-tool open standard (SKILL.md), so the same skill also works in Codex,
Gemini CLI, Copilot, and Cursor when placed under ~/.agents/skills or a repo's .agents/skills.
Initialize A Project
After npm publication:
npx awesome-progress-tracker init /path/to/repo --project "My Project"
From the private GitHub repository:
npx github:AndriiLavrekha/awesome-progress-tracker init /path/to/repo --project "My Project"
Or install it globally:
npm install -g github:AndriiLavrekha/awesome-progress-tracker
project-progress init /path/to/repo --project "My Project"
The init command creates project-progress/ from templates/project-progress/. Then update project-progress/Progress.md frontmatter and sections for that project. Keep Resume Snapshot, Next Action, Remaining Work, and Blockers compact enough for an agent to load first.
<details> <summary><strong>Agent Instructions — manual / CLI install path</strong></summary> <br>
Install the global bootstrap for the agent you use.
Claude Code is the default:
npx github:AndriiLavrekha/awesome-progress-tracker install
npx github:AndriiLavrekha/awesome-progress-tracker install -g claude
Codex:
npx github:AndriiLavrekha/awesome-progress-tracker install -g codex
The installer does not initialize every project automatically. It installs global bootstrap instructions that tell the agent to check for project-progress/Progress.md at kickoff. If the current project is not initialized, the agent must ask before creating project-progress/.
The installer also configures the selected agent's MCP client to run this package:
- Claude Code: updates
~/.claude.json. - Codex: updates
~/.codex/config.toml.
By default, the MCP server scans the directory where you ran install. To scan other roots:
npx github:AndriiLavrekha/awesome-progress-tracker install -g codex --roots "C:/Users/me/Documents;C:/Users/me/Projects"
Check installation state:
npx github:AndriiLavrekha/awesome-progress-tracker status
npx github:AndriiLavrekha/awesome-progress-tracker status -g codex
Inspect or reset per-project opt-in/opt-out state:
npx github:AndriiLavrekha/awesome-progress-tracker state list
npx github:AndriiLavrekha/awesome-progress-tracker state set /path/to/repo --state opted-out
npx github:AndriiLavrekha/awesome-progress-tracker state reset /path/to/repo
Run a setup health check:
npx github:AndriiLavrekha/awesome-progress-tracker doctor
npx github:AndriiLavrekha/awesome-progress-tracker doctor -g codex
Install and immediately verify:
npx github:AndriiLavrekha/awesome-progress-tracker install --verify
npx github:AndriiLavrekha/awesome-progress-tracker install -g codex --verify
Install only the MCP configuration, without bootstrap instructions:
npx github:AndriiLavrekha/awesome-progress-tracker install-mcp
npx github:AndriiLavrekha/awesome-progress-tracker install-mcp -g codex
Write a project-local MCP config instead of user-global config:
npx github:AndriiLavrekha/awesome-progress-tracker install-mcp --local --roots "."
This writes .mcp.json in the current project.
Remove managed bootstrap and MCP config:
npx github:AndriiLavrekha/awesome-progress-tracker uninstall
npx github:AndriiLavrekha/awesome-progress-tracker uninstall -g codex
npx github:AndriiLavrekha/awesome-progress-tracker uninstall --local
Manual instruction files are also available:
- install or reference
skills/project-progress/SKILL.mdfor Codex - paste
agent-instructions/AGENTS-snippet.mdinto a project or global AGENTS.md - paste
agent-instructions/CLAUDE-snippet.mdinto Claude Code memory - follow
agent-instructions/HOOKS.mdfor lifecycle reminders and validation
Agents should update progress at kickoff when state changes, after milestones, when blockers appear, after verification, and before ending a meaningful session.
</details>
<details> <summary><strong>Hook Check — run the lifecycle hook manually</strong></summary> <br>
Windows
./hooks/project-progress-check.ps1 -ProjectRoot . -SessionStartedAt 2026-06-27T00:00:00+00:00 -MeaningfulWork -CompletionBoundary
POSIX
./hooks/project-progress-check.sh --project-root . --session-started-at 2026-06-27T00:00:00+00:00 --meaningful-work --completion-boundary
The wrappers run the compiled hook (dist/src/hook/cli.js) on Node, so run npm run build (or
install the published package, which builds on prepare) before invoking them. For direct use
without the wrappers, call node dist/src/hook/cli.js --project-root . --session-started-at <iso>.
</details>
MCP Server
After npm publication:
npx awesome-progress-tracker mcp
From the private GitHub repository:
npx github:AndriiLavrekha/awesome-progress-tracker mcp
Configure discovery with a semicolon-separated PROJECT_PROGRESS_ROOTS value:
$env:PROJECT_PROGRESS_ROOTS = "C:/Users/you/Documents;C:/Users/you/Projects"
npx github:AndriiLavrekha/awesome-progress-tracker mcp
For local development in this repo:
npm install
npm run build:mcp
node dist/src/mcp/server.js
For MCP clients installed from npm or GitHub, use the package binary directly (awesome-progress-tracker mcp or project-progress mcp) so stdio output stays clean.
Tool surface — deliberately small; administrative tracking state lives in the CLI (state list/set/reset), not here:
| Tool | What it does |
|---|---|
list_projects |
List compact summaries from the cached index; optional status filter |
refresh_projects |
Rescan PROJECT_PROGRESS_ROOTS for project-progress/Progress.md files and update the index |
read_project_progress |
Read one project's compact progress summary |
update_project_progress |
Replace or append a named section in a project's Progress.md |
mark_project_status |
Update frontmatter status and last_milestone for a project |
The MCP server maintains a lightweight global index:
~/.awesome-progress-tracker/projects.json
~/.awesome-progress-tracker/Projects.md
project-progress/Progress.md remains the source of truth. The index is only a fast global view for "what projects exist?" queries. refresh_projects rescans PROJECT_PROGRESS_ROOTS and updates the index. init, update_project_progress, and mark_project_status also upsert the affected project into the index.
Verification
<details> <summary><strong>Manual and agent-led validation commands</strong></summary> <br>
For manual and agent-led validation, use:
TESTING.mdagent-instructions/SELF-TEST.md
Run the tests and build:
npm test
npm run build
Verify package creation and npx-style execution locally:
npm pack --dry-run
npm pack
npx --yes ./awesome-progress-tracker-0.1.0.tgz help
Run the lifecycle check against this repo:
./hooks/project-progress-check.ps1 -ProjectRoot . -SessionStartedAt 2026-06-27T00:00:00+00:00 -MeaningfulWork -CompletionBoundary
</details>
Troubleshooting Codex
<details> <summary><strong>Codex doesn't ask about progress tracking in a new project</strong></summary> <br>
Check these in order:
- Plugin installed and enabled:
codex plugin list. - Plugin hooks trusted: open
/hooksin Codex and trust theproject-progresshook definitions. - New Codex session started after install or plugin update.
- The project is actually uninitialized:
project-progress/Progress.mdis missing. - The project is not opted out:
awesome-progress-tracker state list; reset withawesome-progress-tracker state reset .. - The task is non-trivial: hooks tell the agent to ask only for multi-step feature, investigation, refactor, setup, debugging, deployment, or release work.
- MCP configured and running: use
/mcpin Codex orawesome-progress-tracker doctor -g codex.
Hooks are best-effort and must never block normal Codex operation on their own. If hooks are disabled
or untrusted, the project-progress skill and bootstrap instructions still define the workflow.
</details>
Contributing
This is currently a private, single-maintainer repo. See AGENTS.md for structure and
coding conventions and TESTING.md for the verification workflow before opening a PR.
<details> <summary><strong>Project layout</strong></summary> <br>
Each project owns its own progress files. Global vaults, dashboards, hooks, and MCP tools may read
or summarize them, but they should not replace them — the source of truth is always the
project-progress/ folder inside each project.
| Path | What lives there |
|---|---|
templates/project-progress/ |
Canonical Markdown templates for new projects |
skills/project-progress/SKILL.md |
Cross-tool skill instructions for maintaining progress during agent work |
agent-instructions/ |
Reusable AGENTS.md, Claude Code, and hook guidance snippets |
src/hook/ |
TypeScript progress validation and lifecycle hook checks (compiled to dist/) |
hooks/ |
PowerShell and POSIX wrappers that run the compiled hook on Node |
src/mcp/ |
TypeScript MCP server that reads and updates project-local progress files |
.claude-plugin/, .mcp.json, hooks/hooks.json, commands/ |
The Claude Code plugin (skill + MCP server + lifecycle hooks + /project-progress:init command) |
.codex-plugin/, .agents/plugins/marketplace.json, .mcp.codex.json, hooks/hooks-codex.json |
The Codex plugin (reuses the same skill and dist/ adapter, with Codex-specific MCP and hook config) |
</details>
License
MIT — see the license field in package.json.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。