by JamesShi96
Project memory system for AI coding assistants (Claude Code, Cursor, Codex): session logs, project wiki, rules, TODOs, and handoff.
# Add to your Claude Code skills
git clone https://github.com/JamesShi96/project-butlerGuides for using ai agents skills like project-butler.
Last scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T16:01:21.160Z",
"npmAuditRan": true,
"pipAuditRan": true
}project-butler is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by JamesShi96. Project memory system for AI coding assistants (Claude Code, Cursor, Codex): session logs, project wiki, rules, TODOs, and handoff. It has 264 GitHub stars.
Yes. project-butler passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/JamesShi96/project-butler" and add it to your Claude Code skills directory (see the Installation section above). project-butler ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
project-butler is primarily written in Shell. It is open-source under JamesShi96 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh project-butler against similar tools.
No comments yet. Be the first to share your thoughts!
Initialize standardized project memory:
上层(稳定原则)
┌─────────────────────────────────────┐
│ CLAUDE.md(项目宪法)← 人工确认 │
│ ↑ candidates(AI 自动收集候选) │
└─────────────────────────────────────┘
↑ 抽象沉淀
中层(当前快照)
┌─────────────────────────────────────┐
│ PROJECT.md(项目 Wiki)← AI 自动同步 │
│ 概览 / 结构 / 模块状态 / 文件索引 │
│ STRUCTURE.md(文件管理规则)← AI 自动│
│ 目录规则 / 匹配条件 / 整理历史 │
│ UPDATE_LOG.md(里程碑变化)← AI 自动 │
│ DOCS.md(文档索引 + 元数据)← AI 自动 │
│ .claude/project-profile.json(画像配置)│
│ .claude/profile-pending.json(画像待处理)│
└─────────────────────────────────────┘
↑ 状态汇总
下层(事实流水)
┌────────────────────┐ ┌────────────────────┐
│ log/(会话日志) │ │ TODO.md(执行清单)│
│ raw + summaries │ │ owner/deadline/ │
│ + archive(分级) │ │ deps │
└────────────────────┘ └────────────────────┘
↓
session-handoff.md(下次接手点)
Core idea: bottom feeds top, top constrains bottom. Logs and TODOs are raw facts. Handoff marks the next resume point. Wiki is the current snapshot. Structure manages file organization. Docs index manages document output. Update Log records versioned milestone changes. Constitution is stable principles.
Supports 3 language modes: English (en), Chinese (zh), or bilingual. All content adapts to the selected language.
<EXTREMELY_IMPORTANT>
Before any other step, read references/update-check.md and execute
the version freshness check described there.
VERSION_NOTICE: block (three lines starting
with VERSION_NOTICE:) → prepend that exact block to your first
user-facing response for read triggers (status, continue,
continue full context, sync wiki, review claude), or append
it as a footnote at the end of your response for write triggers
(init, end session, organize files, change language,
profile setup, foundation repair, normal close, full close).
Deliver the block verbatim — never paraphrase, summarize, or merge.git pull on the skill directory yourself, even if the
user asks. Always show the upgrade command and let the user run it
in their own shell.Determine how this skill was triggered:
A. "整理文件" / "organize files":
references/file-reorganization.mdB. "收工" / "end session" / "结束会话" / "we're done" / "wrap up" / "done for today" / "normal close" / "full close":
C. Initialization (/project-butler, 初始化项目, setup project, etc.): → Continue to Init Flow below
D. "切换语言" / "change language":
references/language-change.md + references/language-adaptation.mdE. "continue" / "接着上次" / "上次做到哪了":
references/continue.mdF. "continue full context" / "全面回顾" / "项目全景" / "full context":
references/continue-full-context.mdG. "review claude" / "审查规则" / "更新宪法" / "check the rules":
.claude/candidates.md.claude/candidates.mdH. "sync wiki" / "同步项目" / "update overview" / "refresh overview":
I. "status" / "项目现状" / "where are we":
.claude/project-profile.json or .claude/profile-pending.json exists, read references/project-profile-system.md and include profile debt / review queue in the dashboardJ. "foundation setup" / "profile setup" / "foundation repair" / "profile repair" / "profile sync":
references/project-profile-system.mdWhen triggered by "end session" / "结束会话" / "收工" / "we're done" / "wrap up" / "done for today" / "normal close" / "full close", execute in order:
log/session-YYYY-MM-DD-{slug}.md
session-2026-04-21-prd-draft.md)references/log-compaction.md and execute.claude/candidates.md (see rules below).claude/project-profile.json exists, .claude/profile-pending.json exists, or the user explicitly requested Normal Close / Full Close / profile sync:
references/project-profile-system.md.claude/profile-pending.jsonreferences/file-reorganization.md, execute Mode B
.claude/.file-snapshot.jsonreferences/document-archiving.md, scan and archive document output
docs/ subdirectoriesDOCS.md index and metadatareferences/update-log.mdAfter end session, summarize outcomes instead of listing internal protocol steps:
Session saved.
Updated:
- Handoff refreshed
- TODO updated: {done count} done, {active count} active
- Project wiki synced
- Profile: {normal close / full close / no profile impact / profile pending count}
- Documents archived: {count}
- Update log: {version added or skipped}
Next:
- {next action}
- {next action}
Omit lines that do not apply. For status, answer as a compact dashboard:
Current Status
Project:
- Stage: {stage}
- Focus: {current focus}
Active Work:
- {active item}
Recent Change:
- {latest update log entry or "No milestone update yet"}
Profile:
- {profile shape / pending debt / review needed, only when profile files exist}
Next Best Step:
- {single recommended next step}
Session log headers adapt to the configured language (read references/language-adaptation.md for glossary).
# Session YYYY-MM-DD — {topic}
## Session Goal
## Key Actions (Chronological)
## Decisions & Rationale
## Output Files
## Unfinished Items / Next Session Pickup
## CLAUDE.md Candidates (if any)
AI automatically appends to .claude/candidates.md when:
Never promote candidates into CLAUDE.md automatically. All candidates require explicit user review via "review claude" before CLAUDE.md is changed.
Each task in TODO.md must include:
- [ ] {task description}
Owner: {name} | Deadline: {date} | Dependencies: {prerequisite}
If user provides a task missing required fields, ask them to fill in. Completed tasks are checked and kept (not deleted).
Scan project root for: CLAUDE.md, PROJECT.md, session-handoff.md, TODO.md, log/, STRUCTURE.md, UPDATE_LOG.md, DOCS.md, docs/, .claude/.file-snapshot.json, .claude/candidates.md, .claude/project-profile.json, .claude/profile-pending.json
references/project-profile-system.md and run Foundation Setup as the default setup path. Create the base 7-component memory stack, .claude/project-profile.json, .claude/profile-pending.json, and only the user-confirmed baseline docs. For lightweight projects, use maintenance.preference = "lightweight" and keep Required docs minimal instead of skipping profile state.references/upgrade-mode.md; if profile files are missing, also read references/project-profile-system.md and offer profile-aware upgrade using the latest Foundation Setup modelFor Fresh initialization, follow Foundation Setup in references/project-profile-system.md: ask for the required setup basics, ask for a natural project description, infer the project shape, generate project-specific foundation areas, ask only targeted follow-up questions, and propose Required / Recommended / Optional documents before file creation.
AskUserQuestion should still keep setup lightweight. Make clear that the user can press Enter for recommended defaults.
Required:
Recommended defaults:
en / zh / bilingual (default bilingual)Read references/file-templates.md + references/language-adaptation.md + references/document-archiving.md + references/project-profile-system.md.
Create each file using templates, replacing {{VARIABLES}} with user answers. For UPDATE_LOG.md, calculate the initial version based on the version style selection and current date (e.g., semantic → v0.1.0, date → 2026.06.1). Apply language adaptation rules and glossary from the reference.
Create log/.gitkeep (empty file) alongside log/ directory so git tracks it when empty.
Create .claude/.file-snapshot.json with empty content: {"lastScan":"","files":{}}.
Create .claude/project-profile.json, .claude/profile-pending.json, and confirmed Required profile baseline docs from the approved Foundation Setup proposal.
If the user enabled Cursor support, create .cursor/rules/project-system.mdc from Template 6.
If the user enabled Codex support, create AGENTS.md from Template 6b. If AGENTS.md already exists, do not overwrite it; offer to append the project-butler section after confirmation.
Adapt this report to the configured language:
Project memory is ready.
Daily commands:
- end session — save progress and next steps
- continue — resume next time
- status — check current state
Advanced:
- review claude — approve long-term rules when needed
Created:
- Project memory and handoff notes
- TODO tracking
- Document index
- Update log
- Profile config and pending queue: created
- File organization rules
- Cursor rules: created / skipped
- Codex AGENTS.md: created / skipped
Settings:
- Language: {{LANGUAGE}}
- Version style: {{VERSION_STYLE}} (starting: {{VERSION_INITIAL}})
| Trigger | Read these files |
|---|---|
| Init (fresh) | references/file-templates.md + references/language-adaptation.md + references/document-archiving.md + references/project-profile-system.md |
| Init (upgrade) | above + references/upgrade-mode.md; include references/project-profile-system.md when creating, repairing, or preserving profile files |
| End session | references/file-reorganization.md + references/document-archiving.md + references/update-log.md + references/log-compaction.md (if logs ≥ threshold); include references/project-profile-system.md when profile files exist or Normal/Full Close is requested |
| 整理文件 / organize files | references/file-reorganization.md |
| 切换语言 / change language | references/language-change.md + references/language-adaptation.md |
| continue / 接着上次 | references/continue.md |
| continue full context / 全面回顾 | references/continue-full-context.md |
| review claude / 审查规则 | Inline workflow in Step 0 |
| sync wiki / 同步项目 | Inline workflow in Step 0 |
| status / 项目现状 | Inline workflow in Step 0; include references/project-profile-system.md when profile files exist |
| profile setup / full close / foundation repair | references/project-profile-system.md |
Make AI coding agents remember your project between sessions.
project-butler helps Claude Code, Cursor, Codex, and similar AI coding assistants behave like long-term project teammates instead of starting from scratch every session.
For normal use, you only need four actions:
/project-butler Set up project memory
end session Save progress and next steps
continue Resume next time
status Check where the project stands
For projects that need stronger product, architecture, roadmap, research, or eval alignment, project-butler can also create a Project Profile during setup and offer profile-aware Normal Close / Full Close behavior.
Install as a Claude Code skill:
git clone https://github.com/JamesShi96/project-butler.git ~/.claude/skills/project-butler
Open any project and set up project memory:
/project-butler
Work normally. At the end of a work session:
end session
Next time, resume without re-explaining the project:
continue
That is enough for daily use. For Cursor, Codex, and other assistants, see Tool Compatibility.
The skill auto-checks for updates on every invocation. Once per day per
machine, it runs git fetch against its own repo and compares local
HEAD to origin/main. If behind, the next response carries this
banner block:
VERSION_NOTICE: project-butler is N commits behind upstream.
→ Update: cd <path> && git pull
→ Silence: PROJECT_BUTLER_NO_UPDATE_CHECK=1
The banner disappears on the next invocation after you pull — cache is keyed on commit SHA, not just time.
Side effect on git status: after the auto-fetch, git status
inside the skill directory may show "behind origin/main by N commits".
This is expected and harmless — the skill never modifies the working
tree.
Silencing: export PROJECT_BUTLER_NO_UPDATE_CHECK=1. Only the
literal value "1" silences — =0, =false, or empty does not
silence (counter-intuitive but intentional).
Debugging missing banners: from an external shell only, run the
shared update-check script with
PROJECT_BUTLER_UPDATE_CHECK_DEBUG=1. Never enable debug inside
Claude Code — CC captures stderr into the LLM context and debug output
will leak into responses.
Cursor / Codex: these tools do not have Claude Code's skill lifecycle, so update checks are manual/on-demand:
bash "${PROJECT_BUTLER_SKILL_DIR:-$HOME/.claude/skills/project-butler}/scripts/check-update.sh"
Reach limitation: if you installed project-butler before v1.7.0, you do not have this auto-check feature yet. Pull once manually:
cd ~/.claude/skills/project-butler && git pull
After that, future updates are announced automatically.
AI coding assistants are powerful in one session and forgetful across sessions. If any of these sound familiar, project-butler is for you:
project-butler turns a project folder into that source of truth, so the next AI session can pick up where the last one stopped.
All triggers are natural language. Use slash commands only for first-time setup.
| Command | Use it when |
|---|---|
/project-butler |
Set up or upgrade project memory. |
end session / we're done |
Save progress, refresh next steps, and record important changes. |
continue / continue from last time |
Resume the previous session without re-explaining context. |
status / where are we |
Get the current project state and the next best step. |
| Command | Use it when |
|---|---|
continue full context |
Rebuild the full project trajectory after a long break or assistant switch. |
review claude / check the rules |
Review candidate project rules before they become long-term rules. |
sync wiki / update overview |
Force-refresh PROJECT.md. |
organize files |
Clean up new files according to STRUCTURE.md. |
change language |
Switch project management files between English, Chinese, and bilingual mode. |
normal close |
Save the session and defer profile-impacting updates into the pending queue. |
full close |
Align affected profile docs now with a bounded Scope Plan. |
profile setup / foundation repair |
Create or repair the project profile and baseline reference docs after confirmation. |
Session recovery (continue / continue full context) is routed through project-butler internally. There is no separate /continue command to install.
Run /project-butler once. It maintains these plain Markdown files in your project:
project-root/
├── CLAUDE.md <- Project rules / constitution
├── PROJECT.md <- Current project wiki
├── STRUCTURE.md <- File organization rules
├── UPDATE_LOG.md <- Milestone-level changelog
├── DOCS.md <- Document index and metadata
├── session-handoff.md <- Cross-session handoff
├── TODO.md <- Execution checklist
├── docs/ <- Archived project documents
├── log/ <- Session logs
└── .claude/
├── candidates.md <- Candidate rules for review
├── project-profile.json <- Project profile config
├── profile-pending.json <- Profile pending/debt queue
└── .file-snapshot.json <- File organization snapshot
The core files are plain Markdown, so other tools can read them even when they do not run the skill natively.
What that means in practice:
Project Butler also keeps a small machine-readable profile so the assistant can understand which long-lived docs matter, which sections are protected, and which profile updates have been deferred.
| Tool | Status | How it works |
|---|---|---|
| Claude Code | Native skill | Install this repo under ~/.claude/skills/project-butler and run /project-butler. |
| Cursor | Project rules, best-effort | project-butler can generate .cursor/rules/project-system.mdc, which points Cursor at the same project memory files and mirrors the main triggers. |
| Codex | AGENTS.md, best-effort |
project-butler can generate AGENTS.md, which points Codex at the same project memory files and mirrors the main triggers. |
| Other AI assistants | File-based | Any assistant that can read project files can use the project memory as shared context. |
See docs/compatibility.md for details and caveats.
project-butler uses a 7-component memory stack internally, organized by stability:
Stable rules
┌─────────────────────────────────────┐
│ CLAUDE.md / project rules │ <- Human-reviewed principles
│ ↑ candidates collected by AI │
└─────────────────────────────────────┘
↑ distilled from work
Current state
┌─────────────────────────────────────┐
│ PROJECT.md │ <- What the project is now
│ STRUCTURE.md │ <- Where files belong
│ UPDATE_LOG.md │ <- Milestone-level changes
│ DOCS.md │ <- Document index
│ .claude/project-profile.json │ <- Profile config
│ .claude/profile-pending.json │ <- Profile debt queue
└─────────────────────────────────────┘
↑ summarized from facts
Raw facts
┌──────────────────────┐ ┌───────────────────────┐
│ log/ │ │ TODO.md │
│ What happened │ │ What needs doing │
└──────────────────────┘ └───────────────────────┘
↓
session-handoff.md <- Where the next session should resume
Bottom feeds top. Top constrains bottom.
docs/.Project Profile System is internal profile-aware behavior for setup and close. Fresh setup stays conversational and can remain lightweight by creating only minimal co