{"id":51222040,"url":"https://github.com/ericrisco/rsc-harness","last_synced_at":"2026-06-28T08:00:47.915Z","repository":{"id":361861037,"uuid":"1254957761","full_name":"ericrisco/rsc-harness","owner":"ericrisco","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-27T19:05:10.000Z","size":4899,"stargazers_count":10,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-27T21:06:11.033Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ericrisco.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-31T08:00:19.000Z","updated_at":"2026-06-27T19:05:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ericrisco/rsc-harness","commit_stats":null,"previous_names":["ericrisco/skills","ericrisco/rsc-harness"],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/ericrisco/rsc-harness","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericrisco%2Frsc-harness","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericrisco%2Frsc-harness/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericrisco%2Frsc-harness/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericrisco%2Frsc-harness/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ericrisco","download_url":"https://codeload.github.com/ericrisco/rsc-harness/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericrisco%2Frsc-harness/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34881384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-28T08:00:47.354Z","updated_at":"2026-06-28T08:00:47.899Z","avatar_url":"https://github.com/ericrisco.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n```\n  ████████    ███████    ███████ \n  ██    ██   ██         ██    ██ \n  ██    ██   ██         ██       \n  ██    ██   ██         ██       \n  ████████    ██████    ██       \n  ██  ██           ██   ██       \n  ██   ██          ██   ██       \n  ██    ██         ██   ██    ██ \n  ██    ██   ███████     ███████ \n```\n\n# `rsc` — 231 agent skills, one CLI, zero bloat\n\n**A self-recommending skill catalog for 17 coding assistants** — Claude Code,\nCodex, GitHub Copilot, Cursor, Gemini, Windsurf, Cline, Antigravity, Zed and more.\nDescribe what you want in plain language. It reads your repo, installs *only* the\nskills that fit — one at a time — into every assistant you pick, and keeps them\nequipped as you work.\n\nFrom *\"document my company\"* to *\"ship a FastAPI service\"* to *\"grow my YouTube\nchannel\"* — **232 skills across 21 domains**, every one researched against live\n2025-2026 sources and **adversarially scored ≥ 8.5/10** before it shipped.\n\n```bash\nnpx @ericrisco/rsc            # plain-language wizard — no jargon, installs what your project needs\n```\n\n\u003c/div\u003e\n\n---\n\n## 🤖 For agents: \"install this harness\"\n\nIf you're an AI coding agent (Claude Code, Cursor, Copilot, Codex, Gemini…) and your user\nasked you to **install rsc / this harness / these skills**, run this in the **root of the\nproject they're equipping** — not inside a clone of this repo (see the note under *Install*):\n\n```bash\nnpx @ericrisco/rsc@latest\n```\n\nThat launches a plain-language wizard: it asks **which assistants** to target and **what the\nuser wants**, reads the repo, then installs the floor (`orient` + `rsc-suggest` + `harness` +\n`init`) plus only the skills that fit — one at a time. No global install and no API key needed.\n\n- **Choose assistants non-interactively:** `npx @ericrisco/rsc@latest --target claude` (comma-separate for several).\n- **Already installed, just refreshing skills + hooks:** `rsc sync` (or re-run the command above).\n- **Add one skill by id:** `rsc add \u003cid\u003e` · **browse the catalog:** `rsc consult \"\u003cwhat you want\u003e\"` or `rsc list`.\n\nFrom then on it's self-driving: `rsc-suggest` proposes the next skill as tasks appear, and in\nClaude Code a hook re-asserts the spec-first **new-feature gate** on every turn — so a feature\nrequest routes through `specify` before any skill writes code.\n\n---\n\n## Why this exists\n\nMost skill packs dump hundreds of files into your context and call it a day. This\none is the opposite bet:\n\n- **Granular by default.** The unit of installation is *one skill*. Install\n  `fastapi` without ever pulling `go`. Nothing you don't use touches your context.\n- **Self-recommending.** Both the terminal (`rsc consult`) and the chat\n  (`rsc-suggest`, an always-on detector) watch what you're doing and propose the\n  *next* skill the moment a task needs it — a one-word confirm installs it.\n- **Not code-only.** First-class support for running a *company*: bookkeeping,\n  invoicing, hiring, GDPR, pitch decks, SEO, a YouTube/TikTok/LinkedIn presence —\n  each wired to a `02-DOCS/` knowledge loop that learns from your own results.\n- **Honestly good.** Every skill was built by a research → spec → implement →\n  *adversarial review* pipeline and had to clear an objective rubric\n  (`scripts/skill-rubric.md`, written *before* any skill existed). The bar was\n  real: skills that scored 8.0 were sent back and fixed, not waved through.\n\n`skills/\u003cname\u003e/` is the single source of truth. There are no bundles to argue\nover: you start with a tiny floor and grow one piece at a time.\n\n---\n\n## Install\n\n```bash\nnpx @ericrisco/rsc            # no install step — runs the latest published catalog\n```\n\nPrefer the short `rsc` command? Install once, globally:\n\n```bash\nnpm install -g @ericrisco/rsc   # then just: rsc\n```\n\nRun it inside any project and describe what you want. Working on the catalog\nitself? Clone and link:\n\n```bash\ngit clone https://github.com/ericrisco/rsc-harness.git ~/rsc-skills\ncd ~/rsc-skills \u0026\u0026 npm install \u0026\u0026 npm link\n```\n\n\u003e **Run it inside the project you're equipping — not inside this repo.** The\n\u003e catalog's own `package.json` is named `@ericrisco/rsc`, so `npx @ericrisco/rsc`\n\u003e *from within a `rsc-harness` clone* resolves to the local (unlinked) bin and\n\u003e dies with `sh: rsc: command not found`. Working on the catalog itself? Use\n\u003e `node scripts/rsc.js …`, the `npm link` above, or pin the published build with\n\u003e `npx @ericrisco/rsc@latest …`.\n\nThe first run asks **which assistants** you want — Claude Code, Codex, Copilot,\nCursor, Gemini, Windsurf, Cline and 11 more (pick any combination) — and installs\nthe **floor**:\n`orient` + `rsc-suggest` (always-on) + `harness` + `init`. In Claude Code it\nalso wires a `SessionStart` hook (so your assistant proposes new skills on its\nown) and a `UserPromptSubmit` hook that re-asserts the **SDD new-feature gate**\non every turn — so a feature request, in any language, routes through `specify`\nfirst, before any skill writes code. Opt out per project with `.rsc/.no-feature-gate`.\n\nEverything stays **in the project**, and the real skill files are written\n**once** to `.rsc/skills/\u003cid\u003e/`. Each assistant you pick gets a lightweight\nsymlink back to that shared base — no copy is duplicated across IDEs. (If the\nfilesystem can't symlink, it falls back to a real copy automatically.)\n\n---\n\n## 30-second tour\n\n```\n$ rsc\n ██████╗ ███████╗ ██████╗     ← animated gradient wordmark\n ██╔══██╗██╔════╝██╔════╝\n ██████╔╝███████╗██║\n  232 skills · one CLI · zero bloat\n\nWhat do you want to do?          ↑↓ move · enter select\n❯ Base install — the essentials (orient + suggest + harness + init)\n  Base + Spec-Driven Development — specify → plan → implement → ship\n  Pick skills by hand, by area\n```\n\nPick **by area** and you get a checkbox list — **↑↓ to move, space to toggle,\nenter to confirm**:\n\n```\nLanguages:                       ↑↓ move · space toggle · a all · enter confirm\n❯ ◉ typescript\n  ◯ python\n  ◉ go\n  ◯ rust\n```\n\nThen it asks **which assistants** to install for — tick as many as you like:\n\n```\nWhich assistants do you want to install for?   space toggle · a all · enter confirm\n❯ ◉ Claude Code      (.claude/skills/)   ⟵ detected here\n  ◉ Codex CLI        (AGENTS.md)\n  ◯ GitHub Copilot   (.github/copilot-instructions.md)\n  ◯ Cursor           (.cursor/rules/)\n  ◉ Windsurf         (.windsurf/rules/)\n  ◯ Cline            (.clinerules/)\n  …17 in total — Gemini, Antigravity, Zed, Continue, Roo, Amp, opencode, Jules, Junie, Kiro, Aider\n```\n\nIt detects your stack, asks which assistants to install for (the one it found in\nyour folder is pre-marked), installs only what you chose, then prints the exact\nnext steps for **Claude Code / Codex / Cursor / Gemini / Antigravity** — and from\nthere keeps proposing the skills a task needs.\n\n---\n\n## The CLI\n\n```bash\nrsc                                  # plain-language wizard (recommended) — pick skills AND assistants\nrsc add fastapi postgresdb           # install specific skills, by name\nrsc add youtube-api remotion-video   # …grow a channel, edit with Remotion\nrsc add fastapi --target claude,codex   # install into several assistants at once\nrsc install --profile minimal        # the floor: orient + suggest + harness + init\nrsc install --profile core           # floor + the full SDD workflow\nrsc install --profile full           # everything (all 231)\nrsc install --profile full --without go\nrsc consult \"I want to launch a SaaS\"  # recommend only, no install\nrsc registry refresh                 # write .rsc/skill-registry.{json,md}\nrsc list                             # what rsc has installed\nrsc doctor                           # health check (state, hook, counts)\nrsc sync --target claude,codex       # refresh managed skills/hooks from the current package version\nrsc backups                          # list project-local snapshots\nrsc restore latest --dry-run         # preview restoring the newest snapshot\nrsc restore \u003csnapshot-id\u003e            # restore a project-local snapshot\nrsc upgrade --dry-run                # show npm upgrade + sync commands\nrsc uninstall postgresdb --dry-run   # preview a removal\n```\n\n---\n\n## Update\n\n`rsc` is an npm package, so updating is two steps — bump the package, then\nre-sync what's already wired into your project:\n\n```bash\nnpm install -g @ericrisco/rsc@latest   # global install: pull the newest catalog\nrsc sync                               # refresh managed skills + hooks (auto-detects your assistant)\n```\n\nNot sure what a bump touches? Preview the exact commands without writing anything:\n\n```bash\nrsc upgrade --dry-run                  # prints the npm install + rsc sync lines for your target\n```\n\nRunning through `npx` (no global install)? There's nothing to upgrade —\n`npx @ericrisco/rsc@latest` always fetches the latest published catalog; just run\n`rsc sync` afterwards if the project already has skills installed.\n\nEvery sync snapshots the project first, so a bad update is always reversible:\n\n```bash\nrsc backups                            # list project-local snapshots\nrsc restore latest --dry-run           # preview restoring the newest\nrsc restore \u003csnapshot-id\u003e              # restore it\n```\n\n---\n\n## How recommendation works\n\nTwo faces, one catalog (`manifest.json`):\n\n- **In the terminal** — `rsc` / `rsc consult` rank the catalog against your words\n  (an FTS index over each skill's description + tags), merge that with what they\n  detect in your repo, and expand via each skill's `recommends`.\n- **In the chat** — `rsc-suggest` is a tiny always-on skill. When a task would\n  benefit from a skill you don't have, it names it and (one-word confirm) runs\n  `rsc add \u003cid\u003e` for you. It's the floor — installed with every profile.\n\nRepo detection maps real signals to skills: `package.json` + `next` → `nextjs`;\n`go.mod` → `go`; `pyproject.toml` → `fastapi`; `*.sql`/`prisma/` → `postgresdb`;\n`Dockerfile`/`.github/` → `docker`/`github-actions`; and so on. An empty repo\njust asks in plain language.\n\n---\n\n## The catalog\n\n232 skills, grouped by what you're trying to do. Click any skill to read its\n`SKILL.md`. It fires on its own when a task matches.\n\n### 🧭 Core \u0026 control plane\nThe front door and the workspace brain.\n\n[init](skills/init/) · [harness](skills/harness/) · [orient](skills/orient/) · [suggest](skills/suggest/) · [author-skill](skills/author-skill/) · [sdd-init](skills/sdd-init/)\n\n\u003e **harness** is the Karpathy *chaos→knowledge* engine — a `01-TOOLS/` layer (one\n\u003e folder per provider, each with a working `test_connection`) and a `02-DOCS/`\n\u003e self-improving wiki. It governs software *or* a whole company. **orient** is the\n\u003e always-on compass that keeps a non-technical human oriented after every step.\n\n\u003e #### 📦 The `02-DOCS/` brain is now 100% Open Knowledge Format (OKF v0.1) conformant\n\u003e\n\u003e Google Cloud published the [**Open Knowledge Format**](https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf)\n\u003e — a vendor-neutral standard for portable, agent-readable knowledge — built on the\n\u003e same Karpathy *LLM-wiki* pattern our `02-DOCS/` engine has used from day one. We\n\u003e independently converged on the same design, so adopting the standard cost almost\n\u003e nothing. As of now, **every `02-DOCS/wiki/` is a valid, portable OKF bundle**:\n\u003e\n\u003e - **Markdown + YAML frontmatter**, `type` on every concept doc, OKF-standard\n\u003e   fields (`title`, `description`, `resource`, `tags`, `timestamp`).\n\u003e - **Standard markdown links** (not wikilinks) form the knowledge graph — any OKF\n\u003e   consumer reads it, *and* it stays a native Obsidian vault (graph, backlinks,\n\u003e   Properties, Bases). Same files, no export step.\n\u003e - **Reserved files** honored: `index.md` (no frontmatter) for navigation,\n\u003e   `log.md` (newest-first, ISO 8601) for history.\n\u003e\n\u003e Tarball a `wiki/` and any OKF tool — including Google's own viewer — can read it.\n\u003e And the brain now **keeps your repo clean**: a loose file it ingests (a PDF at the\n\u003e root, anything in `inbox/`) is *moved* into `raw/`, never left as clutter.\n\n### 📐 Spec-Driven Development\nTake a fuzzy intent to a shipped, verified change — phase by phase. `npx @ericrisco/rsc install --profile core`.\n\n[sdd](skills/sdd/) · [constitution](skills/constitution/) · [specify](skills/specify/) · [clarify](skills/clarify/) · [plan](skills/plan/) · [tasks](skills/tasks/) · [analyze](skills/analyze/) · [implement](skills/implement/) · [verify](skills/verify/) · [review](skills/review/) · [ship](skills/ship/) · [debug](skills/debug/) · [worktrees](skills/worktrees/) · [parallel](skills/parallel/)\n\n### 💼 Run a business\n\n[finance-ops](skills/finance-ops/) · [invoicing](skills/invoicing/) · [bookkeeping](skills/bookkeeping/) · [pricing](skills/pricing/) · [sales-pipeline](skills/sales-pipeline/) · [lead-gen](skills/lead-gen/) · [cold-outreach](skills/cold-outreach/) · [proposals](skills/proposals/) · [contracts](skills/contracts/) · [customer-support](skills/customer-support/) · [client-onboarding](skills/client-onboarding/) · [retention](skills/retention/) · [hiring](skills/hiring/) · [people-ops](skills/people-ops/) · [inventory](skills/inventory/) · [logistics-ops](skills/logistics-ops/) · [procurement](skills/procurement/) · [meeting-notes](skills/meeting-notes/) · [sop-builder](skills/sop-builder/) · [project-ops](skills/project-ops/)\n\n### 💸 Raise \u0026 model money\n\n[pitch-deck](skills/pitch-deck/) · [investor-materials](skills/investor-materials/) · [financial-model](skills/financial-model/) · [fundraising](skills/fundraising/) · [unit-economics](skills/unit-economics/) · [grants](skills/grants/)\n\n### ⚖️ Legal, privacy \u0026 compliance\n\n[gdpr-privacy](skills/gdpr-privacy/) · [terms-conditions](skills/terms-conditions/) · [compliance](skills/compliance/) · [data-policy](skills/data-policy/) · [ip-trademark](skills/ip-trademark/)\n\n### 📣 Market \u0026 brand\n\n[marketing](skills/marketing/) · [seo-geo](skills/seo-geo/) · [content-engine](skills/content-engine/) · [social-publisher](skills/social-publisher/) · [brand-voice](skills/brand-voice/) · [brand-identity](skills/brand-identity/) · [newsletter](skills/newsletter/) · [landing-copy](skills/landing-copy/) · [ads](skills/ads/) · [article-writing](skills/article-writing/) · [case-studies](skills/case-studies/) · [video-shorts](skills/video-shorts/) · [podcast](skills/podcast/) · [market-research](skills/market-research/) · [competitor-watch](skills/competitor-watch/) · [press-kit](skills/press-kit/) · [community](skills/community/) · [webinar](skills/webinar/) · [review-management](skills/review-management/)\n\n### 🎬 Grow a channel\nEach with a `02-DOCS` feedback loop that learns from your own results. `remotion-video` edits programmatically — transitions, Whisper captions, silence removal.\n\n[youtube-api](skills/youtube-api/) · [youtube-strategy](skills/youtube-strategy/) · [youtube-ideation](skills/youtube-ideation/) · [youtube-thumbnails](skills/youtube-thumbnails/) · [youtube-packaging](skills/youtube-packaging/) · [remotion-video](skills/remotion-video/) · [tiktok-api](skills/tiktok-api/) · [instagram-api](skills/instagram-api/) · [shortform-strategy](skills/shortform-strategy/) · [shortform-ideation](skills/shortform-ideation/) · [shortform-packaging](skills/shortform-packaging/) · [shortform-editing](skills/shortform-editing/) · [linkedin-api](skills/linkedin-api/) · [linkedin-strategy](skills/linkedin-strategy/) · [linkedin-content](skills/linkedin-content/) · [linkedin-carousels](skills/linkedin-carousels/) · [linkedin-outreach](skills/linkedin-outreach/) · [medium-writing](skills/medium-writing/) · [medium-publishing](skills/medium-publishing/) · [medium-strategy](skills/medium-strategy/)\n\n### 🔌 Connect \u0026 automate\n\n[stripe](skills/stripe/) · [email-connector](skills/email-connector/) · [google-workspace](skills/google-workspace/) · [notion-connector](skills/notion-connector/) · [whatsapp-telegram](skills/whatsapp-telegram/) · [automation-flows](skills/automation-flows/) · [api-connector-builder](skills/api-connector-builder/) · [webhooks](skills/webhooks/) · [data-scraper](skills/data-scraper/) · [spreadsheet-ops](skills/spreadsheet-ops/) · [calendar-scheduling](skills/calendar-scheduling/) · [document-processing](skills/document-processing/) · [e-signature](skills/e-signature/)\n\n### 📊 Data \u0026 analytics\n\n[analytics](skills/analytics/) · [dashboard](skills/dashboard/) · [kpi-framework](skills/kpi-framework/) · [reporting](skills/reporting/) · [ab-testing](skills/ab-testing/) · [forecasting](skills/forecasting/) · [data-cleaning](skills/data-cleaning/) · [business-intelligence](skills/business-intelligence/)\n\n### 🤖 AI — build it in\n\n[building-agents](skills/building-agents/) · [rag](skills/rag/) · [embeddings-search](skills/embeddings-search/) · [prompt-engineering](skills/prompt-engineering/) · [llm-pipeline](skills/llm-pipeline/) · [agent-eval](skills/agent-eval/) · [chatbot](skills/chatbot/) · [ai-media](skills/ai-media/) · [replicate-images](skills/replicate-images/) · [structured-extraction](skills/structured-extraction/) · [agent-safety](skills/agent-safety/) · [cost-tracking](skills/cost-tracking/)\n\n### 🛰️ AI — run it on\n\n[replicate](skills/replicate/) · [runpod](skills/runpod/) · [modal](skills/modal/) · [huggingface](skills/huggingface/) · [ollama](skills/ollama/) · [together-fireworks](skills/together-fireworks/) · [fal](skills/fal/)\n\n### 🗣️ Languages\n\n[typescript](skills/typescript/) · [python](skills/python/) · [java](skills/java/) · [csharp-dotnet](skills/csharp-dotnet/) · [php](skills/php/) · [ruby](skills/ruby/) · [cpp](skills/cpp/) · [elixir](skills/elixir/) · [bash-scripting](skills/bash-scripting/) · [sql](skills/sql/) · [go](skills/go/)\n\n### 🏗️ Frameworks \u0026 app stacks\n\n[fastapi](skills/fastapi/) · [nextjs](skills/nextjs/) · [react](skills/react/) · [react-native](skills/react-native/) · [vue-nuxt](skills/vue-nuxt/) · [angular](skills/angular/) · [svelte](skills/svelte/) · [astro](skills/astro/) · [solid-js](skills/solid-js/) · [htmx](skills/htmx/) · [nodejs](skills/nodejs/) · [nestjs](skills/nestjs/) · [django](skills/django/) · [laravel](skills/laravel/) · [rails](skills/rails/) · [spring-boot](skills/spring-boot/) · [phoenix](skills/phoenix/) · [flutter](skills/flutter/) · [swift-ios](skills/swift-ios/) · [kotlin-android](skills/kotlin-android/) · [compose-multiplatform](skills/compose-multiplatform/) · [expo](skills/expo/) · [tauri](skills/tauri/) · [electron](skills/electron/) · [rust](skills/rust/) · [wordpress](skills/wordpress/) · [shopify](skills/shopify/) · [no-code-app](skills/no-code-app/) · [chrome-extension](skills/chrome-extension/) · [api-design](skills/api-design/)\n\n### 🗄️ Databases \u0026 data layer\n\n[postgresdb](skills/postgresdb/) · [mysql](skills/mysql/) · [mongodb](skills/mongodb/) · [redis](skills/redis/) · [supabase](skills/supabase/) · [neon](skills/neon/) · [planetscale](skills/planetscale/) · [sqlite-turso](skills/sqlite-turso/) · [prisma-orm](skills/prisma-orm/) · [drizzle-orm](skills/drizzle-orm/) · [firebase](skills/firebase/) · [dynamodb](skills/dynamodb/) · [vector-db](skills/vector-db/) · [clickhouse-analytics](skills/clickhouse-analytics/) · [duckdb](skills/duckdb/) · [db-migrations](skills/db-migrations/) · [backups](skills/backups/)\n\n### ☁️ Ship \u0026 operate — platforms\n\n[vercel](skills/vercel/) · [netlify](skills/netlify/) · [cloudflare](skills/cloudflare/) · [railway](skills/railway/) · [render](skills/render/) · [fly-io](skills/fly-io/) · [coolify](skills/coolify/) · [hetzner](skills/hetzner/) · [digitalocean](skills/digitalocean/) · [aws-essentials](skills/aws-essentials/) · [gcp-essentials](skills/gcp-essentials/)\n\n### 🛠️ Ship \u0026 operate — devops\n\n[docker](skills/docker/) · [github-actions](skills/github-actions/) · [git-workflow](skills/git-workflow/) · [domains-dns](skills/domains-dns/) · [monitoring](skills/monitoring/) · [email-deliverability](skills/email-deliverability/) · [scaling](skills/scaling/) · [deployment](skills/deployment/)\n\n### 🔒 Ship \u0026 operate — quality \u0026 security\n\n[code-review](skills/code-review/) · [security-scan](skills/security-scan/) · [secure-coding](skills/secure-coding/) · [testing-py](skills/testing-py/) · [testing-web](skills/testing-web/) · [testing-go](skills/testing-go/) · [e2e-testing](skills/e2e-testing/) · [accessibility](skills/accessibility/) · [performance](skills/performance/) · [error-handling](skills/error-handling/) · [observability](skills/observability/)\n\n### 🎨 Design \u0026 content craft\n\n[design](skills/design/) · [presentations](skills/presentations/) · [course-storytelling](skills/course-storytelling/) · [course-builder](skills/course-builder/) · [technical-writing](skills/technical-writing/) · [translation-l10n](skills/translation-l10n/)\n\n### 🧠 Knowledge \u0026 meta\n\n[knowledge-ops](skills/knowledge-ops/) · [codebase-onboarding](skills/codebase-onboarding/) · [research-ops](skills/research-ops/) · [decision-records](skills/decision-records/) · [continuous-learning](skills/continuous-learning/) · [skill-scout](skills/skill-scout/) · [context-budget](skills/context-budget/) · [roast-me](skills/roast-me/)\n\n---\n\n## Multi-target\n\n`skills/\u003cname\u003e/` is the catalog source. On install the real files land **once**\nin the project at `.rsc/skills/\u003cid\u003e/`; each assistant you pick gets a symlink\n(or a converted file) back to that shared base — pick several and nothing is\nduplicated. The wizard asks which ones; `--target a,b` does it non-interactively.\n\n| Target | Skill destination (→ `.rsc/skills/\u003cid\u003e/`) | Always-on detector |\n| --- | --- | --- |\n| `claude` | `.claude/skills/\u003cid\u003e/` → symlink (copy on Windows) | SessionStart hook in `.claude/settings.json` |\n| `codex` | `.codex/rsc/\u003cid\u003e/` → symlink | block in `AGENTS.md` |\n| `copilot` | `.github/rsc/\u003cid\u003e/` → symlink | block in `.github/copilot-instructions.md` |\n| `cursor` | `.cursor/rules/\u003cid\u003e.mdc` (converted) | always-apply rule |\n| `gemini` | `.gemini/rsc/\u003cid\u003e/` → symlink | block in `GEMINI.md` |\n| `windsurf` | `.windsurf/rsc/\u003cid\u003e/` → symlink | rule in `.windsurf/rules/rsc-suggest.md` |\n| `cline` | `.clinerules/rsc/\u003cid\u003e/` → symlink | rule in `.clinerules/rsc-suggest.md` |\n| `antigravity` | `.antigravity/rsc/\u003cid\u003e/` → symlink | block in `.antigravity/AGENTS.md` |\n| `zed` | `.zed/rsc/\u003cid\u003e/` → symlink | block in `AGENTS.md` |\n| `continue` | `.continue/rsc/\u003cid\u003e/` → symlink | rule in `.continue/rules/rsc-suggest.md` |\n| `roo` | `.roo/rsc/\u003cid\u003e/` → symlink | rule in `.roo/rules/rsc-suggest.md` |\n| `amp` | `.amp/rsc/\u003cid\u003e/` → symlink | block in `AGENTS.md` |\n| `opencode` | `.opencode/rsc/\u003cid\u003e/` → symlink | block in `AGENTS.md` |\n| `jules` | `.jules/rsc/\u003cid\u003e/` → symlink | block in `AGENTS.md` |\n| `junie` | `.junie/rsc/\u003cid\u003e/` → symlink | block in `.junie/guidelines.md` |\n| `kiro` | `.kiro/rsc/\u003cid\u003e/` → symlink | doc in `.kiro/steering/rsc-suggest.md` |\n| `aider` | `.aider/rsc/\u003cid\u003e/` → symlink | block in `CONVENTIONS.md` |\n\n\u003e `codex`, `zed`, `amp`, `opencode` and `jules` all share the one root\n\u003e `AGENTS.md`; the block is idempotent, so picking several writes it once.\n\n---\n\n## Skill format\n\nEach skill is a directory under `skills/\u003cname\u003e/` whose `SKILL.md` frontmatter\ndrives both triggering and the installer's recommendations:\n\n```yaml\n---\nname: my-skill\ndescription: Use when [specific triggers]… Triggers: 'phrase', 'frase'. NOT x (that is sibling).\ntags: [keyword, keyword]        # what the consult advisor searches over\nrecommends: [sibling-skill]     # what the system offers to install next\nprofiles: [core, full]          # optional: named-profile membership\norigin: risco\n---\n```\n\nThe full agent-skill spec lives at\n[agentskills.io/specification](https://agentskills.io/specification).\n\n---\n\n## Repo layout \u0026 contributing\n\n`skills/\u003cname\u003e/` is the **single source of truth** — every skill is authored\nthere, once. After editing any skill:\n\n```bash\nnpm run manifest      # regenerate manifest.json from skills/*/SKILL.md\nnpm run validate      # ajv-validate frontmatter + check recommends integrity\nnpm test              # unit + integration tests\nbash scripts/eval-lint.sh   # validate every skills/*/evals/cases.yaml\n```\n\n`manifest.json` is generated, never hand-edited; CI runs `npm run manifest:check`\nand fails if it's stale or the skill count drifts. Adding a skill is: create\n`skills/\u003cid\u003e/SKILL.md` with `tags` + `recommends`, run `npm run manifest`, done —\nthe rubric to hold it to is `scripts/skill-rubric.md`.\n\nThis is a personal catalog. Bug reports welcome via GitHub issues; PRs fixing\ndetector patterns, provider endpoints, or typos are appreciated.\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericrisco%2Frsc-harness","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fericrisco%2Frsc-harness","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericrisco%2Frsc-harness/lists"}