CSS Print
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Include a print stylesheet.
Writes the session final report to a file, then prints only the path and a one-line summary.
$ npx skills add cwinvestments/memstack --skill report -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install cwinvestments/memstack report --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/report .claude/skills/report && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "report" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/report into .claude/skills/report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/cwinvestments/memstack/tree/master/skills/reportType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add cwinvestments/memstack --skill report -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install cwinvestments/memstack report --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/report .agents/skills/report && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "report" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/report into .agents/skills/report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cwinvestments/memstack --skill report -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install cwinvestments/memstack report --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/report .cursor/skills/report && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "report" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/report into .cursor/skills/report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/cwinvestments/memstack.git --path skills/report--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add cwinvestments/memstack --skill report -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install cwinvestments/memstack report --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/report .gemini/skills/report && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "report" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/report into .gemini/skills/report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install cwinvestments/memstack reportInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add cwinvestments/memstack --skill report -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/report .github/skills/report && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "report" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/report into .github/skills/report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add cwinvestments/memstack --skill report -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install cwinvestments/memstack report --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/cwinvestments/memstack.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/report .opencode/skills/report && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "report" agent skill from https://github.com/cwinvestments/memstack/tree/master/skills/report into .opencode/skills/report/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "report", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
reportWrites the session final report to a file, then prints only the path and a one-line summary.
Report is an agent skill from cwinvestments/memstack. 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 MEMSTACKREPORTONTASKPROMPTS or MEMSTACKREPORTTRIGGERS. Dormant otherwise.
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Structured skill framework for Claude Code. 130 skills, persistent memory, TokenStack compression, localhost dashboard with 3-agent runner, real-time streaming, MCP tools. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 00370ce. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Report loads about 3.6k tokens when it runs. Until then it costs about 79 tokens; SKILL.md has 2,357 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from cwinvestments/memstack at commit 00370ce, republished under its MIT licence (© cwinvestments). 2,357 words, ~3,602 tokens.
.claude/skills/report/SKILL.md (or your agent's skills folder).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
<project> is the leaf folder name of the working directory. Not the repo
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.<YYYY-MM-DD> is today, local time.<HHMMSS> is the local wall clock time at the moment of writing: six
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.
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 two: the terminal scrolls away, while the file sits on disk and gets read later, or pasted into a ticket.
The last line states the session approximate context usage as shown on the status line, for example:
Context: approximately 62 percent of the window used at the time of writing.
A reader deciding whether to continue in this session or start a fresh one cannot see the status line the report was written from. One line tells them how much room is left.
The file path, and one line saying what the report covers. Nothing else.
The body has already been written down. Printing it a second time doubles the cost of the session final turn and buries the path the reader actually needs.
A session may amend its own report after writing it, when it has something material to add. A measurement that finished later, a correction to something the report stated, or a finding that arrived after the write. It amends the file at the path it recorded, wherever that path now is. It never writes a second file.
The rule that a report is written once ends at the moment the session learns something the report should have said. Before this, a session in that position had nowhere to put it: writing again was forbidden and correctly refused, and amending was not permitted, so the information reached the terminal and stopped there.
The amendment is appended under its own heading. The body above it is left exactly as it was:
AMENDMENT 15:02:11 local
The background build finished after the report was written: 41 seconds,
which is the number the body says was still pending.Appended rather than rewritten, because the reader may already have read the file. A rewritten body makes them read all of it again to find the sentence that changed; an appended section shows them what is new at a glance.
Never a second file. A second file is exactly the duplicate the gate was fixed to stop producing: the gate records the accepted report's path and answers later turns from that record, so an afterthought written to a fresh name leaves two reports for one request and leaves the reader to work out which one is current.
When the recorded path is inside a review subfolder of the report directory, move the amended file back to the top level once the amendment is written.
A file the reader has reviewed and filed away is unreviewed again the moment it changes. Filing is their signal that they are done with it, and they are not going to open it a second time, so an amendment left in the review folder is a change the reader never sees.
Move only the file this session wrote. Another session's report in the same folder is not this session's to move, however similarly it is named. The name is one report's identity; the shared prefix is every report this project filed today.
If a file of that name already sits at the top level, stop and report. Do not overwrite it, do not rename around it. The amendment is already safe in the file it was appended to, and two files carrying one name is a state somebody has to resolve by looking at both.
The terminal gets one line: the final path, and what the amendment added. Same reason as rule 6, and one more: the path may have changed, and a reader holding the old one needs to be told once rather than left to search.
A UserPromptSubmit hook records the request in .memstack/report-required.json
at the repository root, holding the session id, the request time, the expected
file name prefix, which trigger matched, and the prompt's first 80 characters
with whitespace collapsed. The last of those is what lets the block message name
the prompt that is waiting, which matters once a session can hold more than one
request. The Stop gate in scripts/verify.py reads that
marker and blocks with exit 2 until a file carrying the prefix exists with an
mtime after the request, in that directory or one level below it. The gate
records that file's path in the marker once it finds one, so a later Stop is
answered from the record rather than from another scan, and it does nothing at
all without a marker, so a session that was never asked for a report is never
gated for one.
| Gotcha | Why it matters |
|---|---|
| The suffix is a time, not a sequence number | Two sessions in one project on one day cannot collide on a second, and nothing has to be counted. What the filing convention breaks is no longer the name but the gate: a report is moved into a reviewed subfolder while the session is still open, the gate found an empty top level, blocked, and the session wrote a second copy of a report that had never gone missing. The gate now records the accepted file's path in the marker and scans one level of subfolders when that recorded path is gone, and its block message says which of the two happened. |
| A report is the session own claim about itself | It is testimony, not evidence. It never substitutes for a verify receipt: the receipt records what the check chain reported, the report records what the session says it did, and only one of those was produced by something other than the author. |
| The marker is keyed on the session id | A marker left by another session does not block this one, and a resumed session that receives a replayed hook still matches its own id. |
| The prefix follows the prompt, not the launch directory | This is a fixed defect, not a design note. The marker used to key on the directory the session was launched from while the file was named for the directory the prompt pointed at, so a correctly named report was rejected and a second file appeared under the other name. One request, two files. |
| A standing trigger is a per-machine decision | Nothing ships armed beyond the phrase. A prefix arms every prompt that will ever start that way, including the ones written months after whoever set the variable stopped thinking about it, which is why it is opt in and why the floor exists. |
| A report that only lists what passed is half a report | State what was skipped, what is pending, and what could not be verified. The reader is deciding what to do next, and a report that reads clean when it is not costs them the next session. |
| A background command can finish after the report is written | A command left running in the background wakes the session with its result long after the session looks finished, and the report it belongs in is already on disk, possibly already filed into a review folder. That result belongs in an amendment. Reported in the terminal alone it reaches nobody: the terminal is not what the reader reads, and the file they will read still says the measurement is pending. |
| Moving an amended report back to the top level does not un-satisfy the gate | The gate remembers the path it accepted, sees it is gone, and rescans; the amended file is at the top level with an mtime later than the request, so it is found and re-recorded. The move is safe to make, and the block that names a vanished report is for a report that is actually gone, not for one that came back up a level. |
MEMSTACK_REPORT_DIR when it is set, and
MEMSTACK_REPORT_ON_TASK_PROMPTS and MEMSTACK_REPORT_TRIGGERS when the
standing triggers are wanted.<report dir>/<project>-<YYYY-MM-DD>-<HHMMSS>.txt, plus one
path and one summary line in the terminal. An amendment adds a headed section
to that same file, moves it back to the top level when it was filed one level
down, and prints one more line naming the final path and what was added. Never
a second file.© cwinvestments, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/report of cwinvestments/memstack.
Open the folder on GitHubat commit 00370ce
Report next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Report this skillcwinvestments/memstack | 423 | — | ~3.6k | Automated safety check: Pass | MIT | |
| CSS Printthedaviddias/Front-End-Checklist | 74k | — | ~422 | Automated safety check: Pass | MIT | |
| Brand Kit Print Collateralsickn33/agentic-awesome-skills | 47k | 1 repos | ~6.4k | Automated safety check: Pass | MIT | |
| Finalize Agent Promptgithub/awesome-copilot | 40k | 1 repos | ~224 | Automated safety check: Pass | MIT | |
| Implementation Final Reviewopenai/openai-agents-python | 30k | — | ~2k | Automated safety check: Pass | MIT | |
| PrintfulAnil-matcha/awesome-muse-connectors | 1.3k | — | ~628 | Automated safety check: Pass | MIT |
thedaviddias/Front-End-Checklist
A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Include a print stylesheet.
sickn33/agentic-awesome-skills
Print collateral spec: item, finished and trim size, bleed, colour mode, stock and GSM, finish, safe margin, print method, quantity and unit cost.
github/awesome-copilot
Finalize prompt file using the role of an AI agent to polish the prompt for the end user.
openai/openai-agents-python
Review completed implementation changes before final verification.
Anil-matcha/awesome-muse-connectors
Read Printful products and orders, create orders and mockups.
udecode/plate
Finalization shortcut for Slate v2 Autoresearch. An agent skill from udecode/plate.
cwinvestments/memstack
A skill your agent uses when the user says 'SEO audit', 'site audit', 'check SEO', 'audit my site', 'SEO check', 'technical SEO', or is evaluating a website's search engine optimization health, meta…
cwinvestments/memstack
A skill your agent uses when the user says 'add schema', 'schema markup', 'JSON-LD', 'structured data', 'rich results', 'rich snippets', or is adding or fixing schema.org structured data for better…
cwinvestments/memstack
A skill your agent uses when the user says 'tokenstack', 'compression', 'token savings', 'proxy status', or asks about context window usage.
cwinvestments/memstack
A skill your agent uses when the user says 'save diary', 'log session', 'wrapping up', or at end of a productive session.
cwinvestments/memstack
A skill your agent uses when the user references past sessions, asks 'what did we do', 'do you remember', 'last session', 'recall', or 'continue from'.
cwinvestments/memstack
A skill your agent uses when the user says 'dispatch', 'send familiar', 'split task', or needs work split across parallel CC sessions.
Writes the session final report to a file, then prints only the path and a one-line summary. Report is an agent skill from cwinvestments/memstack. Writes the session final report to a file, then prints only the path and a one-line summary.
Report fits situations like: configured through MEMSTACKREPORTONTASKPROMPTS; MEMSTACKREPORTTRIGGERS.
Run `npx skills add cwinvestments/memstack --skill report -a claude-code`. Or copy the skill folder (skills/report in cwinvestments/memstack) into .claude/skills/report in your project. Claude Code loads it when a task matches its description.
Run `npx skills add cwinvestments/memstack --skill report -a codex`. Or copy the skill folder (skills/report in cwinvestments/memstack) into .agents/skills/report in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add cwinvestments/memstack --skill report -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/report, .gemini/skills/report, .github/skills/report and .opencode/skills/report in your project.
Going by SKILL.md and its folder, Report needs the command-line tools its instructions call (git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Report is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Report: CSS Print (thedaviddias/Front-End-Checklist, 74k stars), Brand Kit Print Collateral (sickn33/agentic-awesome-skills, 47k stars), Finalize Agent Prompt (github/awesome-copilot, 40k stars) and Implementation Final Review (openai/openai-agents-python, 30k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
cwinvestments (a GitHub user) maintains it in cwinvestments/memstack, which has 423 GitHub stars. The repository holds 87 skills in this directory. The repository was last updated on September 26, 2026.
Source: cwinvestments/memstack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.