KeiSeiKit-1.0/_primitives/templates/sleep-trigger-prompt.md
Parfii-bot a4e667de10 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

114 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Nightly REM consolidation (KeiSeiKit v0.11 sleep-sync)
<!--
Template prompt. Render placeholders before pasting into Claude Code
`/schedule create`. The sleep-setup skill does this for you; this file
exists so power-users can customise the prompt before scheduling.
Placeholders:
{REPO_URL} — your memory-repo SSH URL (git@host:org/repo.git)
{UTC_CRON} — cron expression in UTC (sleep-setup converts local 03:00)
-->
Clone: {REPO_URL}
Branch: main
Time: 03:00 local (UTC cron: {UTC_CRON})
## Cycle order (v0.12.0+)
1. **Phase A — Incubation ("sleep on it")** — process user-submitted
tasks in `sync-repo/sleep-queue/`. See
`sleep-incubation-prompt.md` (shipped in the same `templates/` dir)
for the full spec. Phase A writes results to
`sync-repo/sleep-results/<uuid>.md` (plus optional intermediate
`<uuid>.partial.md` checkpoints) and commits at least once.
2. **Phase B — REM consolidation** (this document). Phase B analyses
new traces and commits its own `REM: consolidation <YYYY-MM-DD>`
commit. Normally two commits per night, one per phase.
If `sync-repo/sleep-queue/` is empty or missing, Phase A is a silent
no-op. Phase B runs regardless of Phase A outcome **except when Phase
A selected a `marathon: true` task** — in that case Phase B is
SKIPPED for the night so the marathon task owns the full window.
Phase B resumes the next night; a single skipped night does not lose
traces (they stay in `traces/` and will be consolidated on the next
run).
## Phase B — Task
1. Clone the memory repo shallow.
2. Identify NEW traces in `traces/` since the last consolidation by
comparing filenames against `reports/last-run.txt` (if the file is
missing, treat ALL traces as new on the first run).
3. For each new trace (JSONL, one event per line), extract:
- user prompts (role = "user", type = "message")
- tool calls (type = "tool_use", name + input summary)
- tool errors (is_error = true)
- session duration (first vs last timestamp)
4. Group events into topics via simple keyword matching on user prompts
(no ML, no embeddings — keyword co-occurrence ≥ 2 is enough).
5. Count recurring patterns: any tool-call sequence OR error class that
appears in ≥ 2 distinct sessions is a "cross-session pattern".
6. Write `reports/sleep-YYYY-MM-DD.md` with this structure:
```
# REM report — YYYY-MM-DD
Sessions analyzed: <count>
Total duration: <hh:mm>
## Top tool-call sequences (cross-session)
1. <seq> ×<count>
...
## Top error classes
1. <class> ×<count>
...
## Suggested rule/hook candidates (dry-run only)
- [ ] <name> — why (<E-grade>)
...
```
7. If there are ≥ 3 cross-session patterns, prepend a timestamped block
to `backlog.md`:
```
## YYYY-MM-DD — REM consolidation
- <pattern 1>
- <pattern 2>
- <pattern 3>
```
8. Write a single line to `reports/last-run.txt` with this run's
ISO-8601 UTC timestamp (overwrite, no append).
9. Stage, commit, push:
```
git add reports/ backlog.md
git commit -m "REM: consolidation $(date -I)"
git push
```
## Invariants
- Traces are append-only. Never delete or modify `traces/*.jsonl`.
- If nothing recurred this cycle, the report MUST still be written —
with body "no patterns this cycle" — so you can tell "ran and found
nothing" apart from "did not run".
- Never fabricate findings. If the analyzer outputs an empty list,
emit an empty report.
- Never paraphrase author's flagged content from the traces into the
report body. Install a project-local pre-commit gate on the
memory-repo if you want hard enforcement of that boundary.
- Success signal = commit pushed cleanly. Anything else is a failure
that surfaces to the user on the next `git pull`.
## Failure handling
- Clone fails → post an issue to the repo if possible; otherwise exit 1.
- Commit hook blocks → do NOT force-push. Write the failure reason to
`reports/sleep-YYYY-MM-DD.md` body and attempt a commit excluding the
offending file.
- Push fails → retry once with exponential backoff; on second failure,
leave local commit in place and exit 1 (next run will push).