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:
@@ -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.
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user