Agent skill
rem-reflect
The local experience loop: once a day, turn this machine's own Claude Code and Codex sessions into human-gated skill changes and lessons.
From sno-ai/sno-station-skills · 31 skill entries · 264 · pushed 2026-10-08
What it does when it runs
The local experience loop: once a day, turn this machine's own Claude Code and Codex sessions into human-gated skill changes and lessons. Run, review with accept/reject/tbd, recall at session start.
Automated analysis of the skill and the 81 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- shellwrites files
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/sno-ai/sno-station-skills.git /tmp/sno-station-skills git -C /tmp/sno-station-skills sparse-checkout set "skills/R-recursive-self-improvement/rem-reflect/skill" mkdir -p ~/.claude/skills/rem-reflect cp -R "/tmp/sno-station-skills/skills/R-recursive-self-improvement/rem-reflect/skill/." ~/.claude/skills/rem-reflect/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from sno-ai/sno-station-skills/blob/0451ca25ab9c70aac62162becbec9a4e1e936d56/skills/R-recursive-self-improvement/rem-reflect/skill/SKILL.md, which is licensed APACHE-2.0 (repository). 1,537 words, 4 headings.
rem-reflect — the local experience loop
Before you use it. Sno Station sets the sharing level when it installs, by mode:
fullforagent-nativeandrem-enhanced,metadata-onlyforlocal-first; it never overwrites a choice you already made. Atfull, this tool sends the text of your Claude Code and Codex sessions and the full text of every installed skill to Sno's cloud, and it copies your own Claude and Codex login files into its private store to label sessions. Inlocal-firstnothing is sent to Sno, but the text of a few sessions a night still goes to your own Claude Code or Codex account when this tool asks it for lessons. "What a run reads, copies and uploads" below lists everything. Turn uploading off at any time withsno station consent off.
rem-reflect reads this machine's Claude Code and Codex sessions once a day. When the Sno Station
settings select agent-native or rem-enhanced, each session's own CLI (on the
host's default model) conservatively decides keep/drop and labels its outcome. Each completed run
is sent through sno rem judge; that command permits session and skill uploads only at full consent.
Only rem-enhanced uses the returned judgments, experience pages, skill proposals and lessons
in its report and local store. agent-native keeps its local report and saves returned links
for delivering later user verdicts. local-first sends nothing: each night it asks the session's own CLI
about the few sessions with the most failures and owner corrections, and stores the lessons and at most one
skill reminder per harness that it can quote verbatim from the session, for you to accept or reject.
Local adoption still waits for the owner (here, you: the person who owns the machine and its skills).
What a run reads, copies and uploads. A run reads the session transcripts under ~/.claude/projects and ~/.codex/sessions (the first run looks back seven days, later runs continue where the last stopped), Claude's history.jsonl, every installed SKILL.md under ~/.claude/skills and ~/.codex/skills, and each session's git origin URL. It keeps a locally redacted copy of what it reads in its own store (~/.sno/experience, or $REM_REFLECT_STORE). To label sessions with your own CLI, it copies ~/.claude/.credentials.json and ~/.codex/auth.json (mode 0600, refreshed every run, nothing else from those directories) into <store>/.loop-home/, and the labeling turns send the rendered session to your own Claude or Codex account. Only in agent-native or rem-enhanced with consent full does it upload to Sno's cloud: the kept session text (common secrets such as API keys, bearer tokens and private keys are pattern-redacted first, best effort), tool-call targets and error excerpts, the project id (the normalized git remote, or a hash of the directory when there is none), and the complete text of every installed SKILL.md. Consent off or metadata-only uploads none of it. When no consent file exists yet, installation announces this boundary and selects metadata-only for local-first, full for agent-native and rem-enhanced; change it any time with sno station consent off|metadata-only|full.
The program is TypeScript run directly by Node; it needs Node 22.6 or newer on PATH as
node, the sno CLI from Sno Station (consent, settings and the cloud calls go through it) and the session's own Claude Code or Codex CLI. The sno heartbeat
command, when installed, can schedule the daily run. Without a scheduler the commands still work manually and
status reports that the loop is not armed. If node is older, install a current Node and
retry; nothing here downloads or bundles a runtime.
Commands
sno rem-reflect run— harvest recent session versions and, inagent-nativeorrem-enhanced, persist one conservative local decision per session and send the completed run throughsno rem judge. That command rejects session and skill uploads unless consent is full. Onlyrem-enhancedwrites returned cited pages, eligible lessons and warranted skill proposals into the local store and uses their judgments in the report.agent-nativekeeps the local report.local-firstuploads nothing; for up to three sessions per harness a night it asks that session's own CLI for one lesson and stores each answer whose quotes occur verbatim in the session as a page, a listed lesson and, for a lapse in using an installed skill it read, one staged reminder proposal; the report lists them with their accept commands, and a session is asked about once. A missing settings file finishes a no-upload day naming the reason. A failed or rejected send is logged with the run id and leaves the local day successful; the saved request can be sent on the next daily run. Held human verdicts are retried at the next entry even when today's reflection already succeeded.sno rem-reflect run --trigger timer|manual— records what started the run; the scheduled daily job passestimer(see Owner actions), a hand-typed run defaults tomanual.sno rem-reflect run --now <timestamp>— use a specified timestamp for a directly invoked acceptance run; the scheduled command remainssno rem-reflect run --trigger timer.sno rem-reflect accept|reject|tbd <id>— apply the owner's decision locally to a staged skill proposal (<run-id>/<harness>) or listed lesson (L-<page-id>), then send its linked cloud judgment verdict inagent-nativeandrem-enhancedthroughsno rem verdict, whose full-consent check may reject it.local-firstsends nothing. A failed send is logged with the judgment id and remains pending without changing the local verdict or its successful result.sno rem-reflect accept <lesson-id> --all-projectsor--this-project— the owner's override of the layer the cloud gave a lesson: all of the owner's projects, or only the project it was learned in. A plain accept keeps the cloud's user-wide or project layer; a skill lesson changesSKILL.mdonly when promoted to all projects.sno rem-reflect recall --agent <kind>— run by the harness session-start hook; prints, for each recallable lesson of the session's project plus user-wide lessons, its trigger and advice, independent of agent kind, and one line naming how to read one in full. A lesson is recallable when the owner accepted it, or when it is listed and its cloud verification accepted it; a rejected lesson never is.sno rem-reflect recall --agent <kind> --first-message— run by the harness prompt hook on a session's first prompt only; asks the cloud which one recallable lesson fits that message and prints its trigger and advice. It sends the message only when the first-message setting is on and consent is full, and never blocks the prompt.sno rem-reflect lesson <lesson-id> --session <id> --agent <kind> --cwd <dir>— print one recallable lesson in full.sno rem-reflect status— print the last run's status and whether the daily job is armed; exits non-zero when the job is stale, failed, or not armed.sno rem-reflect install-hooks --print— print the session-start and first-prompt hook entries for the owner to install (the program never writes those files itself).
How proposals are classified
The cloud puts each finding in one of two classes. SKILL_DEFECT means the skill's own text is
wrong or missing something, so the proposal patches the body of that SKILL.md. EXECUTION_LAPSE
means the skill was right and the agent did not follow it, so the proposal adds one short line to
the skill's reminders block: the region between <!-- reminders:start --> and
<!-- reminders:end --> at the end of a SKILL.md, which is empty until such a line is accepted
and has a size cap.
Owner actions
Set these up once. The program never edits these files itself.
-
Arm the daily run. Register the once-a-day job with
sno heartbeat:sno heartbeat --interval 24h --max-hours 0 --label rem-reflect -- sno rem-reflect run --trigger timer -
Install the session-start and first-prompt hooks. Run
sno rem-reflect install-hooks --printand merge the Claude fragment into~/.claude/settings.jsonand the Codex fragment into~/.codex/hooks.json. Codex runs itsSessionStarthook only after you approve it once in an interactive session. -
Allow the recall detail command. Permit
sno rem-reflect lessonin the harness so a session can read a listed lesson in full from the recall index. -
Check the Sno Station settings.
sno setupwrites~/.sno/settings.json(or$SNO_PROFILE_DIR/settings.json). Its currentmodecontrols daily sharing. ThemodelCallsrows select local labeling and first-prompt lookup.R5runs Local First lesson generation on the host and is off in the other modes; the published older table without R5 uses that same default. Its prompt is served bysno skills rem-reflect-local-writerfrom the CLI binary, not a public skill file:R2labels sessions on each session's own CLI with the host's default model,R3names the nightly upload andR4the first-prompt lookup. Daily runs and verdicts share bymode: bothagent-nativeandrem-enhancedcall the Sno cloud throughsno rem; those commands enforce full consent. Onlyrem-enhanceduses the cloud judgments.R4still needs its cell to besno-gpuand consentfull. WithR2off, sessions upload with an unknown local outcome. A missing settings file sends nothing and names the file; there is no default mode. -
Control upload.
sno station consentshows the local choice. Onlyfullpermits session/skill uploads, the first-prompt lookup and held verdicts; installation never overwrites an existing choice.
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
- labeler.md
- labeler.schema.json
- local-settings.json
- local-writer.schema.json
- proposal.schema.json
- render.json
- signals.json
- text.json
- adopt.test.ts
- adopt.ts
- backend.ts
- calls.ts
- catalogue-cloud.test.ts
- catalogue.ts
- chunk.ts
- cloud-apply.test.ts
- cloud-batch.test.ts
- cloud-day.test.ts
- cloud-verdict.test.ts
- cloud-wait.test.ts
- cloud.ts
- config.ts
- credential-copy.test.ts
- evidence.ts
- first-message.test.ts
- harvest.test.ts
- harvest.ts
- identity.test.ts
- identity.ts
- installed-roots.test.ts
- journey-adopt-lesson.test.ts
- journey-ops.test.ts
- labeler.test.ts
- labeler.ts
- ledger.ts
- lessons.ts
- local-filter.test.ts
- local-first-output.test.ts
- local-settings.ts
- local-writer.ts
- model-json.ts
- no-network.test.ts
- observe.ts
- page-journey.test.ts
- pages.test.ts
- pages.ts
- proposer-loop.test.ts
- proposer-validate.test.ts
- proposer.ts
- recall-hook.test.ts
- recall.test.ts
- recall.ts
- reflect.test.ts
- reflect.ts
- rem-reflect
- rem-reflect.ts
- render-chunk.test.ts
- render.ts
- report.ts
- run-status.test.ts
- sampling.test.ts
- sampling.ts
- claude
- codex
- shim-core.cjs
- sno
- journey-e2e.sh
- journey.mjs
- observe-journey.mjs
- run-selftest.sh
- spawn-python.mjs
- selftest-guard.test.ts
- session.test.ts
- session.ts
- signal-local.test.ts
- skill-impact.test.ts
- station-settings.test.ts
- store-memory.test.ts
- store.ts
- test-helpers.ts
- text.ts
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- content-reflect by Abhipaddy8 · 19
Need help setting it up?
This page tells you what rem-reflect does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.