PDCA memory loop for Claude Code. Reads three-tier project memory (project-memory, decisions-log, task-history) before every task and writes back after, so iteration 50 has the same context quality as iteration 1. Pairs with superpowers — discipline + memory.
USE THIS SKILL FIRST on any coding task (feat, fix, bug, refactor, plan, design, brainstorm, code review, implement, add feature, write tests, 新功能, 修复, 重构) when the project contains `.github/agent/memory/` or `AGENTS.md`. Loads three-tier project memory (project-memory, decisions-log, task-history) and AGENTS.md BEFORE writing code, then updates task-history (always), decisions-log (on architecture changes) and project-memory (on fact changes) AFTER finishing — the PDCA guardrail that prevents "AI fixed bug X and broke feature Y" across iterations. Also handles INSTALL when the user asks to "install ai-coding-ok", "set up project memory", "initialize AI guardrails", or the project has no `.github/agent/memory/` yet — copy templates and customize placeholders. Also handles UPGRADE when the user says "upgrade ai-coding-ok", "update ai-coding-ok", "升级 ai-coding-ok", or "更新 ai-coding-ok" — diff project files against latest templates and apply framework-level changes while preserving project customizations.
# ai-coding-ok — PDCA Memory Loop
A three-tier memory system + AI coding guardrails. The PDCA closed loop (Plan → Do → Check → Act) keeps project context accurate across sessions and iterations. Works with Claude Code, GitHub Copilot, OpenCode, and Cursor.
## What this skill installs
When activated in a project, the skill copies a curated set of files into the target project:
```
<project-root>/
├── AGENTS.md # Architecture cheatsheet (AI reads first)
├── CLAUDE.md # Claude Code auto-load shim → @AGENTS.md
└── .github/
├── copilot-instructions.md # Global behavior rules (Copilot auto-loads)
├── project-metadata.yml # Machine-readable project facts
├── PULL_REQUEST_TEMPLATE.md
├── ISSUE_TEMPLATE/…
├── workflows/ # CI + memory update reminder
└── agent/
├── system-prompt.md # Agent persona + PDCA workflow
├── coding-standards.md
├── workflows.md # Scenario playbooks
├── prompt-templates.md
└── memory/
├── project-memory.md # 🧠 Long-term memory (facts, constraints)
├── decisions-log.md # 📝 Mid-term memory (ADRs)
└── task-history.md # 📜 Short-term memory (recent tasks)
```
## When to invoke this skill
Determine which mode applies, then follow that mode's instructions.
### Mode A — Install (one-time, on a new project)
**Triggers:**
- The user explicitly asks to install the memory system ("install ai-coding-ok", "set up project memory", "初始化 ai-coding-ok", etc.)
- The project does not yet contain `.github/agent/memory/`
**Action:**
→ Follow the **Installation Playbook** below (Steps 1–8)
---
### Mode B — PDCA Plan (every coding task — before writing code)
**Triggers:**
- The project already contains `.github/agent/memory/`
- The user requests any development work (new feature, bug fix, refactor, design, brainstorming, plan writing, code review, etc.)
**Action (~30 seconds, before any actual work):**
1. Read `AGENTS.md` — architecture cheatsheet
2. Read `.github/agent/memory/project-memory.md` — stable facts and constraints
3. Read `.github/agent/memory/decisions-log.md` — historical technical decisions
4. Read `.github/agent/memory/task-history.md` — recent task context
5. Internally (or to the user) summarize key constraints to confirm understanding
6. **Then continue with the user's original task** (do not stop here)
> ⚠️ Mode B is NOT a replacement for the user's task. It is context loading that happens before the task. If another skill is also triggered (e.g. `writing-plans` from superpowers), execute Mode B first, then enter that skill.
---
### Mode C — PDCA Act (every coding task — after finishing)
**Triggers:**
- A coding/design task has just been completed and final output is about to be returned to the user
**Action (must not skip):**
1. Update `.github/agent/memory/task-history.md` — record this task's summary
2. If architecture/technical decisions changed → update `.github/agent/memory/decisions-log.md`
3. If basic project facts changed (new modules, tech stack changes, etc.) → update `.github/agent/memory/project-memory.md`
4. Include a "Memory Updates" section in the final output, listing which memory files were updated
> ⚠️ If context limits prevent direct file edits, output the required updates as text and tell the user to apply them manually.
---
### Mode D — Upgrade (upgrade an installed ai-coding-ok)
**Triggers:**
- The user says "upgrade ai-coding-ok", "update ai-coding-ok", "升级 ai-coding-ok", or "更新 ai-coding-ok"
**Action:**
→ Follow the **Upgrade Playbook** below
## Language detection
Before Mode A or any user-facing output, detect the user's language:
- If the user's request contains predominantly Chinese characters → use Chinese for all communication, and use templates from `templates/zh/`
- Otherwise → use English, and use templates from `templates/en/`
When in doubt, ask the user once: "Should I install the English or Chinese template? (en/zh)"
## Installation Playbook (Mode A only)
> ⚠️ These steps run only in Mode A (first install). Mode B and Mode C do NOT use this flow.
Follow the steps in order. Do not skip Step 4 (customization) — unfilled `{{placeholders}}` defeat the whole purpose.
### Step 1 — Locate the skill's template directory
The templates live at `<plugin-root>/templates/{en|zh}/`, where `<plugin-root>` is the parent directory of the directory containing this `SKILL.md`. Resolve the absolute path before copying.
If invoked via `claude --plugin-dir`, use:
```
<plugin-dir>/templates/en/ # English projects
<plugin-dir>/templates/zh/ # Chinese projects
```
If invoked from a legacy git-clone install at `~/.claude/skills/ai-coding-ok/`, use:
```
~/.claude/skills/ai-coding-ok/templates/{en|zh}/
```
### Step 2 — Pick the target project
Default target is the current working directory. Confirm with the user only if:
- The cwd is obviously not a project (e.g. `$HOME`, `/tmp`).
- Key files already exist and would be overwritten (see Step 3 conflict check).
### Step 3 — Conflict check (non-destructive)
Before copying anything, check whether any of these paths already exist in the target:
- `AGENTS.md`
- `CLAUDE.md`
- `.github/copilot-instructions.md`
- `.github/agent/` (directory)
If **any** exist, STOP and report to the user. Offer three choices:
1. Overwrite (risky — they may have hand-edits).
2. Copy only missing files (safe, recommended).
3. Abort.
Never silently overwrite existing files.
### Step 4 — Copy templates into the project
Copy the entire contents of the chosen language template directory into the project root. On POSIX:
```bash
cp -rn <plugin-root>/templates/<lang>/. <project-root>/
```
`-n` = no-clobber, keeping the user's existing edits safe. On Windows/Node, do an equivalent merge-copy.
Verify the target files/dirs are present. Fail loudly if any are missing.
### Step 5 — Ask the user what they're building
Do NOT ask the user to fill in placeholders manually. Instead, ask a single plain-language question:
> "In one sentence, what are you building? Example: 'A personal expense tracker that records what I spend each day.'"
(Chinese: "一句话告诉我你想做一个什么东西?")
### Step 6 — Infer and replace placeholders
Based on the user's sentence, infer:
- Project name (`{{project-name}}` / `{{项目名称}}`)
- Project type (`{{project-type}}`, `{{project-type-brief}}`)
- Tech stack (language, framework, DB, ORM, test framework, package manager, etc.)
- Design principles (for a personal tool: "minimalist, practical"; for an internal tool: "maintainability > performance"; etc.)
- User scale, core features, business concepts, architecture, etc.
Then walk every copied file and replace every `{{...}}` placeholder with the inferred value. Files to process:
- `AGENTS.md`
- `CLAUDE.md` (Claude Code shim — typically just `@AGENTS.md`, no placeholder, but verify)
- `.github/copilot-instructions.md`
- `.github/project-metadata.yml`
- `.github/ISSUE_TEMPLATE/config.yml`
- `.github/workflows/ci.yml`
- `.github/workflows/memory-check.yml`
- `.github/agent/system-prompt.md`
- `.github/agent/coding-standards.md`
- `.github/agent/workflows.md`
- `.github/agent/prompt-templates.md`
- `.github/agent/memory/project-memory.md`
- `.github/agent/memory/decisions-log.md`
- `.github/agent/memory/task-history.md`
For `{{YYYY-MM-DD}}` placeholders use today's date.
When uncertain about a choice (e.g. "SQLite vs Postgres?"), pick the simpler one and note it in `decisions-log.md` as ADR-001. The user can override later.
### Step 7 — Bootstrap the first memory entries
After replacement, populate `task-history.md` with a real first entry:
```markdown
### [TASK-001] Install ai-coding-ok and initialize project
- **Date**: <today>
- **Type**: chore
- **Summary**: Installed three-tier memory system and coding standards via the ai-coding-ok skill. Tech stack and constraints were inferred from the user's one-sentence description (<user's exact words>) and applied automatically.
- **Files changed**: AGENTS.md, .github/**/*
- **Notes**: First run — keep `project-memory.md` and `decisions-log.md` in sync as architecture evolves.
```
### Step 8 — Report back to the user
Output:
1. A checklist of files installed and customized.
2. Key inferred decisions (tech stack, design principle) so the user can sanity-check.
3. Next steps: "Open `AGENTS.md` to review. From now on, I will read the memory files before every task and update `task-history.md` after every task."
## Working rules after installation
Once installed, ALL subsequent sessions (this one included) must follow the PDCA loop defined in `.github/agent/system-prompt.md`:
1. **Plan** — Read `AGENTS.md` + `.github/agent/memory/*.md` before touching code.
2. **Do** — Write code AND tests in the same change.
3. **Check** — Run tests. Verify no regression in unrelated features.
4. **Act** — Update `task-history.md` (always), `decisions-log.md` (when architecture changed), `project-memory.md` (when facts changed).
This is the mechanism that prevents "AI fixed bug X and deleted feature Y".
## Compatibility with superpowers
When `superpowers` and `ai-coding-ok` are both installed, **ai-coding-ok is responsible for ensuring PDCA runs end to end**, without depending on superpowers to cooperate.
### Execution paths
```
Path A (with superpowers):
using-superpowers → brainstorming → writing-plans → executing-plans
↑
brainstorming Step 1 reads AGENTS.md (Explore project context)
← The PDCA mandate at the top of AGENTS.md is the hook point
Path B (no superpowers, pure ai-coding-ok):
user request → AI scans skill triggers → invokes ai-coding-ok SKILL.md
← SKILL.md Mode B / Mode C is the hook point
```
### Rule 1: before invoking any superpowers skill
Before invoking `brainstorming` / `writing-plans` / `executing-plans`, run **Mode B** first (read memory files). This carries constraints and historical context into the downstream flow.
### Rule 2: when writing-plans generates a plan
Whatever `writing-plans` produces, append after the **last task** of the plan:
```markdown
### Task N+1: Update project memory (PDCA Act — ⚠️ DO NOT SKIP)
**Files:**
- Modify: `.github/agent/memory/task-history.md`
- Modify: `.github/agent/memory/decisions-log.md` (if architecture changed)
- Modify: `.github/agent/memory/project-memory.md` (if facts changed)
- [ ] Update task-history.md with a summary of this work
- [ ] If this work introduced architecture/tech decisions → record a new ADR in decisions-log.md
- [ ] If project facts changed (new modules, new dependencies, status changes) → update project-memory.md
- [ ] Confirm all memory files are updated
```
### Rule 3: after executing-plans / subagent-driven-development finishes
Run **Mode C** (Act phase) and update memory files. This step is enforced by ai-coding-ok itself, regardless of which superpowers version is installed.
### Rule 4: AGENTS.md is the hook for Path A
`templates/{en,zh}/AGENTS.md` already embeds the PDCA mandate at the top. When `brainstorming` Step 1 (Explore project context) reads AGENTS.md, the AI hits the PDCA requirement directly and executes it. This guarantees PDCA runs even if `ai-coding-ok` SKILL.md is not triggered — AGENTS.md takes over.
## Upgrade Playbook (Mode D only)
> ⚠️ These steps run only in Mode D (upgrade).
### Step 1 — Detect the current version
Read the first line of these files in the project and extract the version marker:
- `AGENTS.md`
- `.github/copilot-instructions.md`
- `.github/agent/system-prompt.md`
- `.github/agent/coding-standards.md`
- `.github/agent/workflows.md`
- `.github/agent/prompt-templates.md`
Version marker formats: `<!-- ai-coding-ok: vX.Y -->` or `# ai-coding-ok: vX.Y`.
If any file lacks a version marker, treat it as v1.0 (initial release, no markers).
Report the detected version to the user:
> "Detected ai-coding-ok version in this project: vX.Y. Latest template version: vX.Y."
### Step 2 — Read the latest templates
Read all template files in `<plugin-root>/templates/<lang>/` — these contain `{{placeholders}}` and represent the latest framework structure.
### Step 3 — Identify framework changes
Diff the **latest template structure** against the **installed files** in the project, file by file:
Strategy:
- Diff at the granularity of Markdown sections (`##` / `###`)
- Identify three change types:
1. **Added section**: in template, not in project → insert
2. **Removed section**: removed from template, still in project → ask the user before deleting
3. **Modified section**: section content changed → smart merge
Output a change summary, e.g. (v2.1.0 → v2.2.0):
```
Upgrade change list:
✅ templates/CLAUDE.md — new (Claude Code auto-load shim, @AGENTS.md import)
✅ all files — version marker bump v2.1.0 → v2.2.0
```
> 📌 **Historical upgrade paths** (look up your current installed version):
>
> | Path | Main changes |
> |------|--------------|
> | v1.0 → v2.0 | AGENTS.md / copilot-instructions.md gain mandatory PDCA section; workflows.md Step 5 gets "⚠️ DO NOT SKIP" annotation; all files get version markers |
> | v2.0 → v2.1.0 | Add `templates/.cursor/rules/ai-coding-ok.mdc` (Cursor support); version markers bumped to v2.1.0 |
> | v2.1.0 → v2.2.0 | Add `templates/CLAUDE.md` (Claude Code auto-load shim → @AGENTS.md); SKILL.md description rewritten (framework only, no project-file impact); version markers bumped to v2.2.0 |
> | v2.2.0 → v3.0.0 | Plugin packaging (`.claude-plugin/plugin.json`, `skills/ai-coding-ok/`); bilingual templates (`templates/en/`, `templates/zh/`); README split (English root, Chinese in `README.zh.md`); version markers bumped to v3.0.0 |
>
> Apply versions in order across multi-step jumps (e.g. v1.0 → v2.0 → v2.1.0 → v2.2.0 → v3.0.0).
### Step 4 — Confirm with the user
Show the change list to the user and ask:
> "These are the planned upgrade changes. Continue? (Y/n)"
⚠️ **Never auto-apply** — upgrade modifies existing files and must be user-confirmed.
### Step 5 — Apply the upgrade
Once confirmed, apply changes file by file:
**5a. Add sections:**
- Find the insertion point (based on positional context in the template)
- Replace `{{placeholders}}` in the new content with values already filled in the project
- Extract filled values from existing project files (project name, tech stack, etc.)
- If the new section has no placeholders (e.g. PDCA mandate block), insert directly
- Insert at the correct position
**5b. Remove sections:**
- Find the section's start and end (heading to next same-level heading)
- Delete the entire section
**5c. Modify sections:**
- Read the new section content from the template
- Replace `{{placeholders}}` with the project's actual values
- Replace the old section in the project
**5d. Bump version markers:**
- Update each file's first-line version marker to the latest version
- If the file lacks a version marker, insert one at line 1
### Step 6 — Verify
- Confirm version markers in all files are updated
- Confirm project-specific content (architecture diagrams, module lists, tech stack) was preserved
- Confirm no `{{placeholders}}` leaked into project files
### Step 7 — Record the upgrade
Append to `.github/agent/memory/task-history.md`:
```markdown
### [TASK-00N] Upgrade ai-coding-ok to vX.Y
- **Date**: <today>
- **Type**: chore
- **Summary**: Auto-upgraded ai-coding-ok framework files via Mode D. Sections added/modified: <change summary>
- **Files changed**: <actual change list>
- **Notes**: <merge details to review, if any>
```
### Step 8 — Report
```markdown
## ai-coding-ok upgrade complete
| Item | Old | New |
|------|-----|-----|
| ai-coding-ok | vX.Y | vX.Y |
### Files changed
- ✅ AGENTS.md — <summary>
- ✅ .github/copilot-instructions.md — <summary>
- ...
### Project customizations preserved
- Project name, tech stack, architecture diagram unchanged
- Memory files (project-memory.md, etc.) unchanged
### Manual review needed
- <if any>
```
## For non-Claude-Code users (Copilot / Cursor / OpenCode)
These tools don't load SKILL.md. Their users get the same value via:
1. Run `install.sh` (or `install.py`) once at the plugin root to copy `templates/<lang>/` into their project.
2. Their tool auto-loads the appropriate file (`.github/copilot-instructions.md` for Copilot; `.cursor/rules/ai-coding-ok.mdc` for Cursor; `AGENTS.md` for OpenCode), which all reference the memory system and PDCA workflow.
3. For initial placeholder customization, paste `scripts/customize-prompt.md` into the tool's chat to trigger replacement.
## References
- `templates/en/`, `templates/zh/` — source of truth for installed files (bilingual since v3.0.0).
- `scripts/customize-prompt.md` — customization prompt for non-Claude-Code tools.
- `scripts/upgrade-prompt.md` — manual upgrade prompt for Copilot / Cursor.
- `scripts/verify.sh` — post-install sanity check.
- `docs/claude-code-quickstart.md` — Claude Code users.
- `docs/copilot-quickstart.md` — Copilot users.
- `docs/superpowers-combo.md` — combo recipes with `superpowers`.
- `docs/faq.md` — common questions.