Tick-Driven Autonomous Production Factory for LLMs. A framework for long-running agents using Cron/Heartbeats and physical Markdown checklists to prevent OOM...
---
clawdbot:
emoji: ð§
requires:
bins:
- bash
- openclaw
- node
- npm
- git
env: []
---
# Agent Memento v0.2 â Complete Skill Specification
```markdown
---
name: agent-memento
description: Tick-Driven Autonomous Production Factory for LLMs. A framework for long-running agents using Cron/Heartbeats and physical Markdown checklists to prevent OOM and context decay.
metadata: {"clawdbot":{"emoji":"ð§ ","requires":{"bins":["bash","openclaw"],"env":[]}}}
---
# Agent Memento v0.2 (Tick-Driven Autonomous Execution)
> "Don't build AI that tries to remember everything. Build systems that make AI read the blueprint anew every 5 minutes."
åœæä»¬åšè倩æ¡é让倧暡å"åäžäžªæžžæ"æ¶ïŒåŒå€Žæ»æ¯çŸå¥œçãäœéç代ç è¶
è¿ 2000 è¡ïŒæš¡ååŒå§ïŒ
- **倱å¿ç (Amnesia)**ïŒå¿è®°äºèªå·±å®ä¹çæ¥å£ïŒåŒå§å空æé ã
- **å¹»è§éæ (Hallucination)**ïŒèªä¿¡æ»¡æ»¡å°èŸåºäžå æ ¹æ¬æ²¡æè·è¿ç"å®çŸ"代ç ã
- **äžäžææ žç (Resource Overload)**ïŒäžºäºä¿®äžäžªå° BugïŒåŒºè¡èŠçæŽäžªå€§æä»¶ïŒå¯ŒèŽå
åèå°œ (OOM)ã
**æ žå¿ååïŒæ"å
šç¥å
šèœçè¶
级 Agent"éçº§äžºæ æ°äžª"åªæ 5 åéè®°å¿çãæ æ
ç Tick æºåš"ã**
---
## Quick Start (30 ç§äžæ)
1. åå§å项ç®ïŒ
```bash
bash skills/agent-memento/scripts/init_memento.sh MyProject
```
2. åšäž»å¯¹è¯äžè®© Architect å¡«å `MASTER_PLAN.md` å `PROJECT_MAP.md`
3. å¯åšèªåšæ§è¡ïŒ
```bash
crontab -e
# æ·»å ïŒ*/5 * * * * /path/to/MyProject/scripts/memento_tick.sh
```
4. ïŒå¯éïŒå¯åš Dashboard çæ¿çæ§ïŒ
```bash
bash scripts/dashboard.sh
```
5. å»å·ææºã忥ç Dashboard æ `docs/TICK_STATUS.md` æ¥çè¿åºŠã
## äžãç³»ç»æ¶ææ»è§
```
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Human (You) â
â Discord / é£ä¹Š / Dashboard Panel â
ââââââââââââââââ¬âââââââââââââââââââââââââââ¬ââââââââââââââââ
â èªç¶è¯èšäº€äº â 颿¿æ¹æ³š/å¹²é¢
⌠âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Main Agent (Architect) â
â LLM æ¬äœ · é¿å¯¹è¯ Session â
â â
â èèŽ£ïŒ â
â - äžäººç±»è®šè®ºéæ±ïŒç¿»è¯äžºç»æåä»»å¡ â
â - çŒèŸ MASTER_PLAN.mdïŒå¢/å /æ¹/éæä»»å¡ïŒ â
â - çŒèŸ PROJECT_MAP.mdïŒç»Žæ€é¡¹ç®è®€ç¥å°åŸïŒ â
â - 读å TICK_STATUS.md å Dashboard æ¹æ³š â
â - æ ¹æ®åéŠè°æŽè®¡åïŒèªäž»å³ç or è¯·ç€ºäººç±»ïŒ â
ââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââ
â åå
¥ç©çæä»¶
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Physical State Layer (ç£ç) â
â â
â docs/MASTER_PLAN.md â å¯äžççžæºïŒç»æå任塿ž
å â
â docs/PROJECT_MAP.md â 项ç®è®€ç¥å°åŸ / æä»¶çŽ¢åŒ â
â docs/TICK_STATUS.md â Tick æ§è¡ç¶ææµæ°ŽèŽŠ â
â docs/HUMAN_NOTES.md â äººç±»æ¹æ³šééïŒé¢æ¿åå
¥ïŒ â
â logs/tick_*.log â æ¯äžª Tick ç宿޿§è¡æ¥å¿ â
ââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââ
â 读åïŒæ¯æ¬¡ä»é¶åŒå§ïŒ
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Tick Worker (Bricklayer) â
â Cron å€é · çåœè¿çš · æ ç¶æ · æ æ
â
â â
â çåœåšæïŒ â
â 1. 鿥 â 读 MASTER_PLAN.md â
â 2. æŸå°åœå坿§è¡ä»»å¡ â
â 3. 读 PROJECT_MAP.md ç¡®å®äžäžæèåŽ â
â 4. 读 HUMAN_NOTES.md æ£æ¥äººç±»æ¹æ³š â
â 5. æ§è¡ä»»å¡ â ç©çéªè¯ â
â 6. åç»æå° TICK_STATUS.md â
â 7. æååæ [x]ïŒå€±èŽ¥åè®°åœ â æ»äº¡ â
â 8. èªåš git commit â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
```
---
## äºãThe MethodologyïŒäžå±æºèœåå·¥
### Layer 1ïŒäººç±»ïŒæ¹åçïŒ
- åš Discord/é£ä¹Š/Dashboard äžçšèªç¶è¯èšæè¿°éæ±ååéŠ
- éè¿ Dashboard 颿¿éæ¶æå
¥æ¹æ³šãæå/æ¢å€æµæ°Žçº¿
- **äžéèŠéæ¡å®¡æ ž**ââåªåš Agent 请æ±åž®å©æèªå·±æ³ä»å
¥æ¶åäž
### Layer 2ïŒArchitectïŒäž» Agent / ç¿»è¯å®ïŒ
- äžäººç±»çäž»å¯¹è¯ Session
- å°æš¡ç³éæ±ç¿»è¯äžº `MASTER_PLAN.md` äžçç»æåä»»å¡
- æç»ç»Žæ€ `PROJECT_MAP.md`ïŒé¡¹ç®è®€ç¥å°åŸïŒ
- çæ§ `TICK_STATUS.md`ïŒæ ¹æ®æ§è¡æ
åµèªäž»è°æŽè®¡å
- éå°é»å¡æ§å³çæ¶æè¯·ç€ºäººç±»
### Layer 3ïŒTick WorkerïŒå Agent / æ³¥çŠå ïŒ
- Cron å€éççåœè¿çšïŒæ¯æ¬¡ä»é¶å¯åš
- ç»å¯¹æä» `MASTER_PLAN.md`ïŒäžååé æ§å³ç
- æ§è¡ â éªè¯ â æ±æ¥ â æ»äº¡
---
## äžãç©çç¶ææä»¶è§è
### 3.1 MASTER_PLAN.md â å¯äžççžæº
```markdown
# MASTER_PLAN: <ProjectName>
## Meta
- created: 2025-01-15
- last_architect_edit: 2025-01-15T14:30:00
- tick_mode: auto <!-- auto | paused | stopped -->
- max_retries: 3 <!-- å任塿倧éè¯æ¬¡æ° -->
- max_tasks_per_tick: 2 <!-- å¿«ä»»å¡æ¶å
讞å Tick è¿ç»å€çäžé -->
- max_diff_lines: 200 <!-- diff size guard éåŒ -->
- stale_lock_timeout: 15min <!-- [~] åµå°žéé眮éåŒ -->
- circuit_breaker_threshold: 5 <!-- è¿ç»å€±èŽ¥å€å°æ¬¡è§Šåçæ -->
- clean_strategy: git-clean <!-- äžé¶æ®µé²çæž
çæºå¶ -->
- clean_ignore: .memento_cleanignore
- status_max_entries: 50 <!-- TICK_STATUS.md æå€§æ¡ç®æ°ïŒè¶
åºèªåšåœæ¡£ -->
- status_archive_dir: logs/status_archive/
- total_ticks: 0 <!-- èªåšéå¢ç Tick 计æ°åš -->
- total_tasks: 15 <!-- èªåšç»Žæ€ -->
- completed_tasks: 0 <!-- èªåšç»Žæ€ -->
---
## Phase 1: Foundation
<!-- parallel: true -->
<!-- depends: none -->
- [ ] `T-101` [MODULE:database] Setup PostgreSQL schema
- verify: `cd src && npm test -- --grep "db-schema" && echo PASS`
- context_files: [src/db/schema.ts, src/db/migrations/]
- guard_files: [src/auth/*]
- estimate: 5min
- retries: 0
- [ ] `T-102` [MODULE:auth] Implement JWT token generation
- verify: `cd src && npm test -- --grep "jwt" && echo PASS`
- context_files: [src/auth/jwt.ts, tests/auth/jwt.test.ts]
- guard_files: [src/db/*]
- estimate: 5min
- retries: 0
## Phase 2: Integration
<!-- parallel: false -->
<!-- depends: Phase 1 -->
- [ ] `T-201` [MODULE:auth] Connect auth middleware to database
- verify: `cd src && npm run test:integration && echo PASS`
- context_files: [src/auth/middleware.ts, src/db/queries.ts]
- guard_files: [src/db/schema.ts]
- estimate: 10min
- retries: 0
## Phase 3: Polish
<!-- parallel: true -->
<!-- depends: Phase 2 -->
- [ ] `T-301` [MODULE:docs] Generate API documentation
- verify: `test -f docs/api.md && echo PASS`
- context_files: [src/routes/*.ts]
- guard_files: []
- estimate: 3min
- retries: 0
```
**ä»»å¡å段诎æïŒ**
| åæ®µ | å¿
é¡» | 诎æ |
|------|------|------|
| `T-XXX` | â
| ä»»å¡å¯äž IDïŒçšäºæ¥å¿è¿œèžªåè·šæä»¶åŒçš |
| `[MODULE:xxx]` | â
| æš¡åæ çŸïŒåž®å© Worker çè§£é¢å蟹ç |
| `verify` | â
| éªæ¶åœä»€ïŒExit Code 0 = éè¿ã**没æè¿äžªå段ïŒä»»å¡äžåæ³** |
| `context_files` | â
| Worker å
讞å 蜜çæä»¶çœååïŒé²æ¢äžäžæççž |
| `guard_files` | æšè | çŠæ¢ä¿®æ¹çæä»¶å衚ïŒç¡¬çºŠæ |
| `estimate` | æšè | é¢äŒ°èæ¶ïŒçšäº Tick è°åºŠå³ç |
| `retries` | èªåš | ç± Tick Worker èªåšéå¢ïŒArchitect å¯é眮 |
**ä»»å¡ç¶ææ è®°ïŒ**
| æ è®° | å«ä¹ |
|------|------|
| `[ ]` | åŸ
æ§è¡ |
| `[x]` | 已宿ïŒverify éè¿ïŒ |
| `[!]` | å·²é»å¡ïŒè¶
è¿ max_retriesïŒ |
| `[~]` | æ§è¡äžïŒTick Worker æ£åšå€çïŒé²æ¢å¹¶åå²çªïŒ |
| `[-]` | 已跳è¿ïŒArchitect äž»åšæ 记䞺äžéèŠïŒ |
**Phase 级å
æ°æ®ïŒ**
| åæ®µ | 诎æ |
|------|------|
| `parallel: true/false` | 该 Phase å
ç任塿¯åŠå¯å¹¶åæ§è¡ |
| `depends: Phase X` / `none` | Phase 级å眮äŸèµ |
### 3.2 PROJECT_MAP.md â 项ç®è®€ç¥å°åŸ
> Worker ç GPSãäžè¯»å
šéšæºç ïŒå
读å°åŸïŒåæ `context_files` 粟åå 蜜ã
```markdown
# PROJECT MAP: <ProjectName>
## Architecture Overview
Single-page game using Canvas API. No framework. Vanilla TypeScript.
## Module Registry
### [MODULE:database]
- Purpose: PostgreSQL connection and schema management
- Entry: src/db/index.ts
- Key interfaces: `DbConnection`, `UserRecord`, `SessionRecord`
- Notes: Uses connection pooling via pg-pool
### [MODULE:auth]
- Purpose: JWT-based authentication
- Entry: src/auth/index.ts
- Key interfaces: `AuthToken`, `AuthMiddleware`
- Dependencies: [MODULE:database]
- Notes: Tokens expire in 24h, refresh flow not yet implemented
### [MODULE:routes]
- Purpose: Express route handlers
- Entry: src/routes/index.ts
- Dependencies: [MODULE:auth], [MODULE:database]
## File Tree (auto-maintained)
<!-- Architect åºåšé¡¹ç®ç»æååšæ¶æŽæ°æ€åºå -->
src/
âââ db/
â âââ index.ts # DB connection pool
â âââ schema.ts # Table definitions
â âââ migrations/ # SQL migration files
âââ auth/
â âââ index.ts # Auth module entry
â âââ jwt.ts # Token generation/validation
â âââ middleware.ts # Express middleware
âââ routes/
âââ index.ts # Route registry
âââ users.ts # User CRUD endpoints
## Conventions
- All tests in `tests/` mirror `src/` structure
- Config via environment variables (see .env.example)
- Error handling: all async handlers wrapped in try/catch, errors go to src/utils/errors.ts
```
**绎æ€è§åïŒ**
- Architect åšå建/è°æŽè®¡åæ¶åæ¥æŽæ°
- Tick Worker **åªè¯»äžå** PROJECT_MAP.md
- åŠæ Worker åç° MAP äžå®é
äžç¬ŠïŒåš TICK_STATUS.md äžæ¥åïŒç± Architect ä¿®æ£
### 3.3 TICK_STATUS.md â æ§è¡ç¶ææµæ°ŽèŽŠ
```markdown
# TICK STATUS LOG
---
## [2025-01-15T14:35:00] Tick #012
- **Task**: T-101 [MODULE:database] Setup PostgreSQL schema
- **Status**: â
SUCCESS
- **Verify Output**: `PASS` (exit code 0)
- **Duration**: 2m18s
- **Files Modified**: src/db/schema.ts (+45 -0), src/db/migrations/001_init.sql (+23 -0)
- **Diff Size**: 68 lines
- **Git Commit**: `a3f7b2c` â "memento: complete T-101 database schema setup"
---
## [2025-01-15T14:35:00] Tick #012 (continued, tasks_this_tick: 2/2)
- **Task**: T-102 [MODULE:auth] Implement JWT token generation
- **Status**: â
SUCCESS
- **Verify Output**: `PASS` (exit code 0)
- **Duration**: 3m41s
- **Files Modified**: src/auth/jwt.ts (+67 -0), tests/auth/jwt.test.ts (+34 -0)
- **Diff Size**: 101 lines
- **Git Commit**: `b8e2d1f` â "memento: complete T-102 JWT token generation"
---
## [2025-01-15T14:40:00] Tick #013
- **Task**: T-201 [MODULE:auth] Connect auth middleware to database
- **Status**: â FAILED (retry 2/3)
- **Verify Output**: `TypeError: pool.query is not a function` (exit code 1)
- **Duration**: 4m52s
- **Error Analysis**: DB module exports `pool` but middleware imports `connection`. Interface mismatch.
- **Files Modified**: (rolled back)
- **Git Commit**: (none â rollback)
---
## [2025-01-15T14:45:00] Tick #014
- **Task**: T-201 [MODULE:auth] Connect auth middleware to database
- **Status**: ð« BLOCKED (retry 3/3 â max_retries exceeded)
- **Verify Output**: Same error as Tick #013
- **Error Analysis**: Recurring interface mismatch. Likely needs Architect to update MODULE:database exports or redefine task scope.
- **Escalation**: â ïž NEEDS ARCHITECT ATTENTION
- **Files Modified**: (rolled back)
---
```
### 3.4 HUMAN_NOTES.md â äººç±»æ¹æ³šéé
> Dashboard 颿¿åå
¥æ€æä»¶ãTick Worker æ¯æ¬¡å¯åšæ¶æ£æ¥ãArchitect ä¹äŒè¯»åã
```markdown
# HUMAN NOTES
<!-- æ ŒåŒïŒæ¯æ¡æ¹æ³šåžŠæ¶éŽæ³åç®æ ïŒglobal / å
·äœ Task IDïŒ -->
<!-- Worker æ§è¡å®çžå
³æ¹æ³šåïŒå° [NOTE] æ¹äžº [NOTE:READ] -->
<!-- Architect å€çå®åå¯åœæ¡£å°åºéšç Archive åº -->
## Active Notes
### [NOTE] 2025-01-15T15:00:00 â T-201
æ¹çš Redis å session ååšèäžæ¯ PostgreSQLãè¿æ¥é
眮åèé¡¹ç®æ ¹ç®åœç redis.confã
### [NOTE] 2025-01-15T15:10:00 â global
æå Phase 3 çææä»»å¡ïŒç Phase 2 å
šéšçš³å®å诎ã
### [NOTE:READ] 2025-01-15T14:00:00 â T-102
JWT secret ä»ç¯å¢åé `JWT_SECRET` 读åïŒå«ç¡¬çŒç ã
---
## Archive
<!-- Architect æå·²å€ççæ¹æ³šç§»å°è¿é -->
```
---
## åãTick è°åºŠåŒæè§è
### 4.1 任塿Ÿåç®æ³
Tick Worker 鿥忧è¡ä»¥äžé»èŸïŒ
```
1. 读å MASTER_PLAN.md ç Meta åº
- åŠæ tick_mode != "auto"ïŒåäžè¡ "Tick skipped: mode={mode}" å° TICK_STATUS.mdïŒéåº
2. 读å HUMAN_NOTES.md
- çŒåææ [NOTE]ïŒé [NOTE:READ]ïŒæ¡ç®ïŒæ target åç»å€çš
3. æ Phase é¡ºåºæ«æïŒ
FOR each Phase:
a. æ£æ¥ depends æ¡ä»¶
- äŸèµç Phase å
æ¯åŠææä»»å¡éœæ¯ [x] æ [-]ïŒ
- åŠææ [ ] æ [~] æ [!]ïŒå该 Phase äžå¯è¿å
¥ïŒè·³è¿
b. åšåœå Phase å
æ«æä»»å¡ïŒ
- è·³è¿ [x] [!] [-] [~]
- å¯¹äº [ ]ïŒæ£æ¥ retries < max_retries
- åŠæ parallel: falseïŒåªå第äžäžªç¬Šåæ¡ä»¶ç [ ]
- åŠæ parallel: trueïŒå第äžäžªç¬Šåæ¡ä»¶ç [ ]ïŒå Worker åºæ¯ïŒ
c. æŸå°ç®æ ä»»å¡åïŒbreak
4. åŠææ²¡ææŸå°ä»»äœå¯æ§è¡ä»»å¡ïŒ
- æ£æ¥æ¯åŠææä»»å¡éœæ¯ [x] æ [-] â å "ð ALL TASKS COMPLETE" å° TICK_STATUS.md
- æ£æ¥æ¯åŠååš [!] é»å¡ â å "â ïž PIPELINE BLOCKED" å° TICK_STATUS.md
- éåº
5. å°ç®æ 任塿 记䞺 [~]ïŒæ§è¡äžïŒ
6. æ§è¡ä»»å¡ïŒè¯Šè§ 4.2ïŒ
7. tasks_completed_this_tick++
åŠæ tasks_completed_this_tick < max_tasks_per_tick äžå©äœä»»å¡ estimate åçïŒ
åå°æ¥éª€ 3 ç»§ç»æŸå
åŠåéåº
```
### 4.2 å任塿§è¡æµçš
```
1. 读åä»»å¡ç context_files å衚
- éè¿ PROJECT_MAP.md ç解暡åäžäžæ
- å 蜜 context_files äžå£°æçæä»¶å
容
- æ£æ¥æ¯åŠæé对该 Task ID ç HUMAN_NOTESïŒåŠæïŒçº³å
¥äžäžæ
2. æ§è¡å®é
å·¥äœ
- éµåŸªéè¡çºªåŸïŒè§ç¬¬äºèïŒ
- çæç²Ÿç¡® diffïŒäžåå
šæä»¶èŠå
3. è¿è¡ guard_files æ£æ¥
- diff äžæ¯åŠè§Šåäº guard_files å衚äžçæä»¶ïŒ
- åŠææ¯ â èªåšåæ» â æ 记倱莥 â åå å "guard file violation"
4. è¿è¡ diff size æ£æ¥
- 忬¡ä¿®æ¹æ¯åŠè¶
è¿ 200 è¡ïŒïŒå¯é
眮ïŒ
- åŠææ¯ â èªåšåæ» â æ 记倱莥 â åå å "diff too large, possible full-file rewrite"
5. è¿è¡ verify åœä»€
- æè· stdout/stderr å exit code
- Exit Code 0 â SUCCESS
- Exit Code != 0 â FAILED
6. åç»æå° TICK_STATUS.md
7. åŠæ SUCCESSïŒ
- 任塿 è®° [ ] â [x]
- retries ä¿æäžå
- git add + git commitïŒmessage æ ŒåŒïŒ`memento: complete {TASK_ID} {ç®è¿°}`ïŒ
8. åŠæ FAILEDïŒ
- åæ»æææä»¶ä¿®æ¹ïŒgit checkout æå€ä»œæ¢å€ïŒ
- retries += 1
- ä»»å¡ä¿æ [ ]ïŒæž
é€ [~]
- åŠæ retries >= max_retriesïŒ
- æ è®° [!]
- TICK_STATUS äžæ·»å "â ïž NEEDS ARCHITECT ATTENTION"
```
### 4.3 å¹¶åå®å
š
åœ parallel Phase äžå¯èœæå€äžª Worker å¹¶è¡æ¶ïŒé«çº§åºæ¯ïŒïŒ
- `[~]` æ è®°å
åœç®æé ââ Worker æŸå任塿¶å
æ `[~]`ïŒå
¶ä» Worker çå° `[~]` 就跳è¿
- åŠææ£æµå° `[~]` æ è®°è¶
è¿ 15 åéæªæŽæ°ïŒWorker å¯èœåŽ©æºïŒïŒå°å
¶é眮䞺 `[ ]`
- åš MVP é¶æ®µïŒå»ºè®®å Worker äž²è¡æ§è¡ïŒå¹¶åäœäžºæªæ¥æ©å±
---
## äºãéè¡çºªåŸ (Execution Sandbox)
äœäžºäžäžªè¢« Memento å€éç Tick WorkerïŒäœ **å¿
é¡»**éµåŸªïŒ
### çºªåŸ 1ïŒé²çåºçº¿ (Surgical Edits Only)
- â 䞥çŠèŸåºå®æŽæä»¶å
å®¹èŠæ±èŠå
- â
å¿
é¡»éè¿ç²Ÿåå®äœå·¥å
·è¿è¡å¢éä¿®æ¹
- 硬纊æïŒdiff size guard äŒç©ç黿è¶
倧修æ¹
### çºªåŸ 2ïŒæç»èå
éªç® (Evidence-Based Audit)
- â äžè®žåšèäžæš¡æè¿è¡ç¶å宣称"åºè¯¥æ²¡é®é¢"
- â
è· verify åœä»€ççå®éåºç
- 没æ `Exit Code 0`ïŒäžè®žæ `[x]`
### çºªåŸ 3ïŒäžèŠéé»ç©ºèœ¬ (No Silent Ghosting)
- â éå°é®é¢äžè®žæ²é»éåº
- â
ææ»äº¡åå ãé误æ¥å¿ãåæå®æŽåå
¥ `TICK_STATUS.md`
- 塿»äºå°±å€§å£°ååºæ¥ïŒè®© Architect çå°
### çºªåŸ 4ïŒæªå®èŸ¹ç (Stay in Your Lane)
- â äžè®žä¿®æ¹ guard_files äžçæä»¶
- â äžè®žä¿®æ¹ MASTER_PLAN.md çä»»å¡å®ä¹ïŒåªèœæ¹ checkbox ç¶æå retriesïŒ
- â äžè®žä¿®æ¹ PROJECT_MAP.md
- â
åªèœè¯»å context_files äžå£°æçæä»¶ + TICK_STATUS.md
### çºªåŸ 5ïŒååæäº€ (Atomic Commits)
- æ¯å®æäžäžªä»»å¡ïŒç«å³ `git commit`
- æ¯å€±èŽ¥äžäžªä»»å¡ïŒç«å³ `git checkout` åæ»
- ç¡®ä¿ä»»ææ¶å» `git log` éœæ¯å¹²åçãå¯è¿œæº¯ç
---
## å
ãDashboard 颿¿è®Ÿè®¡
### 6.1 讟计ç念
Dashboard æ¯äººç±»äž Memento æµæ°Žçº¿ä¹éŽç**åŒæ¥äº€äºçé¢**ãäžæ¯å®æ¶è倩ïŒèæ¯**çèšæ¿ + çæ§å°**ã人类äžéèŠäžçŽç¯çïŒäœæåŒå°±èœåš 5 ç§å
ç¥éäžåã
### 6.2 颿¿åžå±
```
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â ð§ Agent Memento Dashboard [ProjectName] â
â Status: â RUNNING Uptime: 2h 35m Next tick: 2m 14s â
â ââââââââââââââââââââ ââââââââââââââââââââââââââââââââââââ â
â â Controls â â Progress â â
â â â â â â
â â [â¶ Resume] â â âââââââââââââââââââââ 23/47 â â
â â [âž Pause ] â â Phase 1 ââââââââââââ 100% â â
â â [â¹ Stop ] â â Phase 2 ââââââââââââ 67% â â
â â â â Phase 3 ââââââââââââ 0% â â
â â Tick interval: â â â â
â â [5] min ⌠â â Blocked: 2 â ïž â â
â â â â Est. remaining: ~1h 20m â â
â ââââââââââââââââââââ ââââââââââââââââââââââââââââââââââââ â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â Task List Filter: All â
â â â
â â â
T-101 [database] Setup PostgreSQL schema 2m18s â
â â â
T-102 [auth] JWT token generation 3m41s â
â â ð« T-201 [auth] Connect auth to DB BLOCKED â
â â ââ retries: 3/3 · "Interface mismatch" â
â â ââ ð¬ [Add Note] â
â â ⬠T-202 [auth] Password hashing waiting â
â â ⬠T-301 [docs] Generate API docs Phase 3 â
â â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â Tick Timeline Latest first â
â â â
â â 14:45 Tick #014 · T-201 · ð« BLOCKED â
â â â "Interface mismatch â needs Architect attention" â
â â â [View Full Log] â
â â â â
â â 14:40 Tick #013 · T-201 · â FAILED (retry 2/3) â
â â â "TypeError: pool.query is not a function" â
â â â [View Full Log] â
â â â â
â â 14:35 Tick #012 · T-101 + T-102 · â
â
â
â â â 2 tasks completed in 5m59s â
â â â [View Full Log] [View Diff] â
â â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â ð Notes â
â â â
â â âââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â â Target: [T-201 âŒ] or [global âŒ] â â
â â â â â
â â â æ¹çš Redis å session ååšïŒè¿æ¥é
çœ®è§ redis.conf â â
â â â â â
â â â [Send Note ð€] â â
â â âââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â â
â â Active Notes: â
â â ⢠15:10 â global: "æå Phase 3..." â³ pending â
â â ⢠15:00 â T-201: "æ¹çš Redis..." â³ pending â
â â ⢠14:00 â T-102: "JWT_SECRET ç¯å¢åé..." â
read â
â â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
```
### 6.3 颿¿åèœè§è
#### æ§å¶åº (Controls)
| æäœ | è¡äžº |
|------|------|
| Resume | å° `MASTER_PLAN.md` ç `tick_mode` æ¹äžº `auto` |
| Pause | å° `tick_mode` æ¹äžº `paused`ïŒåœå Tick æ§è¡å®ååæ¢ïŒ |
| Stop | å° `tick_mode` æ¹äžº `stopped`ïŒå»ºè®®åæ¶ç§»é€ crontabïŒ |
| Tick interval | ä¿®æ¹ crontab çæ§è¡é¢ç |
#### è¿åºŠåº (Progress)
- æ°æ®æºïŒè§£æ `MASTER_PLAN.md` çææ checkbox ç¶æ
- 宿¶è®¡ç®å Phase 宿çŸåæ¯
- åºäºå·²å®æä»»å¡çå¹³åèæ¶ à å©äœä»»å¡æ°ïŒäŒ°ç®å©äœæ¶éŽ
#### ä»»å¡å衚 (Task List)
- æ°æ®æºïŒ`MASTER_PLAN.md`
- æ¯äžªä»»å¡å¯å±åŒæ¥çïŒæè¿äžæ¬¡æ§è¡ç»æãé误信æ¯ãéè¯æ¬¡æ°
- æ¯æè¿æ»€ïŒAll / Pending / Completed / Blocked
- æ¯äžªä»»å¡ææ `[Add Note]` æé®ïŒå¿«ééå¯¹è¯¥ä»»å¡æ·»å æ¹æ³š
- æ¯ææåšæäœïŒ
- 对 `[!]` ä»»å¡ç¹å» `[Reset Retries]` â å° retries é眮䞺 0ïŒç¶ææ¹å `[ ]`
- 对任å¡ç¹å» `[Skip]` â æ 记䞺 `[-]`
#### æ¶éŽçº¿ (Tick Timeline)
- æ°æ®æºïŒ`TICK_STATUS.md`
- ååºå±ç€ºæ¯äžª Tick çæ§è¡æèŠ
- å¯å±åŒæ¥ç宿޿¥å¿ïŒéŸæ¥å° `logs/tick_*.log`ïŒ
- 坿¥ç该 Tick ç Git diff
#### æ¹æ³šåº (Notes)
- åå
¥ç®æ ïŒ`HUMAN_NOTES.md`
- æ¯æéæ© targetïŒglobal æå
·äœ Task IDïŒ
- æŸç€ºææ Active Notes åå
¶ç¶æïŒpending / readïŒ
- Read åç notes èªåšæå äœäžå é€
### 6.4 颿¿ææ¯å»ºè®®
- **蜻éäŒå
**ïŒçº¯éæé¡µé¢ + æä»¶ç³»ç»èœ®è¯¢ïŒæ¯ 5~10s 读å Markdown æä»¶ïŒå³å¯
- æ°æ®å±ïŒçŽæ¥ parse Markdown æä»¶ïŒäžéèŠæ°æ®åº
- å¯éæ¹æ¡ AïŒæ¬å° HTTP serverïŒPython/NodeïŒïŒserve äžäžª SPAïŒéè¿ API 读å Markdown æä»¶
- å¯éæ¹æ¡ BïŒTerminal UIïŒblessed/inkïŒïŒäžçŠ»åŒç»ç«¯
---
## äžãé误æ¢å€äžèªææºå¶
### 7.1 åä»»å¡å€±èŽ¥ â èªåšéè¯
```
倱莥 â retries++ â ä¿æ [ ] â äžäžª Tick éè¯
â
retries >= max_retries
â
æ è®° [!] â åå
¥ TICK_STATUS "NEEDS ARCHITECT ATTENTION"
â
è·³è¿è¯¥ä»»å¡ïŒç»§ç»æ§è¡åç»å¯æ§è¡ä»»å¡
```
### 7.2 Phase é»å¡ â æºèœè·³èœ¬
```
Phase 2 äž T-201 被æ è®° [!]
â
Phase 2 depends æªå®å
šæ»¡è¶³ïŒååšé [x]/[-] çä»»å¡ïŒ
â
Phase 3 æ æ³å¯åš
â
åŠæ Phase 2 äžè¿æå
¶ä» [ ] ä»»å¡ â ç»§ç»æ§è¡å®ä»¬
åŠæ Phase 2 ææä»»å¡éœæ¯ [x]/[-]/[!] â æŽæ¡æµæ°Žçº¿ BLOCKED
â
TICK_STATUS: "â ïž PIPELINE BLOCKED â Phase 2 has unresolved [!] tasks"
```
### 7.3 Worker åŽ©æº â é²è
æ£æµ
- åŠæ `[~]` æ è®°ååšè¶
è¿ 15 åéïŒå¯é
眮ïŒïŒäžäžäžª Tick Worker å°ïŒ
- é眮该任å¡äžº `[ ]`
- åš TICK_STATUS äžè®°åœ "Stale [~] detected on {TASK_ID}, reset to [ ]"
- åŠæååšæªæäº€çæä»¶ä¿®æ¹ïŒæ§è¡ `git checkout` æž
ç
### 7.4 å
šå±çæ
åšä»¥äžæ
åµäžèªåšæåæµæ°Žçº¿ïŒ`tick_mode â paused`ïŒïŒ
- è¿ç» 5 䞪 Tick å
šéšå€±èŽ¥ïŒæ äžæ¬¡ SUCCESSïŒ
- é»å¡ä»»å¡æ°è¶
è¿æ»ä»»å¡æ°ç 30%
- ç£ç空éŽäžè¶³ / git æäœåŒåžž
åš TICK_STATUS äžåå
¥ïŒ`ðŽ CIRCUIT BREAKER TRIGGERED â reason: {reason}`
---
## å
«ãArchitect å·¥äœè§è
åœ Main Agent å€äº Architect ææ¶ïŒäžäººç±»çŽæ¥å¯¹è¯ç Session äžïŒïŒéµåŸªä»¥äžè§èïŒ
### 8.1 å建计å
1. äžäººç±»è®šè®ºé¡¹ç®éæ±ïŒçè§£å
šè²
2. 讟计暡åååïŒåå
¥ `PROJECT_MAP.md`
3. å°éæ±å解䞺ååä»»å¡ïŒåå
¥ `MASTER_PLAN.md`
4. æ¯äžªä»»å¡å¿
é¡»æ `verify` åœä»€ ââ **没æéªè¯åœä»€çä»»å¡äžé
ååš**
5. åçåå PhaseïŒå£°æ parallel å depends
### 8.2 çæ§äžè°æŽ
1. å®æè¯»å `TICK_STATUS.md`ïŒå¯ç±äººç±»è§ŠåïŒæåšå¯¹è¯äžäž»åšæ¥çïŒ
2. å¯¹äº `[!]` é»å¡ä»»å¡ïŒ
- åæå€±èŽ¥åå
- ä¿®æ¹ä»»å¡å®ä¹ïŒè°æŽ verifyãcontext_filesãæååä»»å¡ïŒ
- æä¿®æ¹ PROJECT_MAPïŒæŽæ°æ¥å£å®ä¹ïŒ
- é眮 retries 䞺 0ïŒç¶ææ¹å `[ ]`
3. å¯¹äº `HUMAN_NOTES.md` äžçæ¹æ³šïŒ
- 读åå¹¶çè§£
- å°æ¹æ³šèœ¬å䞺 MASTER_PLAN çå
·äœä¿®æ¹
- å€çå®ååœæ¡£
### 8.3 计ååæŽåå
- æ°å¢ä»»å¡ïŒè¿œå å°åéç PhaseïŒä¿æ ID å¯äž
- å é€ä»»å¡ïŒæ è®° `[-]` 并泚éåå ïŒäžèŠççå æè¡
- æåä»»å¡ïŒå°å任塿 è®° `[-] (æå䞺 T-XXX, T-XXY)`ïŒæ°å¢åä»»å¡
- éæ PhaseïŒæŽæ° depends å
³ç³»ïŒç¡®ä¿ DAG æ ç¯
---
## ä¹ãåå§åäžéšçœ²
### 9.1 åå§ååœä»€
```bash
bash skills/agent-memento/scripts/init_memento.sh <ProjectName>
```
è¯¥èæ¬æ§è¡ïŒ
1. åšé¡¹ç®ç®åœäžå建 `docs/` ç®åœ
2. çæ `MASTER_PLAN.md` æš¡æ¿ïŒå« Meta åºåç€ºäŸ PhaseïŒ
3. çæ `PROJECT_MAP.md` æš¡æ¿
4. çæ `TICK_STATUS.md`ïŒç©ºïŒ
5. çæ `HUMAN_NOTES.md`ïŒç©ºïŒ
6. å建 `logs/` ç®åœ
7. çæ `scripts/memento_tick.sh` ââ Tick Worker çå
¥å£èæ¬
8. çæ `.memento_ignore`ïŒæé€ `node_modules/`, `.git/`, `logs/` çïŒ
9. çæ `scripts/tick_worker_system_prompt.md` ââ æ³šå
¥ç» Worker çå
šå¥çºªåŸæ³åå Output è§èã
10. çæ `.memento_cleanignore`ïŒä¿æ€ `node_modules/`, `.env`, `vendor/` çïŒ
11. èŸåºæç€ºïŒâ请å°ä»¥äžè¡æ·»å å° crontab 以å¯åšèªåšæ§è¡â
### 9.1.1 Tick Worker System Prompt æš¡æ¿ (tick_worker_system_prompt.md)
ä»¥äžæ¯ `init_memento.sh` åºçæç `scripts/tick_worker_system_prompt.md` ç宿Žå
容ïŒ
```markdown
# Memento Tick Worker â System Prompt
You are a Memento Tick Worker: a short-lived, stateless, disciplined execution agent.
You have no memory of previous ticks. You start fresh every time.
## Your Lifecycle (execute in this exact order)
1. Read `docs/MASTER_PLAN.md`. Parse the Meta section for configuration.
2. Read `docs/HUMAN_NOTES.md`. Note any `[NOTE]` entries (ignore `[NOTE:READ]`).
3. Scan Phases in order. For each Phase:
- Check `depends`: all tasks in depended Phase must be `[x]` or `[-]`.
- Find the first task marked `[ ]` with `retries < max_retries`.
4. If no executable task found:
- If all tasks are `[x]`/`[-]`: write "ð ALL TASKS COMPLETE" to TICK_STATUS.md.
- If any `[!]` exists: write "â ïž PIPELINE BLOCKED" to TICK_STATUS.md.
- Exit.
5. Mark the target task `[~]` in MASTER_PLAN.md.
6. Read `docs/PROJECT_MAP.md` for module context.
7. Load ONLY the files listed in the task's `context_files`.
8. If there are `[NOTE]` entries targeting this task ID or `global`, incorporate them.
9. Perform the work using surgical, targeted edits. NEVER output a full file.
10. Verify:
- Check: did you modify any file listed in `guard_files`? If yes â rollback â fail.
- Check: is your total diff > `max_diff_lines`? If yes â rollback â fail.
- Run the task's `verify` command. Capture exit code, stdout, stderr.
11. Write a TICK_STATUS.md entry (format below).
12. If verify exit code == 0:
- Mark task `[x]`. Run `git add -A && git commit -m "memento: complete {TASK_ID} {description}"`.
- If `tasks_completed_this_tick < max_tasks_per_tick`, go to step 3 for next task.
13. If verify exit code != 0:
- Rollback: `git checkout -- .`
- Increment `retries` in MASTER_PLAN.md.
- If `retries >= max_retries`: mark task `[!]`, add "â ïž NEEDS ARCHITECT ATTENTION" to status.
- Clear `[~]` back to `[ ]` (or `[!]`).
14. Exit.
## TICK_STATUS.md Entry Format
## [{timestamp}] Tick #{tick_number}
- **Task**: {TASK_ID} [MODULE:{module}] {description}
- **Status**: â
SUCCESS | â FAILED (retry {n}/{max}) | ð« BLOCKED
- **Verify Output**: {first 5 lines of stdout/stderr} (exit code {n})
- **Duration**: {time}
- **Error Analysis**: {your diagnosis of what went wrong â FAILED/BLOCKED only}
- **Files Modified**: {file (+lines -lines)} | (rolled back)
- **Diff Size**: {total lines changed}
- **Git Commit**: {hash} â "{message}" | (none â rollback)
- **Outputs**: {key interfaces/exports created â SUCCESS only, optional but encouraged}
## Iron Disciplines (violation = immediate failure)
1. **SURGICAL EDITS ONLY**: Never output a complete file. Use precise, targeted modifications.
2. **EVIDENCE-BASED**: Run `verify`. No exit code 0 = no `[x]`. No exceptions.
3. **NO SILENT GHOSTING**: If stuck, write full error + analysis to TICK_STATUS.md. Never exit silently.
4. **STAY IN YOUR LANE**: Only modify files in `context_files`. Never touch `guard_files`. Never edit task definitions in MASTER_PLAN.md (only checkbox state + retries). Never edit PROJECT_MAP.md.
5. **ATOMIC COMMITS**: `git commit` on success. `git checkout` on failure. Always.
## What You Are NOT
- You are NOT an architect. Do not redesign, re-plan, or question the task definition.
- You are NOT creative. Execute exactly what is specified.
- You are NOT persistent. After this tick, you will cease to exist.
```
### 9.2 Tick å
¥å£èæ¬æš¡æ¿ (memento_tick.sh)
```bash
#!/usr/bin/env bash
set -euo pipefail
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
PLAN="$PROJECT_DIR/docs/MASTER_PLAN.md"
STATUS="$PROJECT_DIR/docs/TICK_STATUS.md"
LOG_DIR="$PROJECT_DIR/logs"
TIMESTAMP=$(date +%Y-%m-%dT%H:%M:%S)
TICK_LOG="$LOG_DIR/tick_${TIMESTAMP}.log"
# é²æèœŠïŒç¡®ä¿åäžæ¶éŽåªæäžäžª Tick Worker è¿è¡
LOCK_FILE="$PROJECT_DIR/.memento.lock"
exec 200>"$LOCK_FILE"
if ! flock -n 200; then
echo "[$TIMESTAMP] Tick skipped: previous tick still running" >> "$STATUS"
exit 0
fi
# æ£æ¥ tick_mode
TICK_MODE=$(grep -oP 'tick_mode:\s*\K\w+' "$PLAN" || echo "stopped")
if [[ "$TICK_MODE" != "auto" ]]; then
echo "[$TIMESTAMP] Tick skipped: mode=$TICK_MODE" >> "$STATUS"
exit 0
fi
# è°çš LLM Agent æ§è¡ Tick
SYSTEM_PROMPT="$(cat "$PROJECT_DIR/scripts/tick_worker_system_prompt.md")"
openclaw agent \
--system-prompt "$SYSTEM_PROMPT" \
--prompt "Read $PLAN, find the first executable task, complete it following the Memento Tick Worker protocol. Write results to $STATUS." \
--context-files "$PLAN" "$PROJECT_DIR/docs/PROJECT_MAP.md" "$PROJECT_DIR/docs/HUMAN_NOTES.md" \
2>&1 | tee "$TICK_LOG"
# åå€çïŒäžé¶æ®µé²çæž
ç
cd "$PROJECT_DIR"
if [[ -n $(git status --porcelain) ]]; then
echo "[$TIMESTAMP] WARNING: Dirty workspace detected. Running 3-phase cleanup." >> "$STATUS"
# Phase 1: æ¢å€å·²è¿œèžªæä»¶
git checkout -- .
# Phase 2: æž
çæªè¿œèžªæä»¶ïŒæé€ä¿æ€å衚ïŒ
if [[ -f ".memento_cleanignore" ]]; then
git clean -fd --exclude-from=.memento_cleanignore
else
git clean -fd
fi
# Phase 3: å
åºââåŠæè¿æ¯èçïŒçŽ§æ¥ stash
if [[ -n $(git status --porcelain) ]]; then
git stash --include-untracked -m "memento-emergency-stash-$TIMESTAMP"
echo "[$TIMESTAMP] CRITICAL: Emergency stash created. Manual inspection required." >> "$STATUS"
fi
fi
# æ¥å¿èœ®èœ¬
MAX_ENTRIES=$(grep -oP 'status_max_entries:\s*\K\d+' "$PLAN" || echo "50")
CURRENT_ENTRIES=$(grep -c '^\## \[' "$STATUS" || true)
if [[ $CURRENT_ENTRIES -gt $MAX_ENTRIES ]]; then
ARCHIVE_DIR="$PROJECT_DIR/logs/status_archive"
mkdir -p "$ARCHIVE_DIR"
mv "$STATUS" "$ARCHIVE_DIR/TICK_STATUS_$(date +%Y%m%d_%H%M%S).md"
echo "# TICK STATUS LOG" > "$STATUS"
echo "" >> "$STATUS"
echo "<!-- Rotated at $TIMESTAMP. Previous entries archived. -->" >> "$STATUS"
fi
# åèŠæ£æµ
BLOCKED_COUNT=$(grep -c '\[!\]' "$PLAN" || true)
CIRCUIT_BROKEN=$(grep -c 'CIRCUIT BREAKER' "$STATUS" || true)
if [[ $BLOCKED_COUNT -gt 0 || $CIRCUIT_BROKEN -gt 0 ]]; then
cat > "$PROJECT_DIR/.memento_alert" << EOF_INNER
timestamp: $TIMESTAMP
blocked_tasks: $BLOCKED_COUNT
circuit_breaker: $([[ $CIRCUIT_BROKEN -gt 0 ]] && echo "TRIGGERED" || echo "OK")
message: Pipeline needs attention. $BLOCKED_COUNT task(s) blocked.
EOF_INNER
fi
# åŠæäžåæ£åžžäžä¹åæåèŠïŒæž
é€åèŠ
if [[ $BLOCKED_COUNT -eq 0 && $CIRCUIT_BROKEN -eq 0 && -f "$PROJECT_DIR/.memento_alert" ]]; then
rm -f "$PROJECT_DIR/.memento_alert"
fi
```
### 9.3 Cron é
眮
```bash
# æ¯ 5 åéæ§è¡äžæ¬¡
*/5 * * * * /path/to/project/scripts/memento_tick.sh >> /path/to/project/logs/cron.log 2>&1
```
---
## åã宿Žå·¥äœæµç€ºäŸ
```
人类ïŒ"ææ³åäžäžªåžŠçšæ·ç³»ç»ç REST API"
â
âŒ
ArchitectïŒäž» SessionïŒïŒ
ââ äžäººç±»è®šè®ºç¡®è®€ïŒPostgreSQL + JWT + Express
ââ åå
¥ PROJECT_MAP.mdïŒæš¡åååïŒ
ââ åå
¥ MASTER_PLAN.mdïŒ15 䞪任å¡ïŒ3 䞪 PhaseïŒ
ââ "计å已就绪ïŒè¿è¡ init èæ¬åæ·»å crontab å³å¯å¯åš"
â
âŒ
äººç±»ïŒæ·»å crontabïŒåŒå§å·ææº
â
âŒ
Tick #001 â T-101 æ°æ®åºåå§å â â
Tick #001 â T-102 JWT æš¡å â â
ïŒåäž Tick å
è¿ç»å®æ 2 䞪快任å¡ïŒ
Tick #002 â T-103 å¯ç ååž â â
Tick #003 â T-201 è¿æ¥äžéŽä»¶ â â (retry 1/3)
Tick #004 â T-201 â â (retry 2/3)
Tick #005 â T-201 â ð« BLOCKED
â
âŒ
人类æåŒ DashboardïŒçå° T-201 é»å¡
ââ åš Notes åºåïŒ"å«çš pg-pool äºïŒçŽæ¥çš prisma"
ââ ç»§ç»å·ææº
â
âŒ
ArchitectïŒè¯»å HUMAN_NOTES + TICK_STATUSïŒïŒ
ââ æŽæ° PROJECT_MAP.mdïŒMODULE:database æ¹äžº PrismaïŒ
ââ ä¿®æ¹ T-201 ç context_files å verify
ââ æ°å¢ T-105 "å®è£
å¹¶é
眮 Prisma"ïŒæå
¥ Phase 1ïŒ
ââ é眮 T-201 retries â 0ïŒç¶æ [!] â [ ]
ââ åœæ¡£ HUMAN_NOTES äžçæ¹æ³š
â
âŒ
Tick #006 â T-105 å®è£
Prisma â â
Tick #007 â T-201 è¿æ¥äžéŽä»¶ïŒPrisma çïŒâ â
Tick #008 â T-202 ... â â
â
... æç»æšè¿ ...
â
âŒ
Tick #031 â ð ALL TASKS COMPLETE
â
âŒ
人类æåŒ DashboardïŒ"åŠïŒåå®äºã" ç§»é€ crontabã
```
---
## Security & Transparency
### Data Access â Exactly What Is Read
- Reads `<project-dir>/docs/MASTER_PLAN.md` to determine the current task
- Reads `<project-dir>/docs/PROJECT_MAP.md` for project structure awareness
- Reads `<project-dir>/docs/HUMAN_NOTES.md` for human annotations
- Reads source code files listed in each task's `context_files` only
### Data Written
- Creates project scaffolding (`MASTER_PLAN.md`, `PROJECT_MAP.md`, `TICK_STATUS.md`, `HUMAN_NOTES.md`, `memento_tick.sh`)
- Updates checkbox states in `MASTER_PLAN.md` (Tick Worker: only `[ ]`â`[x]`/`[!]`/`[~]`)
- Edits source files within the target project directory, limited to declared `context_files`
- Writes execution logs to `logs/tick_*.log`
- Creates git commits for successful task completions
### Hard Safety Guards
- **Diff size limit**: Rejects changes > 200 lines per task (configurable)
- **Guard files**: Physically prevents modification of declared protected files
- **Auto-rollback**: Failed tasks are rolled back via `git checkout`
- **Circuit breaker**: Auto-pauses pipeline on sustained failures
### Persistence & Autonomous Scheduling
- The `init_memento.sh` script generates a bash script intended to be run via `cron`
- The user must manually add this to their crontab to enable autonomous execution
- Stop at any time by removing the crontab entry or setting `tick_mode: stopped`
### Credentials
- Operates entirely locally
- Relies on `openclaw agent` with the system's existing LLM configurations
- No new keys are requested or stored
### Network Access
- No outbound network access by framework scripts
- Network access may occur only when user-defined `verify` commands require it (e.g., `npm install`)
```
---
## éåœïŒæä»¶ç»ææ»è§
```
<project>/
âââ docs/
â âââ MASTER_PLAN.md # å¯äžççžæº
â âââ PROJECT_MAP.md # 项ç®è®€ç¥å°åŸ
â âââ TICK_STATUS.md # æ§è¡ç¶ææµæ°ŽèŽŠ
â âââ HUMAN_NOTES.md # äººç±»æ¹æ³šéé
âââ logs/
â âââ cron.log # cron è°åºŠæ¥å¿
â âââ tick_2025-01-15T14:35:00.log
â âââ tick_2025-01-15T14:40:00.log
âââ scripts/
â âââ memento_tick.sh # Tick Worker å
¥å£
âââ .memento_ignore # äžäžææé€è§å
âââ src/ # å®é
项ç®ä»£ç
âââ ...
```don't have the plugin yet? install it then click "run inline in claude" again.