See CLAUDE.md for the full architecture overview (plugin structure, frameworks, connectors, and the Finding data contract). This file captures durable, non-obvious notes for coding agents working in this repo.
This repo is a Claude Code plugin marketplace: mostly Markdown/YAML/JSON plugin content, plus a root Node.js (ESM) toolkit of CLI scripts, a schema/contract test suite, and a few independent React/Vite apps. There is no backend service or database; "running the app" means running the Node CLI scripts, the test suite, the optional local dashboard server, and/or the Vite frontends.
- Runtime: Node.js (CI pins Node 20; Node 22 works). Single
npm installat the repo root installs all toolkit + test deps. There are no committed lockfiles, so installs resolve latest within semver ranges. - Tests/lint/build commands are defined in the root
package.jsonscripts and.github/workflows/; prefer those as the source of truth. Core checks:npm run test:contract,npm run test:plugin-manifests,npm run test:grc-diagrams,npm run test:contract:findings,npm run test:unit(runs everytests/*.test.{js,mjs,cjs}suite, so new test files are picked up without CI changes). Markdown lint matches the pre-commit hook:npx markdownlint-cli2@0.18.1(config in.markdownlint-cli2.jsonc); note the repo currently has some pre-existingMD022warnings.
- Network-dependent scripts:
frameworks.js(and other scripts that fetch the SCF API atgrcengclub.github.io/scf-api) fail in restricted-egress environments withSCF fetch failed and no cached copy. This is an environment limitation, not a code bug. For an offline core-functionality smoke test usenode plugins/grc-engineer/scripts/map-control.js <iac-file> soc2(also supportsiso27001,nist800-53) — it maps IaC patterns (e.g.aws_iam_role,aws_security_group,kms_key_id,encrypted = true) to controls with no network access. - Optional local dashboard:
node plugins/dashboards/compliance-posture/scripts/serve.js --demo --host=127.0.0.1 --port=8787. Args MUST use--key=valuesyntax (space-separated like--host 127.0.0.1is mis-parsed and the server fails to bind).--demoserves built-in sample runs so nogrc-data/is needed. - Optional React/Vite apps are independent npm projects (not wired into the root via workspaces); each needs its own
npm installin its directory:demo/claude-grc-portfolio(Vite dev on port 5173,npm run dev/npm run build) andplugins/trust-center/frontend(its backend is AWS serverless / deploy-only, not runnable locally).
All of the notes above apply to Cursor Cloud agents. In particular, Cursor Cloud VMs run with restricted egress, so expect the SCF-fetching scripts to fail as described in Gotchas and use the offline smoke test instead.