Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/ericrisco/rsc-harness/cppnpx skills add ericrisco/rsc-harness --skill cppgit clone --depth 1 https://github.com/ericrisco/rsc-harnessWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00081 | $0.04218 |
| Opus 5 | $0.00041 | $0.02109 |
| Sonnet 5 | $0.00016 | $0.00844 |
| Haiku 4.5 | $0.00008 | $0.00422 |
Grade A, and why
cpp scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 303 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Modern C++
Write, review, modernize, build, and debug C++ the way the C++ Core Guidelines intend: RAII for every resource, ownership made explicit through smart pointers and values, no undefined behavior by construction, and a target-based CMake build proven clean under sanitizers.
Targets C++20/23 for production today. C++23 is ISO/IEC 14882:2024; WG21 froze C++26's technical content on 2026-03-28 (ISO publication follows) — adopt C++26 features only behind confirmed compiler support. Compiler matrix:
| Compiler | C++23 | C++26 | Flag |
|---|---|---|---|
| GCC | since 11 | since 14 (GCC 16.1 covers most of C++26) | -std=c++23 / -std=c++26 |
| Clang | 13–18 progressively | in progress (Clang 23 dev) | -std=c++23 / -std=c++2c |
| MSVC | latest | partial | /std:c++23 / /std:c++latest |
Delegate: borrow-checker, Result/Option, cargo, ownership-via-compiler ->
rust — C++ buys safety with discipline (RAII + smart pointers +
sanitizers); do not conflate the mechanisms. Language-agnostic threat modeling, authz,
OWASP-class review -> secure-coding; the C++-specific
memory/UB controls (bounds, lifetime, integer overflow, format-string, sanitizers) stay
here. Containerizing and shipping the binary -> deployment;
this skill stops at the CMake build + a sanitizer-CI note.
Decision rules
Apply these on every C++ edit:
- Rule of Zero first. Manage resources with members that already do it (
vector,string,unique_ptr); write no destructor/copy/move at all. Why: hand-written special members are the #1 source of leaks and double-frees. - Value by default. Pass and return by value for small/copyable types; reach for the heap only when you need polymorphism, shared lifetime, or a large/stable address. Why: values can't dangle.
- Name the owner. Exactly one type owns each resource; everyone else borrows. Why: ambiguous ownership is how use-after-free is born.
make_unique/make_shared, nevernew. So no naked owning pointer ever exists.- Never an owning raw pointer. Raw pointers/references are non-owning borrows only.
- Borrow with
span/string_view/const T&. Pass a view, not a copy or an owner, for read access. Why: zero-copy, and the callee provably can't free what it doesn't own. constandconstexprby default. Why: the compiler enforces what you don't mutate and moves work off the hot path.- No UB by construction. No use-after-move, OOB index, signed overflow, uninitialized read, or data race.
- Sanitizers + warnings-as-errors in CI. Build and test under
-fsanitize=address,undefinedwith-Werror. - Target-based CMake only.
target_link_libraries/target_compile_features, never directory-levelinclude_directories/link_libraries. Why: directory commands leak flags globally and break composition.
What ships with it
6 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 303 lines · 81 tokens per session scan A 40d930588a4a
cpp is a skill published in the GitHub repository ericrisco/rsc-harness (58 stars, last pushed 2d ago), licensed MIT. It adds 81 tokens to every session and 4,218 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
cpp
Modern C++ programming patterns and idioms.
todos
This chat has a shared, live TODO plan — your tasks for the conversation, which the user also edits. Read this skill and reach for the todo tools whenever a request takes more than a couple of steps. It covers the plan model (group = task, items = its steps; loose items are the user's lane), how to work it: propose…
writing-workflow-skills
Use when adding a new workflow skill to pi-thinkrail-workflow, changing an existing workflow skill's role, trigger, handoff, or structure, or checking a workflow skill against the workflow system's rules. Not for authoring general-purpose skills outside this package.
reviewing-changes
Use when a review package asks you to review a plan step's change set (todo.startReview): you are the REVIEWER, not the author. How to judge an agent-written diff, file findings with addreviewcomment, and settle with exactly one reviewverdict.
asking-user-questions
Use when composing an askuserquestion round inside a workflow, or when a workflow skill names it at a question step. Shared norms for the tool — not a workflow, nothing to execute.
setting-up-a-project
Use whenever asked to set up, onboard, initialize, or spec a project — the front door when the workspace has no spec graph yet (brand-new or an existing codebase); also seeded by the app's Set-up-project card (/skill:setting-up-a-project). Not for feature work in an already-specced project — use the brainstorming…