agentleFS
linxulelinxule/carrel/skills/session-reflection/SKILL.md

session-reflection

Skill2 starsChanged 6 days agoMITView on GitHub

This skill should be used when a researcher wraps up a work session and wants a quick check-in on what worked and what didn't ('let's reflect', 'wrap up', 'what did we do today', '/carrel-reflect'), when the SessionEnd hook surfaces a reflection prompt, when issues from a session need to be captured to the friction log for later improvement, or when the researcher wants to share feedback with the plugin maintainer ('share my experience', 'generate feedback', '/carrel-feedback'). Distinct from research-partner (which engages with research content) — this skill is meta: reflection on the tool and workflow, not on the research itself.

3 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

12 rules. 0 are common, 9 are distinctive, and 3 are very specific to this project.

  • 0

    Common

    Most of the 3 edited versions we read keep these.

  • 9

    Distinctive

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Do not write to _meta/reflections/ directly — the CLI is the boundary.

    line 25
  2. Distinctive:

    If the researcher only answered one question, only that section gets filled.

    line 49
  3. Very specific:

    If the researcher reported a concrete issue (something broke, something was unclear, a workflow had unnecessary friction), also append to …

    line 53
  4. Distinctive:

    Don't double-log: if the issue is mentioned in the reflection, don't paste the same text into friction_log — just capture the structured …

    line 65
  5. Distinctive:

    Don't force it: If the researcher signals they want to leave, close out with thanks and let them go.

    line 70
  6. Distinctive:

    Don't ask all questions: if the first answer covers everything.

    line 71
  7. Distinctive:

    Be genuine, not formulaic: No script openings. No "as we wrap up our session today" framing.

    line 72
  8. Distinctive:

    If the researcher routinely declines the hook prompt, the prompt's value drops — note this pattern but don't act on it from inside the …

    line 79
  9. Very specific:

    Before calling the CLI, scan the source files (_meta/reflections/*.md, _meta/friction_log.md) and .carrel/environment.json for identifying …

    line 95
  10. Distinctive:

    Keep (do NOT redact):

    line 104
  11. Distinctive:

    If the redact list was created as a temporary file, remove it after the digest has been generated and reviewed.

    line 113
  12. Distinctive:

    Don't push. Sharing is the researcher's decision.

    line 121

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

session-reflection

A brief conversational check-in at the end of a work session. Captures what was useful, what was frustrating, and what the researcher wished they could do but couldn't. The CLI handles atomic appends to the dated reflect-log; this skill provides the conversational frame and decides what (if anything) flows into the friction log.

When to Use

  • End of a work session, especially when natural pauses appear ("ok, I'm done for today")
  • Researcher says "let's reflect", "wrap up", or "what did we do today"
  • The SessionEnd hook (session-reflect.js) surfaces a reflection prompt
  • Researcher reports a frustration mid-session that's worth capturing for the friction log even if they don't want to do a full reflection

Calling pattern

carrel vault reflect-log --append --from-stdin

The skill conducts the conversation, then pipes the structured reflection content via stdin. The CLI handles atomic append to _meta/reflections/reflection-YYYY-MM-DD.md (creating the file from _templates/reflection.md on first write of the day) and writes inside safe_path.safe_vault_join so the operation can't escape the vault root.

Do not write to _meta/reflections/ directly — the CLI is the boundary.

Conversational shape

This is a conversation, not a survey. Two or three questions is the target — fewer if one answer covers everything.

Open with whichever feels most natural given the session:

  • "What was most useful about today's session?"
  • "Was there anything frustrating or that didn't work well?"
  • "Anything you wished you could do but couldn't?"

Listen for what the answer hands you. If they lead with frustration, the "what worked" question may be redundant. If they're brief, don't probe — researchers who want to leave should be able to leave.

What ends up where

The reflection content goes through the CLI to _meta/reflections/reflection-YYYY-MM-DD.md. Map the conversation into the reflection template's sections:

  • What I Worked On — one or two sentences naming the session focus
  • What Went Well — direct answer to the "most useful" question
  • What Was Frustrating — direct answer to the "didn't work well" question; leave blank if nothing came up
  • Ideas for Next Time — captures the "wished you could" question
  • Open Questions — anything the researcher flagged as unresolved or worth returning to

If the researcher only answered one question, only that section gets filled. Empty sections are fine — the template is a scaffold, not a quota.

Friction log handoff

If the researcher reported a concrete issue (something broke, something was unclear, a workflow had unnecessary friction), also append to _meta/friction_log.md with a dated entry:

## YYYY-MM-DD
- **Issue**: [one-line description]
- **Context**: [what they were trying to do]
- **Workaround**: [what they did instead, or "none" if they gave up]
- **Status**: open

The friction log is what /carrel-feedback later anonymizes and digests for sharing with the plugin maintainer. Reflections capture sentiment; the friction log captures concrete improvement signal.

Don't double-log: if the issue is mentioned in the reflection, don't paste the same text into friction_log — just capture the structured version there.

Guidelines

  • Keep it under 2 minutes. Reflection has diminishing returns; the value is in the regular check-in, not the depth of any single one.
  • Don't force it. If the researcher signals they want to leave, close out with thanks and let them go. A skipped reflection is fine; a coerced one is worse than nothing.
  • Don't ask all questions if the first answer covers everything. One question with a real answer beats three with shrugs.
  • Be genuine, not formulaic. No script openings. No "as we wrap up our session today" framing. Match the register the researcher has been using.
  • Close warmly. Something like "Thanks — this helps the tool get better over time" lands better than a checklist confirmation.

Hook tie-in

The SessionEnd hook (hooks/session-reflect.js) reads session stats and surfaces a reflection prompt non-blockingly. When the hook fires, this skill is the right responder — the hook surfaces, the skill engages. The hook does not call the CLI directly; it prompts, and if the researcher engages, the skill conducts the conversation and pipes to carrel vault reflect-log.

If the researcher routinely declines the hook prompt, the prompt's value drops — note this pattern but don't act on it from inside the skill (frequency tuning belongs in hook configuration, not skill judgment).

Exporting a feedback digest

When the researcher wants to share their experience with the plugin maintainer ("generate feedback", "share my experience", /carrel-feedback), this skill builds the redact list from the same source files it writes to, then calls the CLI to produce the digest. The CLI applies the redactions and writes the dated file; the skill owns redact-list construction and the sharing handoff.

Calling pattern

carrel vault feedback export --redact-list <path>

The CLI reads reflections plus the friction and capability logs, applies the redactions from the list, and writes _meta/feedback-digest-YYYY-MM-DD.md. The skill's job is upstream (build the list, then preview with the researcher) and downstream (tell them where to send it).

Building the redact list

Before calling the CLI, scan the source files (_meta/reflections/*.md, _meta/friction_log.md) and .carrel/environment.json for identifying content. Write literal mappings with canonical ASCII original -> replacement, one rule per line. Bare terms mean term -> [REDACTED]; legacy Unicode original → replacement remains accepted. Comments and blank lines are ignored.

Always include:

  • Researcher's name (from environment.json → name) -> Researcher
  • Institution, when present at environment.json → preferences.institution, or detected in the source scan -> University
  • Specific research topics or project names mentioned in reflections → [research topic]
  • File names that reveal research content (e.g., dimaggio-isomorphism-1983.pdf) → generic descriptions like [paper]

Keep (do NOT redact):

  • Tool names (liteparse, mineru, defuddle, coli, etc.)
  • Error messages verbatim
  • Workflow descriptions and friction patterns
  • Carrel command names

The CLI applies literal case-insensitive rules longest-first and adds the profile name -> Researcher fail-safe when no explicit name rule exists. The skill still owns the sensitive-term scan and meaningful replacement choices. After export, review redactions_applied and zero_match_terms; a zero-match rule may indicate a typo or stale identifier.

If the redact list was created as a temporary file, remove it after the digest has been generated and reviewed; it contains the identifiers the digest is designed not to expose.

After the CLI writes

Show the researcher the digest path and offer a quick preview. Then surface the sharing options exactly once:

"The digest is at _meta/feedback-digest-YYYY-MM-DD.md. Copy the contents and email them to xule.lin@imperial.ac.uk, or share via LinkedIn."

Don't push. Sharing is the researcher's decision; the skill's contribution is making the digest easy to share if they want to.

What the digest is for

The digest closes the outer loop: researcher friction → plugin maintainer → next release. Reflections capture sentiment in the researcher's own voice; the friction log captures concrete issues; the digest anonymizes both into something shareable. If a researcher has been reflecting regularly, the digest is the natural way to contribute back without writing a separate report.

Related

  • CLI: carrel vault reflect-log --append --from-stdin (atomic append to dated reflection file); carrel vault feedback export --redact-list <path> (anonymized digest from reflections + friction log)
  • Commands: /carrel-reflect (thin wrapper for the reflection check-in); /carrel-feedback (thin wrapper for the digest export)
  • Hooks: session-reflect.js (SessionEnd; non-blocking prompt that hands off to this skill)
  • Templates: _templates/reflection.md (the per-day reflection scaffold the CLI writes into on first append)
  • Skills: self-improve (the capability log is the dev-team feedback channel; the friction log is the researcher-experience feedback channel — distinct surfaces, both feed plugin evolution); research-partner (the mirror synthesis reads the same reflections + friction log to surface patterns back to the researcher)

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.