/session-reflection
Use when the user asks to reflect on a session or to compact it -- "reflexionemos sobre la sesión", "cerremos esto", "guardemos lo que aprendimos", "compactemos", "compacta", "let's reflect on this session", "wrap up this session", "compact the session" -- or when closing
Claude Code
$ npx -y skills add metraton/gaia --skill session-reflection --agent claude-code
Codex
$ npx skills add metraton/gaia --skill session-reflection -a codex -y
Cursor
$ npx skills add metraton/gaia --skill session-reflection -a cursor -y
Gemini CLI
$ npx skills add metraton/gaia --skill session-reflection -a gemini-cli -y
GitHub Copilot
$ npx skills add metraton/gaia --skill session-reflection -a github-copilot -y
OpenCode
$ npx skills add metraton/gaia --skill session-reflection -a opencode -y
Windsurf
$ npx skills add metraton/gaia --skill session-reflection -a windsurf -y
SKILL.md
session-reflection.SKILL.mdname: session-reflection
description: Use when the user asks to reflect on a session or to compact it -- "reflexionemos sobre la sesión", "cerremos esto", "guardemos lo que aprendimos", "compactemos", "compacta", "let's reflect on this session", "wrap up this session", "compact the session" -- or when closing substantial work: the orchestrator reconciles the session against memory and the coordination substrate (briefs/plans/tasks/approvals), curates and closes what it can decide on its own, and reports what changed. Compacting needs no reflection: asked to compact, it requests the compaction and may leave an optional hand note.
Session Reflection
Session reflection is everything the session lived, contrasted against what belongs to each project, until no loop is left dangling. It recovers the whole arc, reconciles it against the durable corpus in both directions, and leaves every item — settled or open — with an owner a later session can find.
Upstream are the transcript, the specialist contracts, and the injected digest. Downstream is memory curation: reflection ends when the corpus is correct. Compaction is a separate act: it is safe at any time and needs no reflection first, because the PreCompact hook rebuilds the session's in-flight state from the database (see "Compacting").
Process
1. **Recover the whole arc.** Scan from the session opening for accepted and rejected proposals, deferrals, closures, user corrections, and specialist reactions — recency is not weight, an early settled choice still stands. Include `cross_layer_impacts`, `open_gaps`, and `failure_report` findings even where the user never reacted: they are observations about Gaia, not conversational agreements. `reference.md` holds the full recovery pass. 2. **Reconcile in both directions.** For each initiative the session touched, read its live corpus — `gaia memory get-relevant --initiative=<key>` returns that whole pending set uncapped, with bodies — and ask: what did this session produce with no home yet, and what already-open pending did it close, advance, or invalidate? A topic search only answers whether your own phrasing has a row; the closure you owe is usually phrased in terms that predate the session that solved it. Read briefs, plans, tasks, and approvals the same way — a conversation cannot close an object the substrate still shows open. A session that produced any Gaia improvement touched `gaia_system` by definition, whatever project it was nominally working on — sweep it too. `reference.md` holds the reverse-sweep mechanics and the objective-state checks that verify a `SKIP`. 3. **Classify disjointly.** Separate settled decisions and learnings, genuinely open work, and Gaia improvements. A user correction any user would want is a Gaia improvement, not a settled preference of his: only his difference becomes his row. When closure is uncertain, classify as open; a lost pending costs more than an extra review. For anything about Gaia itself, `memory/SKILL.md`'s ownership test decides the initiative — `gaia_system` for an observed failure or friction, project-scoped `gaia` for a decision to build or change something. 4. **Give every item a home, and know what the home does.** The pending worklist that returns to the user each session selects `class=thread` with status `carry_forward` or `open` only — an `anchor` still reaches a dispatched agent as held knowledge, but never comes back as work. Filing live work as an anchor hides it; filing settled knowledge as a thread turns the worklist into noise. `SKIP` is a home only when you name the canonical object that owns the item — already-canonical work is referenced, never copied. 5. **Adjudicate against the exception boundary.** The boundary table lives in `memory/SKILL.md` ("Process" step 5) — this is a pointer to it, not a copy. Most operations are decided and executed directly; only the rows the boundary marks "ask first" or "veto" wait on the user. 6. **Run the curation, closures included.** Materialize the step 2 closures alongside the new rows; `reclassify` and `append` are non-mutative, so nothing but omission keeps a resolved thread open. A closing arc that passes the milestone test in `reference.md` uses `checkpoint`, one atomic write; an ordinary close does not. 7. **State the resume point.** One line naming what the next session picks up — a pointer, not a container: everything it names already has a row.
Working tables
These internal tables force one owner per item before curation; omit empty sections. `SAVE`, `APPEND`, `TRANSITION`, `LINK`, and `SKIP` are adjudicated by `memory`; a closure or graduation is a `TRANSITION` materialized as `reclassify`. `memory/reference.md` owns the exact forms.
What we settled
Accepted decisions, closures, and reusable learnings. Prefer `SKIP` naming the canonical object; `SAVE` only knowledge that must constrain a later choice.
| Item | Home | Operation | |---|---|---| | the decision, in the user's words | slug, commit, or brief/plan/task id | SAVE, APPEND, LINK, or SKIP |
Open work
One row per unresolved concern and per pending the sweep found resolved; the latter is a `TRANSITION`, never a silent omission.
| Item | Home | Operation | |---|---|---| | the concern, in the user's words | slug, brief/plan/task id, or initiative | SAVE, APPEND, TRANSITION, LINK, or SKIP |
What Gaia should improve
Symptom observable behavior, not diagnosis Component one precise owner Evidence observed proof Reproduction exact repeatable route, or unknown → feedback_<component>_<symptom> · type feedback · SAVE or APPEND
Work the evidence through before saving; `reference.md` owns field definitions and the `gaia_system` retrieval query.
Output
The user sees a post-curation report, one line per durable effect, not the working tables or raw verbs. Fla
Read more
name: session-reflection description: Use when the user asks to reflect on a session or to compact it -- "reflexionemos sobre la sesión", "cerremos esto", "guardemos lo que aprendimos", "compactemos", "compacta", "let's reflect on this session", "wrap up this session", "compact the session" -- or when closing substantial work: the orchestrator reconciles the session against memory and the coordination substrate (briefs/plans/tasks/approvals), curates and closes what it can decide on its own, and reports what changed. Compacting needs no reflection: asked to compact, it requests the compaction and may leave an optional hand note.
Session Reflection
Session reflection is everything the session lived, contrasted against what belongs to each project, until no loop is left dangling. It recovers the whole arc, reconciles it against the durable corpus in both directions, and leaves every item — settled or open — with an owner a later session can find.
Upstream are the transcript, the specialist contracts, and the injected digest. Downstream is memory curation: reflection ends when the corpus is correct. Compaction is a separate act: it is safe at any time and needs no reflection first, because the PreCompact hook rebuilds the session's in-flight state from the database (see "Compacting").
Process
1. **Recover the whole arc.** Scan from the session opening for accepted and rejected proposals, deferrals, closures, user corrections, and specialist reactions — recency is not weight, an early settled choice still stands. Include `cross_layer_impacts`, `open_gaps`, and `failure_report` findings even where the user never reacted: they are observations about Gaia, not conversational agreements. `reference.md` holds the full recovery pass. 2. **Reconcile in both directions.** For each initiative the session touched, read its live corpus — `gaia memory get-relevant --initiative=<key>` returns that whole pending set uncapped, with bodies — and ask: what did this session produce with no home yet, and what already-open pending did it close, advance, or invalidate? A topic search only answers whether your own phrasing has a row; the closure you owe is usually phrased in terms that predate the session that solved it. Read briefs, plans, tasks, and approvals the same way — a conversation cannot close an object the substrate still shows open. A session that produced any Gaia improvement touched `gaia_system` by definition, whatever project it was nominally working on — sweep it too. `reference.md` holds the reverse-sweep mechanics and the objective-state checks that verify a `SKIP`. 3. **Classify disjointly.** Separate settled decisions and learnings, genuinely open work, and Gaia improvements. A user correction any user would want is a Gaia improvement, not a settled preference of his: only his difference becomes his row. When closure is uncertain, classify as open; a lost pending costs more than an extra review. For anything about Gaia itself, `memory/SKILL.md`'s ownership test decides the initiative — `gaia_system` for an observed failure or friction, project-scoped `gaia` for a decision to build or change something. 4. **Give every item a home, and know what the home does.** The pending worklist that returns to the user each session selects `class=thread` with status `carry_forward` or `open` only — an `anchor` still reaches a dispatched agent as held knowledge, but never comes back as work. Filing live work as an anchor hides it; filing settled knowledge as a thread turns the worklist into noise. `SKIP` is a home only when you name the canonical object that owns the item — already-canonical work is referenced, never copied. 5. **Adjudicate against the exception boundary.** The boundary table lives in `memory/SKILL.md` ("Process" step 5) — this is a pointer to it, not a copy. Most operations are decided and executed directly; only the rows the boundary marks "ask first" or "veto" wait on the user. 6. **Run the curation, closures included.** Materialize the step 2 closures alongside the new rows; `reclassify` and `append` are non-mutative, so nothing but omission keeps a resolved thread open. A closing arc that passes the milestone test in `reference.md` uses `checkpoint`, one atomic write; an ordinary close does not. 7. **State the resume point.** One line naming what the next session picks up — a pointer, not a container: everything it names already has a row.
Working tables
These internal tables force one owner per item before curation; omit empty sections. `SAVE`, `APPEND`, `TRANSITION`, `LINK`, and `SKIP` are adjudicated by `memory`; a closure or graduation is a `TRANSITION` materialized as `reclassify`. `memory/reference.md` owns the exact forms.
What we settled
Accepted decisions, closures, and reusable learnings. Prefer `SKIP` naming the canonical object; `SAVE` only knowledge that must constrain a later choice.
| Item | Home | Operation | |---|---|---| | the decision, in the user's words | slug, commit, or brief/plan/task id | SAVE, APPEND, LINK, or SKIP |
Open work
One row per unresolved concern and per pending the sweep found resolved; the latter is a `TRANSITION`, never a silent omission.
| Item | Home | Operation | |---|---|---| | the concern, in the user's words | slug, brief/plan/task id, or initiative | SAVE, APPEND, TRANSITION, LINK, or SKIP |
What Gaia should improve
Symptom observable behavior, not diagnosis Component one precise owner Evidence observed proof Reproduction exact repeatable route, or unknown → feedback_<component>_<symptom> · type feedback · SAVE or APPEND
Work the evidence through before saving; `reference.md` owns field definitions and the `gaia_system` retrieval query.
Output
The user sees a post-curation report, one line per durable effect, not the working tables or raw verbs. Fla
Generative AI Interface for Agents. Specialist agents for Claude Code and OpenCode, with a memory that outlives the session and a consent gate on everything that changes state.
Other skills on gaia.
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about session-reflection.
- Which coding agents can use session-reflection?
- session-reflection installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

