api-integration
Use this skill when the user says 'API integration', 'connect APIs', 'sync data', 'data mapping', 'rate limiting', or needs…
Writes the session final report to a file, then prints only the path and a one-line summary. Fires when the prompt contains "Report per memstack:report", and also when the prompt begins with a standing trigger configured through MEMSTACK_REPORT_ON_TASK_PROMPTS or
$ npx -y skills add cwinvestments/memstack --skill report --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/reportContext preview
The summary Claude sees to decide when to auto-load this skill.
Writes the session final report to a file, then prints only the path and a one-line summary. Fires when the prompt contains "Report per memstack:report", and also when the prompt begins with a standing trigger configured through MEMSTACK_REPORT_ON_TASK_PROMPTS or
name: report description: 'Writes the session final report to a file, then prints only the path and a one-line summary. Fires when the prompt contains "Report per memstack:report", and also when the prompt begins with a standing trigger configured through MEMSTACK_REPORT_ON_TASK_PROMPTS or MEMSTACK_REPORT_TRIGGERS. Dormant otherwise.' version: 1.1.0
*The session states what it did, in a file, once, at the end.*
Output `Report: writing the session report...`, then follow the rules below.
| Context | Status | Priority | |---------|--------|----------| | **The prompt contains "Report per memstack:report"** | ACTIVE, write the file before finishing | P1 | | **The prompt's first non-blank line starts with a configured trigger** | ACTIVE, same requirement | P1 | | **The prompt matched a prefix trigger, but is under 40 characters** | DORMANT, see the floor below | n/a | | **The prompt asks for a summary, a recap or a status line** | DORMANT, answer in the terminal, no file | n/a | | **A long session ends and nobody asked for a report** | DORMANT, an unrequested file is litter | n/a | | **The prompt asks for a diary or a handoff** | DORMANT, that is Diary and Project, not this | n/a |
The phrase always arms, on every install, with nothing configured. It is a phrase rather than a keyword because "report" appears in ordinary prose constantly.
Two environment variables add standing triggers on top of it. Both are unset by default, so a shipped install arms on the phrase and on nothing else.
| Variable | Effect | |----------|--------| | `MEMSTACK_REPORT_ON_TASK_PROMPTS` | Set to `1`, arms any prompt whose first non-blank line starts with `Working directory:`. Any other value, including `0`, changes nothing. | | `MEMSTACK_REPORT_TRIGGERS` | Extra prefixes, semicolon separated, each matched against the first non-blank line. Surrounding spaces are trimmed, so `Task briefing:; Ticket:` configures two. |
`Working directory:` is separated out rather than left to the general list because it is the opening line of a dispatched task prompt, which is the shape this was built for, and because arming on it by default would file a report for a large share of every prompt anyone writes.
When either variable is configured, the SessionStart hook injects one sentence saying so. That sentence is the only announcement: a prompt carrying the phrase announces the requirement itself, so a default install is told nothing and pays nothing.
**A prompt under 40 characters does not arm a prefix trigger.** A standing prefix fires on "yes" and "commit" as readily as on a task, and a report about "commit" is noise filed under a real project name.
**The floor applies to prefix triggers only. The phrase is exempt and arms at any length.** A prompt consisting of nothing but `Report per memstack:report` is 26 characters and arms, because somebody typed the phrase on purpose and a short request is still a request. No one-word answer can contain the phrase, so the case the floor exists to stop is not a case the phrase can reach.
A later prompt that matches overwrites the marker, so each task prompt in a session owes its own report. The new marker carries a later request time than the file the previous prompt produced, so an earlier report cannot satisfy a later request.
`MEMSTACK_REPORT_DIR` when that variable is set and not empty, otherwise `~/.memstack/reports`. Create the directory if it is absent.
A report is a session artifact, not a project file. Writing it into the working tree puts it in front of `git status`, and then in front of `git add`, and a report is not something anyone meant to commit.
`<project>-<YYYY-MM-DD>-<HHMMSS>.txt`
name, not the remote name: the folder, so two checkouts of one repo do not overwrite each other. When the prompt's first non-blank line names a working directory, that path's leaf is the project, not the directory the session was launched from. The gate reads the same line and keys the marker the same way, so a session opened in one repo and pointed at another agrees with itself.
digits, 24 hour, zero padded. Read the clock when the file is about to be written, not when the work started.
The suffix is a clock reading rather than a sequence number because a sequence has to be derived from what is already filed, and that derivation is what kept failing. Reports move into a subfolder once they are reviewed, the directory the count was taken from empties out, and the next report restarts at `01` on top of a name that is still in use one folder down. A clock has no state to lose.
The **Write tool only**. Never a heredoc, never `echo`, never a shell redirection into a path.
On Windows the redirection operator is recognised before quote pairing is resolved, so one mis-paired quote anywhere in the command turns a redirect into a zero-byte file named after the fragment that followed it. This repository has collected four such files across three sessions, one of them from an arrow inside ordinary prose in a command that ran no code at all. The Write tool never touches a shell, so the hazard is not managed, it is absent.
not the first six characters of any of them. A fingerprint (`sha256`, first 8 characters) or a length answers "is it set" and "are these the same" without emitting the value.
The no-secrets rule applies to the file exactly as it applies to the terminal, and the file is the more dangerous of
The structured skill framework for Claude Code: 131 professional skills for deployment, security, databases, content, marketing, and more. Skills activate automatically when you need them. Say "deploy this to Railway" and the right skill loads on demand.
Use this skill when the user says 'API integration', 'connect APIs', 'sync data', 'data mapping', 'rate limiting', or needs…
Use this skill when the user says 'content pipeline', 'content automation', 'auto-publish', 'repurpose content', 'multi-platform…
Use this skill when the user says 'cron job', 'scheduled task', 'run every', 'cron expression', 'recurring job', or needs…
Use when the user says 'what MCP servers', 'find an MCP for', 'hosted MCP', 'list MCP servers', 'MCP catalog', 'available MCP…
Use this skill when the user says 'n8n workflow', 'build a workflow', 'automation workflow', 'connect services', or needs visual…
Use this skill when the user says 'webhook', 'webhook handler', 'webhook endpoint', 'receive events', 'HMAC verification',…