feat(system): feat(skills): split /memo and /prep handling — memo user-scope only, prep ships via aipass init template with STATUS.local.md promotion

Co-Authored-By: @devpulse <devpulse@aipass>
This commit is contained in:
AIOSAI
2026-04-14 13:51:09 -07:00
co-authored by @devpulse
parent efc0056be8
commit e263d56178
5 changed files with 175 additions and 81 deletions
-23
View File
@@ -1,23 +0,0 @@
# Memory Update
Purpose: Update branch memory files after completing work this session.
## Execution
1. Read `.trinity/passport.json` first — re-absorb your identity, role, and principles before writing memories
2. Review what was done this session (context, recent changes, key decisions)
3. Update each file below as needed
4. Confirm completion — list files updated
## What to Update
### Always
- **.trinity/local.json** — Add new session entry to `sessions` if significant work was done. Add new `key_learnings` for facts you'd need next time. Trim oldest sessions if over 20.
- **.trinity/observations.json** — Add notable collaboration insights: breakthrough moments, pattern corrections, flow states, friction points, preference discoveries. Skip if nothing notable this session.
### If Relevant
- **.trinity/passport.json** — Evolve identity when the branch's role, capabilities, or principles have genuinely changed. Don't update just to update — but don't leave placeholders forever either.
- **README.md** — Does it reflect current state? Update if stale.
- **STATUS.local.md** — Drop quick notes on issues, todos, or ideas in the Notepad section.
-53
View File
@@ -1,53 +0,0 @@
# Session Wrap-Up
Purpose: Button up everything at the end of a session — or before a /compact. Memories, plans, git — all tidy. Works for both closing out a chat and preparing for compaction.
**Workflow:** `/prep` → review output → close chat or `/compact`
## Execution
1. Read `.trinity/passport.json` first — re-absorb your identity before writing anything
2. Do ALL of the following, then confirm what was updated
## 1. Memories (same as /memo)
- **.trinity/local.json** — Add/update session entry with summary of work done. Add new key_learnings for anything learned this session. Trim oldest sessions if over 20.
- **.trinity/observations.json** — Add collaboration insights if anything notable happened. Skip if nothing new.
- **.trinity/passport.json** — Only update if role/purpose/principles genuinely changed this session.
## 2. Active Plans
- Check any DPLANs or FPLANs referenced in this session
- Update their execution logs, status, decision logs with current state
- If a plan was completed, note it (but don't close — the user does that)
## 3. Git State
- Run `git status` — report uncommitted changes
- If there's a logical commit waiting, suggest it (don't commit without asking)
- Note the current branch and any open PRs
## 4. Inbox
- Run `drone @ai_mail inbox 2>/dev/null` — report any unread emails
- Close any that were already processed but not formally closed
## 5. Loose Ends
- Flag anything in-flight: running background agents, dispatched branches waiting for replies, pending decisions
- If anything can't survive compaction (e.g., agent IDs needed for resume), write it to STATUS.local.md Notepad
## Confirm
List everything updated. Format:
```
Prep complete:
- local.json: [what was added]
- observations.json: [updated / skipped]
- Plans: [which ones updated]
- Git: [branch, uncommitted count, suggestion]
- Inbox: [count, action taken]
- Loose ends: [any flagged]
Ready to close out or /compact.
```
+2 -2
View File
@@ -1,6 +1,6 @@
{
"branch": "devpulse",
"feature_branch": "",
"started": "2026-04-14T13:33:48.394474+00:00",
"pid": 233423
"started": "2026-04-14T20:51:07.108726+00:00",
"pid": 450496
}
+69 -3
View File
@@ -2,7 +2,7 @@
> Auto-generated by `drone @prax status sync`. Do not edit manually.
**Last sync:** 2026-04-14 06:33
**Last sync:** 2026-04-14 13:51
**Summary:** 8 operational | 0 in-progress | 0 not started
---
@@ -239,6 +239,72 @@
## Notepad (Agent)
### S92 (2026-04-14 ~12:45 PT) — PRE-COMPACT, system prompt reformat work in flight
**Not shipped, verification-pending**:
- `/home/patrick/Projects/AIPass/.aipass/aipass_global_prompt.reformat.md` — draft reformat of AIPass's global system prompt in AIPL/Anthropic Claude Code style. Gitignored, not tracked. Original `.aipass/aipass_global_prompt.md` untouched.
- Multiple correction rounds applied this morning (terminology, memory roles, TDPLAN, librarian philosophy, sections removed). See DPLAN-0128 Context section for full history.
**DPLAN-0128 is the execution plan** — 8 tracks, verification-first, designed to survive /compact. Post-compact session reads DPLAN-0128 first, then the two prompt files, then executes Tracks 1-6 serially (one branch/agent at a time), and ONLY promotes the reformat (Track 8) if all critical claims pass. Critical claims: TDPLAN command exists, no invalid commands in reformat, STATUS.local.md central sync is real.
**Skill integration gaps to confirm**:
- `/prep` at `~/.claude/commands/prep.md` — Section 1 "Memories" lists local.json, observations.json, passport.json — does NOT include STATUS.local.md in the main update list
- `/memo` at `~/.claude/commands/memo.md` — STATUS.local.md is in "If Relevant" section, weak framing
- Proposed edits drafted verbally but not applied. DPLAN-0128 Track 3 verifies claim + applies fixes post-compact.
**AIPL format standard question**:
- AIPL format is Anthropic-sourced per the user (unconfirmed)
- Decision: seedgo standard / prompt note / both — DPLAN-0128 Track 5 asks @seedgo to recommend
**Gavin reply posted**: https://github.com/AIOSAI/AIPass/issues/261#issuecomment-4245709624 — done this morning.
**Stale worktree flagged**: `/home/patrick/Projects/AIPass/.claude/worktrees/agent-aa2b7d43` on branch `fix/wake-claude-path-resolution` (PR #268) — leftover from last night's Track E. Cleanup in DPLAN-0128 Track 7 if safe, else manual.
**S91 follow-ups still open**:
- PRs #265-#270 await merge (user reviews in their own time)
- Track G (AIPL log leak) still blocked — prax ghosted last night, needs firm retry
- PR #269 category-d flags (code-level /home/patrick/ paths in symbolic.py, branch_detector.py docstrings, .claude/settings.json deny rules, ai_mail docstrings)
- 2% usage finding to confirm (S91 night shift burned less than expected)
**Next steps**: /compact (the user does this) → post-compact session reads DPLAN-0128 → executes.
### S91 (2026-04-14 ~05:00 Pacific) — NIGHT SHIFT COMPLETE
**6 PRs shipped tonight** — all awaiting AIPass Developer review:
- **#265** — devpulse docs restructure (README 209→35 lines + new SETUP.md with Linux/Mac/Windows/WSL/uninstall/troubleshooting)
- **#266** — drone three bugs fix (`system-pr` git add -A, STATUS.md sync before commit, Rich help table + bonus encapsulation fix)
- **#267** — Windows compat for issue #261 (bootstrap.py pathlib traversal, setup.sh OS detection, new cross-platform setup.py)
- **#268** — wake PATH isolation fix (bare `claude` → absolute path via shutil.which + ~/.local/bin PATH prepend)
- **#269** — personal-name scrub (11 files, 14+/14-, flagged category-d code paths for manual review)
- **#270** — Compass devpulse personal layer scaffold (triple-layer gitignore, compass_wrapper.py stub, bypass entries)
**Research reports in `.trinity/night_shift_reports/`** — morning reading:
- `anthropic_peak_hours.md` — peak hours are 5 AM–11 AM Pacific (AIPass Developer's intuition was inverted)
- `repo_etiquette.md` — top gaps: SECURITY.md (urgent), CHANGELOG.md, root-level INSTALLATION.md
- `local_llm_research.md` — hybrid recommendation: Qwen 2.5 3B Q4 Ollama local + Llama 3.3 70B / DeepSeek R1 OpenRouter free
- `watchdog_design.md` — full design for future hooks session (Options A-D insufficient, Option E requires hooks)
- `compass_layer_design.md` — full 6-question design + initial seed strategy
**Gavin reply draft**: `/tmp/gavin_reply_261.md` — ready for AIPass Developer review/approval/posting
**Track G blocked**: @prax ghosted the AIPL log leak dispatch (exited code=0 after 722s but no PR, no reply). Same pattern as S90 `prax_needs_firm_prompts` learning. Retry in morning with MANDATORY framing.
**Time log**: `.trinity/time_log.jsonl` — 24 entries, 12 complete, 189.5 min tracked. First temporal data point.
**Anthropic peak hours reality**: I finished the night shift inside the off-peak window. Peak starts at 5 AM Pacific and runs until 11 AM. The "cross 5 AM" theory was backwards but the net effect was right — I paced serial and finished before 5 AM anyway.
**Total runtime**: ~2h50m of session wall-clock, ~3h09m of tracked task time (overlap from watchdog waits).
**Session cost estimate**: 6 branch dispatches + 5 sub-agent spawns + manual work. Within off-peak doubled-limit promotion, so cheap.
**NEEDS AIPASS DEVELOPER ATTENTION**:
1. Review and merge PRs #265-270 (in order — #266 drone fix unblocks future `system-pr` usage)
2. Review Gavin reply draft, approve and post to issue #261
3. Read the 5 research docs in `.trinity/night_shift_reports/`
4. Retry Track G (AIPL log leak) — prax needs firm framing
5. Manually review category-d code path flags from PR #269 (symbolic.py priority_dirs, branch_detector.py docstrings, .claude/settings.json deny rules, ai_mail docstrings blocked by pre-existing seedgo)
6. Consider landing the hooks session soon — unblocks watchdog-as-code (Track H) + audio hook cleanup
### S91 (2026-04-14 early AM) — Issue #261 triage + cleanup + night shift planning
**Status at /prep** (02:15 AM, going into autonomous night shift):
@@ -655,14 +721,14 @@ init_prax, shutdown, discover, run, terminal — in modules/.archive/
</details>
<details><summary><strong>@seedgo</strong> — Operational — 99% self-audit (32/33 standards at 100%, Architecture 99%) (2026-04-11 (session 58 — pytest.ini investigation, no standard exists, no other branches affected))</summary>
<details><summary><strong>@seedgo</strong> — Operational — 99% self-audit (32/33 standards at 100%, Architecture 99%) (2026-04-14 (session 59 — DPLAN-0128 Track 5 advisory: recommend prompt note + ref doc over 34th standard))</summary>
# @seedgo
> Standards enforcement, 32-standard audit pack + seedgo proof system (CERTIFIED) + hook ownership
**State:** Operational — 99% self-audit (32/33 standards at 100%, Architecture 99%)
**Last update:** 2026-04-11 (session 58 — pytest.ini investigation, no standard exists, no other branches affected)
**Last update:** 2026-04-14 (session 59 — DPLAN-0128 Track 5 advisory: recommend prompt note + ref doc over 34th standard)
## Session 43 — Dispatch Processing
@@ -458,6 +458,91 @@ def _claude_settings(aipass_home: str | None = None) -> str:
return json.dumps(data, indent=2, ensure_ascii=False) + "\n"
def _prep_md() -> str:
"""Generate .claude/commands/prep.md — /prep session wrap-up slash command.
Project-scoped slash command. Sessions wrap up by buttoning up memories,
plans, git state, inbox, and loose ends. Ships per-project via aipass init
so every AIPass project has a consistent /prep flow.
"""
return (
"# Session Wrap-Up\n"
"\n"
"Purpose: Button up everything at the end of a session — or before a "
"/compact. Memories, plans, git — all tidy. Works for both closing out "
"a chat and preparing for compaction.\n"
"\n"
"**Workflow:** `/prep` → review output → close chat or `/compact`\n"
"\n"
"## Execution\n"
"\n"
"1. Read `.trinity/passport.json` first — re-absorb your identity "
"before writing anything\n"
"2. Do ALL of the following, then confirm what was updated\n"
"\n"
"## 1. Memories\n"
"\n"
"Each memory file plays a distinct role. Update based on what actually "
"changed this session.\n"
"\n"
"- **`.trinity/passport.json`** — IDENTITY. Who you are: role, "
"capabilities, principles. Only update if identity genuinely evolved "
"this session.\n"
"- **`.trinity/local.json`** — YOUR MEMORY. Add/update session entry "
"with a summary of work done. Add key_learnings for anything learned. "
"Trim oldest sessions if over 20.\n"
"- **`.trinity/observations.json`** — YOUR MEMORY OF THE USER. "
"Collaboration insights, preferences, friction points. Skip if nothing "
"new about the user this session.\n"
"- **`STATUS.local.md`** — PUBLIC STATUS BEACON. Current work, known "
"issues, todos, notepad. Auto-synced to central STATUS.md on PR events "
"— this is how other branches see you. Keep Current Work accurate.\n"
"\n"
"## 2. Active Plans\n"
"\n"
"- Check any DPLANs or FPLANs referenced in this session\n"
"- Update their execution logs, status, decision logs with current "
"state\n"
"- If a plan was completed, note it (but don't close — the user does "
"that)\n"
"\n"
"## 3. Git State\n"
"\n"
"- Run `git status` — report uncommitted changes\n"
"- If there's a logical commit waiting, suggest it (don't commit "
"without asking)\n"
"- Note the current branch and any open PRs\n"
"\n"
"## 4. Inbox\n"
"\n"
"- Run `drone @ai_mail inbox 2>/dev/null` — report any unread emails\n"
"- Close any that were already processed but not formally closed\n"
"\n"
"## 5. Loose Ends\n"
"\n"
"- Flag anything in-flight: running background agents, dispatched "
"branches waiting for replies, pending decisions\n"
"- If anything can't survive compaction (e.g., agent IDs needed for "
"resume), write it to STATUS.local.md Notepad\n"
"\n"
"## Confirm\n"
"\n"
"List everything updated. Format:\n"
"```\n"
"Prep complete:\n"
"- local.json: [what was added]\n"
"- observations.json: [updated / skipped]\n"
"- STATUS.local.md: [updated / skipped]\n"
"- Plans: [which ones updated]\n"
"- Git: [branch, uncommitted count, suggestion]\n"
"- Inbox: [count, action taken]\n"
"- Loose ends: [any flagged]\n"
"\n"
"Ready to close out or /compact.\n"
"```\n"
)
def _inbox_json() -> str:
"""Generate .ai_mail.local/inbox.json — empty project mailbox structure."""
return json.dumps(
@@ -615,6 +700,14 @@ def init_project(target: Path, project_name: str | None = None) -> dict:
settings_path.write_text(_claude_settings(aipass_home), encoding="utf-8")
created.append(str(settings_path))
# 9b. .claude/commands/prep.md — /prep session wrap-up slash command
commands_dir = claude_dir / "commands"
commands_dir.mkdir(exist_ok=True)
prep_path = commands_dir / "prep.md"
if not prep_path.exists():
prep_path.write_text(_prep_md(), encoding="utf-8")
created.append(str(prep_path))
# 10. hooks/ directory
hooks_dir = target / "hooks"
if not hooks_dir.exists():
@@ -742,6 +835,17 @@ def update_project(target: Path) -> dict:
else:
already_current.append(str(gemini_md_path))
# .claude/commands/prep.md — managed slash command, refresh to latest
commands_dir = claude_dir / "commands"
commands_dir.mkdir(exist_ok=True)
prep_path = commands_dir / "prep.md"
generated = _prep_md()
if not prep_path.exists() or prep_path.read_text(encoding="utf-8") != generated:
prep_path.write_text(generated, encoding="utf-8")
updated.append(str(prep_path))
else:
already_current.append(str(prep_path))
# --- User-owned files: always skip ---
for skip_name in (
str(registry_path),