@jterrats/setup-agents
v3.18.7
Published
A Salesforce CLI plugin to configure agent rules for AI coding assistants (Cursor, VS Code, Codex, and more).
Downloads
1,343
Maintainers
Readme
setup-agents ⚡ — Agentic Development Framework for Salesforce
Configure once. Let agents drive.
Disclaimer: This is a personal open-source project by Jaime Terrats. It is not an official Salesforce product, nor is it endorsed, supported, or affiliated with Salesforce, Inc. Use at your own discretion.
About
setup-agents is an agentic development framework for Salesforce teams. It gives AI agents everything they need to operate as a senior team member in a Salesforce project: role identity, project standards, a workflow engine, and an accountability loop.
sf setup-agents init # configure profiles, tools, and workspace once
│
▼
CLAUDE.md / AGENTS.md # agents read this on every session
.cursor/rules/*.mdc # role-specific standards loaded per task type
│
▼
sf setup-agents workflow run --story SA-42
│
├── BA phase # refine acceptance criteria
├── Architect phase # design decisions + ADR
├── Developer phase # implement + unit tests
├── QA phase # verify + evidence
└── Release phase # validate + PR
│
▼
evidence.jsonl + decisions.jsonl # auditable delivery trailPhases are dynamic — only the roles configured for your project run. A project with just developer runs Developer → QA → Release. Add architect and the Architect phase is inserted automatically.
What agents get
- 41 role profiles — Developer, Technical Architect, Solution Architect, BA, PM, MuleSoft, UX, CGCloud, DevOps, QA, CRMA, Commerce, Data Cloud, Admin, SFMC, Security, Service, CPQ, OmniStudio, FSL, FSC, AI/Agentforce, Slack, Tableau, Experience Cloud, Release Manager, Sales Cloud, Health Cloud, Manufacturing Cloud, Communications Cloud, Automotive Cloud, Education Cloud, Net Zero Cloud, Nonprofit Cloud, Public Sector Solutions, Media Cloud, Energy & Utilities Cloud, Revenue Cloud, Salesforce Maps, Loyalty Management, Salesforce Industries Cloud (Platform)
- Workflow engine — deterministic multi-phase pipeline with gates, QA loop, and resume
- Opt-in autonomous verification —
workflow run --autonomoususes registered verifier contracts, run/iteration/source-digest evidence, selected/excluded/blocked test lanes, a five-attempt cap, and a two-no-progress stop; manual mode remains the default and human architecture/release gates remain mandatory - Sub-agent protocol — generated routing manifest mapping task types to roles with handover checklists
- Evidence and accountability — agents record commands, files, and decisions before each gate
- Action Risk Scale — agents know what to run autonomously, what to ask, and what to never touch
- Agentforce Workflows —
.a4drules/workflows/*.mdfor automated dev tasks in Vibes chat - MCP integration —
sf setup-agents mcpwires@salesforce/mcpinto Cursor for any org
What teams get
- VS Code Extension — visual sidebar for guided setup, MCP config, integrations, and rule management
- Auto-detection — detects
cgcloud__,WaveDashboard,DataStream, Playwright config, and more - Combinable profiles —
--profile developer,architect,crmastacks rules from multiple roles - Rule overrides — customize Cursor scope and globs per profile in
config.json - Safe by default — never overwrites existing rule files without
--force
Autonomous workflow GO is a release-readiness recommendation, not approval or authority to
merge, push, publish, deploy, or release. The deterministic autonomous execution seam is for tests
only; production uses the configured delegated provider, and unavailable required providers or
test environments are reported as blocked rather than passed. Rollback preserves the versioned
run and its evidence so operators can disable new autonomous starts without erasing audit history.
Quick Start
# Install the plugin
sf plugins install @jterrats/setup-agents
# Run in your Salesforce project
cd my-salesforce-project
sf setup-agents localThe command auto-detects your tools and prompts for role selection:
? Select your role profile(s):
❯◉ Developer
◯ Architect
◯ Business Analyst
◯ Project Manager
◯ MuleSoft
◯ UX / UI
◉ CGCloud ← pre-selected (cgcloud__ detected)
◯ DevOps / Release Manager
◯ QA (Playwright)
◯ CRM Analytics Engineer (CRMA)
◯ Data Cloud Architect / Engineer (Data 360)
◯ Salesforce Admin / Configurator
◯ Salesforce Marketing Cloud (SFMC)
◯ Security / Compliance
◯ Service Cloud
◯ CPQ Specialist
◯ OmniStudio / Vlocity
◯ Field Service (FSL)
◯ AI / Agentforce Specialist
◯ Slack Developer
◯ Tableau / Analytics CloudUnsigned Plugin Notice: You will be prompted the first time you install an unsigned plugin. To trust this plugin:
sf plugins install @jterrats/setup-agents --no-verify # or add to allowlist in ~/.config/sf/unsignedPluginAllowList.json
Full agent workflow guide: see the Workflow Commands page on the docs site for the complete loop — from init to shipped PR — with phase matrix, gates, evidence, and a real example.
Versioning: the plugin (
v2.x) and the VS Code extension (ext-v1.x) are released independently on separate tracks. Both badges above always reflect the latest of each.
VS Code Extension (Preview)
A visual sidebar UI that wraps the CLI plugin for teams that prefer point-and-click over terminal commands.
Features:
- Guided Setup — auto-detects tools, displays 41 profile cards, scope selector, live console output
- MCP Configuration — lists authenticated orgs, pre-selects already-connected ones, one-click connect
- Third-Party Integrations — profile-filtered cards for Figma, Jira, draw.io, GitHub with credential input
- Update Agent Rules — detects stale files and updates in one click
- Rule Management — import from URL/file, browse, edit, and save rule files inline
- Health Checks — verifies SF CLI and plugin installation with actionable error banners
cd extensions/vscode-setup-agents-ui
npm install && npm run build
# Then press F5 or open the Setup Agents sidebar in VS CodeFull documentation: see the Extension page on the docs site.
Architecture
graph TD
subgraph cmds [Commands]
local["sf setup-agents local"]
mcp["sf setup-agents mcp"]
update["sf setup-agents update"]
end
subgraph setup [Setup Layer]
cursorSetup["cursor-setup.ts"]
vscodeSetup["vscode-setup.ts"]
codexSetup["codex-setup.ts"]
claudeSetup["claude-setup.ts"]
a4dSetup["agentforce-setup.ts"]
end
subgraph gen [Generators]
mdcGen["agent-rules-generator"]
workflowGen["workflow-generator"]
copilotGen["copilot-generator"]
extGen["extensions-generator"]
codexGen["codex-generator"]
claudeGen["claude-generator"]
a4dGen["agentforce-generator"]
diagramGen["diagram-renderer"]
reportGen["report-renderer"]
dashGen["dashboard-generator"]
sharedGen["shared"]
end
local --> detectTools["detectTools()"]
local --> resolveProfiles["resolveProfiles()"]
local --> cursorSetup
local --> vscodeSetup
local --> codexSetup
local --> claudeSetup
local --> a4dSetup
cursorSetup --> mdcGen
cursorSetup --> workflowGen
vscodeSetup --> copilotGen
vscodeSetup --> extGen
codexSetup --> codexGen
claudeSetup --> claudeGen
a4dSetup --> a4dGen
a4dSetup --> workflowGen
a4dGen --> sharedGen
claudeGen --> sharedGen
mcp --> orgList["sf org list"]
mcp --> mcpJson[".cursor/mcp.json"]
update --> findStale["findStaleFiles()"]
update --> localFiles generated per tool
| Tool | Files |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cursor | .cursor/rules/agent-guidelines.mdc, salesforce-standards.mdc, <profile>-standards.mdc, sub-agent-protocol.mdc, salesforce-pdf-registry.mdc |
| VS Code | .github/copilot-instructions.md, .vscode/extensions.json |
| Codex | AGENTS.md, .codex/<profile>.md, .codex/sub-agent-protocol.md, .codex/salesforce-pdf-registry.md |
| Claude | CLAUDE.md, .claude/rules/<profile>.md, .claude/rules/sub-agent-protocol.md, .claude/rules/salesforce-pdf-registry.md |
| Agentforce | .a4drules/00-base-guidelines.md, 01-salesforce-standards.md, <profile>.md, 99-sub-agent-protocol.md, workflows/*.md |
Profiles
Each profile generates a dedicated .mdc rule file in .cursor/rules/ and contributes extensions to .vscode/extensions.json.
| Profile | Flag | Rule File | Auto-detect Signal |
| ------------------------------------------ | ------------------ | -------------------------------- | ------------------------------------------------- |
| Developer | developer | developer-standards.mdc | — |
| Technical Architect | ta | ta-standards.mdc | — |
| Architect (alias → ta) | architect | architect-standards.mdc | — |
| Solution Architect | sa | sa-standards.mdc | — |
| Business Analyst | ba | ba-standards.mdc | — |
| Project Manager | pm | pm-standards.mdc | — |
| MuleSoft | mulesoft | mulesoft-standards.mdc | mule-artifact.json / pom.xml |
| UX / UI | ux | ux-standards.mdc | — |
| CGCloud | cgcloud | cgcloud-standards.mdc | cgcloud__ in package.xml |
| DevOps | devops | devops-standards.mdc | azure-pipelines.yml |
| QA | qa | qa-standards.mdc | playwright.config.ts/js |
| CRM Analytics | crma | analytics-standards.mdc | WaveDashboard / WaveDataflow in package.xml |
| Commerce Cloud | commerce | commerce-standards.mdc | dw.json / cartridges/ / B2B metadata |
| Data Cloud | data360 | data360-standards.mdc | DataStream / DataModelObject in package.xml |
| Admin | admin | admin-standards.mdc | force-app/ |
| SFMC | sfmc | sfmc-standards.mdc | .ampscript / mc-project.json |
| Security | security | security-standards.mdc | force-app/ |
| Service Cloud | service | service-standards.mdc | objects/Case/ / entitlements / bots |
| CPQ | cpq | cpq-standards.mdc | SBQQ__ metadata |
| OmniStudio | omnistudio | omnistudio-standards.mdc | omniScripts/ / flexCards/ |
| Field Service | fsl | fsl-standards.mdc | ServiceAppointment / WorkOrder metadata |
| AI / Agentforce | ai | ai-standards.mdc | bots/ / aiApplications/ |
| Slack | slack | slack-standards.mdc | slack.json / manifest.json |
| Tableau | tableau | tableau-standards.mdc | datasources/ / workbooks/ |
| Experience Cloud | experience-cloud | experience-cloud-standards.mdc | experiences/ / sites/ |
| Release Manager | release-manager | release-manager-standards.mdc | sfdx-project.json / force-app/ |
| Financial Services Cloud | fsc | fsc-standards.mdc | FinServ__FinancialAccount__c / rollup CMDT |
| Health Cloud | health | health-standards.mdc | HealthCloudGA__ / CarePlan / CareProgram |
| Manufacturing Cloud | manufacturing | manufacturing-standards.mdc | ManufacturingCloud__ metadata |
| Communications Cloud | communications | communications-standards.mdc | vlocity_cmt__ / Vlocity CMT metadata |
| Automotive Cloud | automotive | automotive-standards.mdc | Automotive__ metadata |
| Education Cloud | education | education-standards.mdc | Education__ metadata |
| Net Zero Cloud | netzero | netzero-standards.mdc | StnryAssetEnvrSrc / carbon footprint metadata |
| Nonprofit Cloud | nonprofit | nonprofit-standards.mdc | npsp__ / Nonprofit metadata |
| Public Sector Solutions | public-sector | public-sector-standards.mdc | PublicSector__ metadata |
| Media Cloud | media | media-standards.mdc | MediaCloud__ metadata |
| Energy & Utilities Cloud | energy | energy-standards.mdc | EnergyUtility__ metadata |
| Revenue Cloud | revenue | revenue-standards.mdc | Revenue__ / billing metadata |
| Salesforce Maps | maps | maps-standards.mdc | Maps__ / geolocation metadata |
| Loyalty Management | loyalty | loyalty-standards.mdc | Loyalty__ / LoyaltyProgram metadata |
| Salesforce Industries Cloud (Platform) | industries | industries-standards.mdc | omnistudio / industries metadata |
| Sales Cloud | salescloud | salescloud-standards.mdc | Lead, Opportunity, Forecast, Territory, Quote |
Profiles are combinable. All rules use alwaysApply: true so every AI agent in the project has full context.
Sub-agent Protocol
When multiple profiles are active, sf setup-agents local generates a sub-agent routing manifest for every configured runtime — .cursor/rules/sub-agent-protocol.mdc (Cursor), .claude/rules/sub-agent-protocol.md (Claude), and .codex/sub-agent-protocol.md (Codex) — that tells AI agents which role handles which task type:
## Active Profiles
| Role | Rule File |
|-------------------------------|----------------------------|
| Developer | developer-standards.mdc |
| Analytics Engineer (CRMA) | analytics-standards.mdc |
| Data Cloud Engineer | data360-standards.mdc |
## Task-to-Profile Routing
| Task Type | Assigned Role |
|----------------------------------------|---------------------|
| Apex / LWC / Triggers | Developer |
| Recipes / Dataflows / SAQL | Analytics Engineer |
| Data Streams / Identity Resolution | Data Cloud Engineer |Agentforce Workflows
When --rules agentforce is used on a Salesforce project, the plugin generates workflow files in .a4drules/workflows/ that can be invoked in the Agentforce Vibes extension chat with /[workflow-name.md].
| Workflow | Trigger | Description |
| ------------------------- | --------- | --------------------------------------------- |
| deploy.md | Always | Guided Salesforce component deploy |
| run-tests.md | Always | Run Apex test classes with coverage |
| validate.md | Always | Validate-only deploy (CI-safe) |
| create-apex-class.md | Developer | Create Apex class following project standards |
| create-lwc.md | Developer | Scaffold LWC with SLDS best practices |
| create-trigger.md | Developer | Create trigger using Kevin O'Hara pattern |
| adr.md | Architect | Architecture Decision Record template |
| release.md | DevOps | Release checklist and deployment plan |
| create-scratch-org.md | DevOps | Scratch org setup with permission sets |
| run-playwright.md | QA | Run Playwright tests and capture report |
| generate-test-report.md | QA | Generate test coverage report |
| sprint-plan.md | PM | Create sprint plan with Gantt timeline |
| status-report.md | PM | Generate weekly status report |
| risk-register.md | PM | Maintain project risk register |
| deploy-analytics.md | CRMA | Deploy CRM Analytics dashboards and dataflows |
AI Skills
The plugin generates reusable AI skills (.cursor/skills/ for Cursor, portable markdown for other tools) for profiles that need them.
| Skill | Generated For | Description |
| --------------------- | ---------------------------- | ------------------------------------------------------------------------------------------------ |
| Story Mapping | BA, PM, Architect | Jeff Patton–style story maps rendered as Mermaid diagrams (PDF) |
| Deploy & Validate | Developer, Architect, DevOps | Guided deploy/validate using @jterrats/profiler and @jterrats/smart-deployment plugins |
| Diagram Export | BA, PM, Architect, Developer | Export Mermaid diagrams to Lucidchart (API), draw.io (XML), or local SVG/PDF with auto-detection |
Install
sf plugins install @jterrats/setup-agentsRequirements
- Salesforce CLI (
sf) v2+ - Node.js >= 18
Troubleshooting: ETARGET date restriction
If you see an error like:
npm error notarget No matching version found for @jterrats/[email protected] with a date before ...Your npm configuration restricts package installation to versions published before a certain date. This is controlled by the before and min-release-age options in ~/.npmrc.
Fix:
npm config delete before
npm config set min-release-age 0
sf plugins install @jterrats/setup-agents@latestTo verify your current settings:
npm config get before
npm config get min-release-ageNote:
min-release-ageis a security feature that prevents installing packages published less than N days ago (supply chain protection). Setting it to0disables the restriction. If you prefer to keep it enabled, wait the configured number of days after a release before installing, or usesf plugins link .from a local clone.
Commands
sf setup-agentssf setup-agents agentforce-deploysf setup-agents background runsf setup-agents canvas cleansf setup-agents canvas statussf setup-agents canvas syncsf setup-agents dashboardsf setup-agents decision addsf setup-agents decision listsf setup-agents decision rendersf setup-agents diagram importsf setup-agents diagram migratesf setup-agents diagram rendersf setup-agents docssf setup-agents docs syncsf setup-agents evidence addsf setup-agents evidence compactsf setup-agents evidence generatesf setup-agents evidence listsf setup-agents evidence validatesf setup-agents exportsf setup-agents extract html-to-markdownsf setup-agents extract pdf-to-markdownsf setup-agents handoff createsf setup-agents handoff listsf setup-agents importsf setup-agents initsf setup-agents knowledge refreshsf setup-agents localsf setup-agents mcpsf setup-agents offline guidesf setup-agents offline statussf setup-agents report generatesf setup-agents review completesf setup-agents review listsf setup-agents review requestsf setup-agents rules injectsf setup-agents servesf setup-agents statussf setup-agents syncsf setup-agents task archivesf setup-agents task claimsf setup-agents task createsf setup-agents task deletesf setup-agents task donesf setup-agents task listsf setup-agents task updatesf setup-agents task viewsf setup-agents updatesf setup-agents verifysf setup-agents workflow benchmarksf setup-agents workflow clarifysf setup-agents workflow clarify-listsf setup-agents workflow clarify-respondsf setup-agents workflow decomposesf setup-agents workflow estimatesf setup-agents workflow executesf setup-agents workflow gatesf setup-agents workflow lessonssf setup-agents workflow pendingsf setup-agents workflow phase-plansf setup-agents workflow playbookssf setup-agents workflow release-checksf setup-agents workflow rollbacksf setup-agents workflow runsf setup-agents workflow sprint closesf setup-agents workflow sprint startsf setup-agents workflow sprint velocitysf setup-agents workflow telemetry
sf setup-agents
Generate a dependency-aware metadata catalog from a Salesforce source directory.
USAGE
$ sf setup-agents [--json] [--flags-dir <value>] [--full] [--format json|md] [--include <value>] [--exclude
<value>] [--source-dir <value>]
FLAGS
--exclude=<value> Comma-separated list of metadata types to exclude.
--format=<option> [default: json] Output format: json (default) or md.
<options: json|md>
--full Force a full scan instead of incremental git-diff mode.
--include=<value> Comma-separated list of metadata types to include (others are excluded).
--source-dir=<value> [default: force-app] Source directory to scan (default: force-app).
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Generate a dependency-aware metadata catalog from a Salesforce source directory.
Scans the specified source directory (default: force-app), parses all recognized Salesforce metadata types (Apex
classes, triggers, LWC, objects, fields, flows, permission sets, labels), builds a dependency graph, and outputs the
index to .setup-agents/sf-metadata-index.json (or .md with --format md).
Supports incremental indexing via git-diff mode (default) which only re-indexes changed files, or --full for a
complete rescan.
EXAMPLES
Generate a full metadata index:
$ sf setup-agents --full
Generate index in markdown format:
$ sf setup-agents --format md
Index only Apex classes and triggers:
$ sf setup-agents --include ApexClass,ApexTrigger
Index from a custom source directory:
$ sf setup-agents --source-dir src/main
FLAG DESCRIPTIONS
--exclude=<value> Comma-separated list of metadata types to exclude.
Exclude the specified types from indexing. Valid types: ApexClass, ApexTrigger, LightningComponentBundle,
CustomObject, CustomField, Flow, PermissionSet, CustomLabel.
--full Force a full scan instead of incremental git-diff mode.
By default, the index command uses git-diff mode to only re-index files changed since the last commit. Use --full to
scan all files regardless of changes.
--include=<value> Comma-separated list of metadata types to include (others are excluded).
Only index the specified types. Valid types: ApexClass, ApexTrigger, LightningComponentBundle, CustomObject,
CustomField, Flow, PermissionSet, CustomLabel.See code: src/commands/setup-agents/index.ts
sf setup-agents agentforce-deploy
Generate and deploy an Agentforce agent to a Salesforce org.
USAGE
$ sf setup-agents agentforce-deploy [--json] [--flags-dir <value>] [--target-org myOrgAlias] [--profile
developer|architect|ba|mulesoft|ux|cgcloud|devops|qa|crma|data360] [--dry-run] [-f]
FLAGS
-f, --force Overwrite existing agent metadata
files.
--dry-run Generate metadata locally without
deploying.
--profile=developer|architect|ba|mulesoft|ux|cgcloud|devops|qa|crma|data360 [default: developer] Role profile to
use for agent behavior (default:
developer).
--target-org=myOrgAlias Salesforce org alias or username to
deploy the agent to.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Generate and deploy an Agentforce agent to a Salesforce org.
Generates Salesforce metadata (BotDefinition, GenAiPlanner, Topics, PromptTemplates) for
a deployable Agentforce agent tailored to the selected profile, then deploys it to the target org.
Use `--dry-run` to generate metadata locally without deploying.
EXAMPLES
Deploy an Agentforce agent with developer profile:
$ sf setup-agents agentforce-deploy --target-org myOrg --profile developer
Generate metadata without deploying (dry run):
$ sf setup-agents agentforce-deploy --dry-run --profile architect
Deploy with force overwrite:
$ sf setup-agents agentforce-deploy --target-org myOrg --force
FLAG DESCRIPTIONS
-f, --force Overwrite existing agent metadata files.
Force overwrite of all generated metadata files, even if they already exist.
--dry-run Generate metadata locally without deploying.
When set, the command generates all Agentforce metadata files under `force-app/main/default/`
but does not execute `sf project deploy start`. Useful for reviewing generated metadata before deploying.
--profile=developer|architect|ba|mulesoft|ux|cgcloud|devops|qa|crma|data360
Role profile to use for agent behavior (default: developer).
Determines which topics, prompt templates, and system instructions the agent will use.
Valid profiles: developer, architect, ba, mulesoft, ux, cgcloud, devops, qa, crma, data360.
--target-org=myOrgAlias Salesforce org alias or username to deploy the agent to.
The target org where the Agentforce agent metadata will be deployed.
Required unless `--dry-run` is used.See code: src/commands/setup-agents/agentforce-deploy.ts
sf setup-agents background run
Launch an allow-listed long-running command in a durable background lane.
USAGE
$ sf setup-agents background run [--json] [--flags-dir <value>] [--label <value>] [--port <value>] [--chat-session
<value>]
FLAGS
--chat-session=<value> Originating chat session id, used to correlate the background task to the chat panel.
--label=<value> Human-friendly label shown in the chat UI for this background task.
--port=<value> Bridge server port. Defaults to SETUP_AGENTS_BRIDGE_PORT, then 4195.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Launch an allow-listed long-running command in a durable background lane.
Delegates a long-running, side-effecting command (Salesforce metadata retrieve/deploy, package operations, or a
project build) to the running setup-agents bridge server, which executes it as a detached process that OUTLIVES the
current chat turn.
This exists so work the agent starts inside a chat turn — `sf project retrieve start`, `sf project deploy start`, `npm
run build` — is not killed when the turn ends, when the user hits Stop, when the idle session is reaped, or when the
session respawns on the next message.
The command after `--` must match the background allow-list: `sf project ...`, `sf package ...`, `npm run build`, or
`yarn build`. Anything else is rejected. Lifecycle (started/completed/failed) is reported to the web console via the
bridge's spawn event stream.
Requires a running bridge (`sf setup-agents serve`). The bridge port is discovered from the `SETUP_AGENTS_BRIDGE_PORT`
environment variable, or supplied with `--port`.
EXAMPLES
Run a metadata retrieve in the background:
$ sf setup-agents background run --label "Retrieve Apex" -- sf project retrieve start -m ApexClass
Run a project build in the background:
$ sf setup-agents background run -- npm run buildSee code: src/commands/setup-agents/background/run.ts
sf setup-agents canvas clean
Remove orphan files from the Cursor canvas cache.
USAGE
$ sf setup-agents canvas clean [--json] [--flags-dir <value>] [--path <value>] [--yes]
FLAGS
--path=<value> Target repository path (default: git root of current directory).
--yes Skip confirmation prompt and remove orphans immediately.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Remove orphan files from the Cursor canvas cache.
Finds files in `~/.cursor/projects/<slug>/canvases/` that have no matching source canvas in the repo and removes them.
Prompts for confirmation unless `--yes` is supplied or stdout is non-TTY.
EXAMPLES
Remove orphans interactively:
$ sf setup-agents canvas clean
Remove orphans without prompting:
$ sf setup-agents canvas clean --yesSee code: src/commands/setup-agents/canvas/clean.ts
sf setup-agents canvas status
Show the state of Cursor canvas cache entries.
USAGE
$ sf setup-agents canvas status [--json] [--flags-dir <value>] [--path <value>]
FLAGS
--path=<value> Target repository path (default: git root of current directory).
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Show the state of Cursor canvas cache entries.
Lists each source canvas and its state in the Cursor cache: symlink pointing to the correct source (`symlink-ok`),
symlink with a wrong target (`symlink-wrong`), a regular (possibly stale) file (`regular`), or absent from the cache
(`missing`). Also reports orphan cache files with no repo counterpart.
EXAMPLES
Check canvas status for the current repo:
$ sf setup-agents canvas statusSee code: src/commands/setup-agents/canvas/status.ts
sf setup-agents canvas sync
Sync Cursor canvas cache with repo source files.
USAGE
$ sf setup-agents canvas sync [--json] [--flags-dir <value>] [--dry-run] [--init] [--clean] [--path <value>]
FLAGS
--clean Remove orphan files in cache after syncing.
--dry-run Preview changes without writing anything.
--init Create the cache directory if it does not exist.
--path=<value> Target repository path (default: git root of current directory).
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Sync Cursor canvas cache with repo source files.
Replaces each cached `.canvas.tsx` file under `~/.cursor/projects/<slug>/canvases/` with a symlink to the repo source
so edits made outside Cursor are reflected immediately on reopen.
Supported canvas locations (first match wins): `docs/canvases`, `canvases`, `src/canvases`.
EXAMPLES
Sync canvases for the current repo:
$ sf setup-agents canvas sync
Preview without making changes:
$ sf setup-agents canvas sync --dry-run
Initialize cache dir and sync:
$ sf setup-agents canvas sync --init
Sync and remove orphans:
$ sf setup-agents canvas sync --cleanSee code: src/commands/setup-agents/canvas/sync.ts
sf setup-agents dashboard
Generate a delivery dashboard from local workflow state.
USAGE
$ sf setup-agents dashboard [--json] [--flags-dir <value>] [-p <value>] [--open] [-f html|json]
FLAGS
-f, --format=<option> [default: html] Output format: html (default) or json.
<options: html|json>
-p, --output=<value> [default: docs/dashboard.html] Output file path for the HTML dashboard.
--open Open the dashboard in the default browser after generation.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Generate a delivery dashboard from local workflow state.
Reads `.setup-agents/state/tasks.jsonl` and `workflow-runs.jsonl` and produces a standalone HTML dashboard (Chart.js,
SLDS colors) or a JSON metrics payload. No org connection required.
Default output path: `docs/dashboard.html`.
EXAMPLES
Generate dashboard at default path:
$ sf setup-agents dashboard
Custom output path:
$ sf setup-agents dashboard --output reports/delivery.html
Open in browser after generation:
$ sf setup-agents dashboard --open
Print raw JSON metrics:
$ sf setup-agents dashboard --format json
FLAG DESCRIPTIONS
-f, --format=html|json Output format: html (default) or json.
`html` writes a standalone Chart.js file. `json` prints the metrics payload to stdout and does not write a file.
-p, --output=<value> Output file path for the HTML dashboard.
Path where the HTML file will be written. Defaults to `docs/dashboard.html`.See code: src/commands/setup-agents/dashboard.ts
sf setup-agents decision add
Add a setup-agents decision record.
USAGE
$ sf setup-agents decision add -s <value> [--json] [--flags-dir <value>] [-t <value>] [-r <value>] [-p
developer|ta|sa|ba|pm|mulesoft|ux|cgcloud|devops|qa|crma|commerce|data360|admin|sfmc|security|salescloud|service|cpq
|omnistudio|fsl|ai|slack|tableau|experience-cloud|release-manager|fsc|health|manufacturing|communications|automotive
|education|netzero|nonprofit|public-sector|media|energy|revenue|maps|loyalty|industries] [--rationale <value>]
[--status proposed|accepted|superseded] [--outcome <value>] [--alternative <value>] [--evidence <value>]
FLAGS
-p, --profile=developer|ta|sa|ba|pm|mulesoft|ux|cgcloud|devops|qa|crma|commerce|data360|admin|sfmc|security|salescloud
|service|cpq|omnistudio|fsl|ai|slack|tableau|experience-cloud|release-manager|fsc|health|manufacturing|communications|
automotive|education|netzero|nonprofit|public-sector|media|energy|revenue|maps|loyalty|industries
Owning setup-agents profile.
-r, --role=<value>
[default: developer] Owning role for this decision.
-s, --summary=<value>
(required) Short decision summary.
-t, --task=<value>
Task or issue id for this decision.
--alternative=<value>
Alternatives considered.
--evidence=<value>
Related evidence ids.
--outcome=<value>
Decision outcome.
--rationale=<value>
Decision rationale.
--status=<option>
[default: accepted] Decision status.
<options: proposed|accepted|superseded>
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Add a setup-agents decision record.
Appends a JSON Lines decision entry to `.setup-agents/state/decisions.jsonl`.
Decision records capture selected approaches, rationale, ownership, timestamps, and optional task ids.
EXAMPLES
Add an accepted decision for a task:
$ sf setup-agents decision add --task SA-96 --profile architect --summary "Use native JSONL records" --rationale \
"Keeps setup-agents independent of external engines"
FLAG DESCRIPTIONS
-p, --profile=developer|ta|sa|ba|pm|mulesoft|ux|cgcloud|devops|qa|crma|commerce|data360|admin|sfmc|security|salescloud|service|cpq|omnistudio|fsl|ai|slack|tableau|experience-cloud|release-manager|fsc|health|manufacturing|communications|automotive|education|netzero|nonprofit|public-sector|media|energy|revenue|maps|loyalty|industries
Owning setup-agents profile.
Record the setup-agents profile responsible for the decision.
-r, --role=<value> Owning role for this decision.
Record the current role or agent owner responsible for the decision.
-s, --summary=<value> Short decision summary.
Describe the decision in one concise sentence.
-t, --task=<value> Task or issue id for this decision.
Associate the decision with a task id such as `SA-96` or `#96`.
--alternative=<value> Alternatives considered.
Comma-separated alternatives considered before this decision.
--evidence=<value> Related evidence ids.
Comma-separated evidence record ids that support this decision.
--outcome=<value> Decision outcome.
Record the outcome text for the decision. When omitted, the status is used.
--rationale=<value> Decision rationale.
Add the reason this decision was made.
--status=proposed|accepted|superseded Decision status.
Set whether the decision is proposed, accepted, or superseded.See code: src/commands/setup-agents/decision/add.ts
sf setup-agents decision list
List setup-agents decision records.
USAGE
$ sf setup-agents decision list [--json] [--flags-dir <value>] [-t <value>] [-r <value>] [-p <value>] [--status <value>] [-l
<value>]
FLAGS
-l, --limit=<value> [default: 20] Maximum records to show.
-p, --profile=<value> Filter by owning setup-agents profile.
-r, --role=<value> Filter by owning role.
-t, --task=<value> Filter by task or issue id.
--status=<value> Filter by decision status.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
List setup-agents decision records.
Reads JSON Lines decision entries from `.setup-agents/state/decisions.jsonl`.
EXAMPLES
List recent decisions:
$ sf setup-agents decision list
List accepted decisions for a task:
$ sf setup-agents decision list --task SA-96 --status accepted
FLAG DESCRIPTIONS
-l, --limit=<value> Maximum records to show.
Limit the number of matching records returned from the end of the decision log.
-p, --profile=<value> Filter by owning setup-agents profile.
Show only decision records owned by the given setup-agents profile.
-r, --role=<value> Filter by owning role.
Show only decision records owned by the given role.
-t, --task=<value> Filter by task or issue id.
Show only decision records associated with the given task id.
--status=<value> Filter by decision status.
Show only decisions matching the given status.See code: src/commands/setup-agents/decision/list.ts
sf setup-agents decision render
Render decision records as Markdown ADRs.
USAGE
$ sf setup-agents decision render [--json] [--flags-dir <value>] [--id <value> | --all]
FLAGS
--all Render every decision record.
--id=<value> Decision record id to render.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Render decision records as Markdown ADRs.
Reads decision records from `.setup-agents/state/decisions.jsonl` and writes human-reviewable Markdown ADRs to
`docs/adr/`.
The JSONL log stays the canonical source; `docs/adr/` is a derived render. Each record is written to
`docs/adr/ADR-<id>.md` so the record id is recoverable from the filename. This command never mutates
`decisions.jsonl`.
EXAMPLES
Render every decision record as an ADR:
$ sf setup-agents decision render --all
Render a single decision record:
$ sf setup-agents decision render --id setup-agents-decision-1700000000000-abc123
FLAG DESCRIPTIONS
--all Render every decision record.
Render all decision records found in the decision log.
--id=<value> Decision record id to render.
Render only the decision record with this id.See code: src/commands/setup-agents/decision/render.ts
sf setup-agents diagram import
Import an existing diagram or org metadata into AgentDiagramData JSON.
USAGE
$ sf setup-agents diagram import -i <value> [--json] [--flags-dir <value>] [-f force-app|drawio|mermaid|md|auto] [--out
<value>] [-t <value>]
FLAGS
-f, --from=force-app|drawio|mermaid|md|auto [default: auto] Source adapter: force-app, drawio, mermaid, md, or auto
(infer from the path — directory → force-app, by extension otherwise).
-i, --input=<value> (required) Path to the source: a force-app directory, a .drawio file, a
.mmd Mermaid file, or a .md Markdown file.
-t, --title=<value> Diagram title. Defaults to the input file/directory name.
--out=<value> Path to write the AgentDiagramData JSON. When omitted, the model is
printed to stdout.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Import an existing diagram or org metadata into AgentDiagramData JSON.
Builds the canonical AgentDiagramData model from a real source — force-app metadata, an existing draw.io file, a
Mermaid `.mmd`, or a Markdown file with an embedded `mermaid` block — so `sf setup-agents diagram render` can
re-lay-it-out optimally instead of you hand-authoring the JSON. Each source normalizes to the same model: nodes are
entities/objects (never fields — an ERD models objects, a field's relationship becomes an edge), edges are
relationships, and `group` is inferred per source (namespace for force-app, subgraph/swimlane for drawio/mermaid).
Output goes to a file with `--out`, or to stdout when `--out` is omitted; pipe it into `diagram render`.
EXAMPLES
`sf setup-agents diagram import --input force-app --from force-app --out model.json`
`sf setup-agents diagram import --input docs/erd.drawio --out model.json`
`sf setup-agents diagram import -i diagram.mmd --out model.json && sf setup-agents diagram render -i model.json -f drawio -o /tmp/erd.drawio`
`sf setup-agents diagram import -i design.md` (extracts the embedded mermaid block, prints the model)See code: src/commands/setup-agents/diagram/import.ts
sf setup-agents diagram migrate
Migrate a drawio ERD to use orthogonal routing, row-level connections, and dagre layout.
USAGE
$ sf setup-agents diagram migrate -f <value> [--json] [--flags-dir <value>] [--relayout] [--node-sep <value>] [--rank-sep
<value>]
FLAGS
-f, --file=<value> (required) Path to the drawio file to migrate.
--node-sep=<value> [default: 100] Horizontal separation between nodes (dagre nodesep).
--rank-sep=<value> [default: 180] Vertical separation between ranks (dagre ranksep).
--relayout Reposition tables using dagre layout engine.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Migrate a drawio ERD to use orthogonal routing, row-level connections, and dagre layout.
Applies best-practice ERD rendering to an existing drawio file: orthogonal edge style, PK/FK row-level connections,
label backgrounds, and optional dagre relayout.
EXAMPLES
`sf setup-agents diagram migrate --file docs/architecture/erd.drawio`
`sf setup-agents diagram migrate --file erd.drawio --relayout`See code: src/commands/setup-agents/diagram/migrate.ts
sf setup-agents diagram render
Render structured AgentDiagramData JSON to Mermaid, draw.io XML, maxGraph JSON, SVG, or PDF.
USAGE
$ sf setup-agents diagram render -i <value> [--json] [--flags-dir <value>] [-f mermaid|drawio|maxgraph-json|svg|pdf] [-o
<value>]
FLAGS
-f, --format=mermaid|drawio|maxgraph-json|svg|pdf [default: mermaid] Output format: mermaid, drawio, maxgraph-json,
svg, or pdf.
-i, --input=<value> (required) Path to an AgentDiagramData JSON file.
-o, --out=<value> Path to write the rendered output. When omitted, the result is
printed to stdout.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Render structured AgentDiagramData JSON to Mermaid, draw.io XML, maxGraph JSON, SVG, or PDF.
Reads an AgentDiagramData JSON document and renders it with the plugin's deterministic diagram renderer. Use this
instead of hand-rolling a one-off conversion script. The AgentDiagramData shape is: `{ type, title?, direction?,
nodes: [{ id, label, shape?, group?, style? }], edges: [{ from, to, label?, style?, arrowhead? }], participants?,
messages? }`. Output goes to a file with `--out`, or to stdout when `--out` is omitted. The `svg` and `pdf` formats
emit the same painted diagram the web-console shows (orthogonal edge routing, ER row-level connections, group bands) —
not raw mxGraph XML. `pdf` requires `--out` and a local puppeteer install.
EXAMPLES
`sf setup-agents diagram render --input data.json --format mermaid`
`sf setup-agents diagram render --input data.json --format drawio --out docs/architecture/diagram.drawio`
`sf setup-agents diagram render -i data.json -f maxgraph-json -o diagram.json`
`sf setup-agents diagram render -i data.json -f svg -o diagram.svg`
`sf setup-agents diagram render -i data.json -f pdf -o diagram.pdf`See code: src/commands/setup-agents/diagram/render.ts
sf setup-agents docs
Render workspace markdown as a PDF document or interactive HTML deck.
USAGE
$ sf setup-agents docs -i <value> --review <value> [--json] [--flags-dir <value>] [--output <value>] [--deck | --pdf]
FLAGS
-i, --input=<value> (required) Directory of markdown files, or a comma-separated list of markdown files.
--deck Render an interactive Salesforce-branded HTML deck.
--output=<value> Path to write the generated PDF or HTML deck.
--pdf Render a linear PDF document.
--review=<value> (required) Path to the approved document quality review JSON.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Render workspace markdown as a PDF document or interactive HTML deck.
Choose exactly one output format: `--pdf` renders a linear PDF document, while `--deck` renders a self-contained
interactive HTML presentation. Both formats render embedded Mermaid diagrams and inline local images.
EXAMPLES
Create an interactive deck from a markdown file:
$ sf setup-agents docs --deck --input presentation.md --output presentation.html --review \
presentation-review.json
Create a PDF document from every markdown file under a directory:
$ sf setup-agents docs --pdf --input docs --output documentation.pdf --review documentation-review.json
FLAG DESCRIPTIONS
-i, --input=<value> Directory of markdown files, or a comma-separated list of markdown files.
A directory is walked recursively for `*.md` and `*.markdown` files and sorted. A comma-separated list preserves the
given order.
--deck Render an interactive Salesforce-branded HTML deck.
Splits markdown at each top-level heading (`#`) and adds previous/next controls, keyboard navigation, URL slide
hashes, and fullscreen mode. Deck output is always self-contained HTML.
--output=<value> Path to write the generated PDF or HTML deck.
When omitted, writes `document-<timestamp>.pdf` or `deck-<timestamp>.html` in the current directory.
--pdf Render a linear PDF document.
Consolidates the markdown into a Salesforce-branded PDF. Use `--deck` instead for an interactive HTML presentation.
--review=<value> Path to the approved document quality review JSON.
Required for every render. The review must approve the exact ordered input files and SHA-256 source digest, use an
independent reviewer, and contain no open blocking findings.See code: src/commands/setup-agents/docs.ts
sf setup-agents docs sync
Sync Salesforce documentation for profiles to local cache.
USAGE
$ sf setup-agents docs sync [--json] [--flags-dir <value>] [-p <value>] [--force] [--max-pages <value>]
FLAGS
-p, --profile=<value> Profile to sync documentation for.
--force Re-download even if documentation is already cached.
--max-pages=<value> [default: 5] Maximum pages to download per doc source.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Sync Salesforce documentation for profiles to local cache.
Downloads documentation from developer.salesforce.com and caches it locally in `.setup-agents/docs/<profile>/` so
sub-agents can read it on demand during workflow execution.
EXAMPLES
Sync all registered profiles:
$ sf setup-agents docs sync
Sync a specific profile:
$ sf setup-agents docs sync --profile loyalty
Force re-download even if cached:
$ sf setup-agents docs sync --profile fsc --force
FLAG DESCRIPTIONS
-p, --profile=<value> Profile to sync documentation for.
When omitted, syncs documentation for all profiles that have registered doc sources. Use this to sync a single
profile.
--force Re-download even if documentation is already cached.
By default, previously synced documentation is skipped. Use --force to re-download and overwrite.
--max-pages=<value> Maximum pages to download per doc source.
Controls how many sub-pages are fetched from each documentation source. Higher values provide more detail but take
longer. Default is 5.See code: src/commands/setup-agents/docs/sync.ts
sf setup-agents evidence add
Add a setup-agents evidence record.
USAGE
$ sf setup-agents evidence add -s <value> [--json] [--flags-dir <value>] [--target-dir <value>] [-t <value>] [-r <value>] [-p
developer|ta|sa|ba|pm|mulesoft|ux|cgcloud|devops|qa|crma|commerce|data360|admin|sfmc|security|salescloud|service|cpq
|omnistudio|fsl|ai|slack|tableau|experience-cloud|release-manager|fsc|health|manufacturing|communications|automotive
|education|netzero|nonprofit|public-sector|media|energy|revenue|maps|loyalty|industries] [--type
command|file|screenshot|trace|report|validation|lesson|other] [--kind
command|file|screenshot|trace|report|validation|lesson|other] [--source <value>] [--command <value>] [--path
<value>] [--exit-code <value>] [--details <value>] [--minutes <value>]
FLAGS
-p, --profile=developer|ta|sa|ba|pm|mulesoft|ux|cgcloud|devops|qa|crma|commerce|data360|admin|sfmc|security|salescloud
|service|cpq|omnistudio|fsl|ai|slack|tableau|experience-cloud|release-manager|fsc|health|manufacturing|communications|
automotive|education|netzero|nonprofit|public-sector|media|energy|revenue|maps|loyalty|industries
Owning setup-agents profile.
-r, --role=<value>
[default: developer] Owning role for this evidence.
-s, --summary=<value>
(required) Short evidence summary.
-t, --task=<value>
Task or issue id for this evidence.
--command=<value>
Command that produced this evidence.
--details=<value>
Additional evidence details.
--exit-code=<value>
Command exit code.
--kind=<option>
Evidence kind.
<options: command|file|screenshot|trace|report|validation|lesson|other>
--minutes=<value>
Measured human-effort minutes (for `manual` / `review` evidence).
--path=<value>
Evidence path.
--source=<value>
Evidence source reference.
--target-dir=<value>
Workspace root to target (defaults to cwd).
--type=<option>
[default: other] Evidence type.
<options: command|file|screenshot|trace|report|validation|lesson|other>
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Add a setup-agents evidence record.
Appends a JSON Lines evidence entry to `.setup-agents/state/evidence.jsonl`.
Evidence records capture validation artifacts such as commands, files, screenshots, traces, reports, or notes.
ID format: `setup-agents-evidence-<unix_ms>-<6_random_alnum>` (auto-generated).
EXAMPLES
Add command evidence for a task:
$ sf setup-agents evidence add --task SA-96 --profile developer --type command --source "npm run build" \
--summary "Build passed"
FLAG DESCRIPTIONS
-p, --profile=developer|ta|sa|ba|pm|mulesoft|ux|cgcloud|devops|qa|crma|commerce|data360|admin|sfmc|security|salescloud|service|cpq|omnistudio|fsl|ai|slack|tableau|experience-cloud|release-manager|fsc|health|manufacturing|communications|automotive|education|netzero|nonprofit|public-sector|media|energy|revenue|maps|loyalty|industries
Owning setup-agents profile.
Record the setup-agents profile responsible for the evidence.
-r, --role=<value> Owning role for this evidence.
Record the current role or agent owner responsible for the evidence.
-s, --summary=<value> Short evidence summary.
Describe the evidence in one concise sentence.
-t, --task=<value> Task or issue id for this evidence.
Associate the evidence with a task id such as `SA-96` or `#96`.
--command=<value> Command that produced this evidence.
Record the command string used to produce command evidence.
--details=<value> Additional evidence details.
Add optional supporting details that should be stored with the evidence record.
--exit-code=<value> Command exit code.
Record the exit code for command evidence.
--kind=command|file|screenshot|trace|report|validation|lesson|other Evidence kind.
Alias for `--type`.
--minutes=<value> Measured human-effort minutes (for `manual` / `review` evidence).
Minutes a human spent on this work. Use with `--type manual` (hands-on platform execution: Setup config not possible
via metadata/tooling API, MIAW, data fixes) or `--type review` (gate approvals, architecture corrections,
direction). The effort insights sum these as real human effort (GH-445).
--path=<value> Evidence path.
Record a file, report, screenshot, or trace path.
--source=<value> Evidence source reference.
Reference a command, file path, URL, report path, trace id, or other source for the evidence.
--target-dir=<value> Workspace root to target (defaults to cwd).
Explicit workspace directory for state writes. When omitted, uses the current working directory.
--type=command|file|screenshot|trace|report|validation|lesson|other Evidence type.
Classify the evidence as command, file, screenshot, trace, report, validation, lesson, or other.See code: src/commands/setup-agents/evidence/add.ts
sf setup-agents evidence compact
Compact and archive old evidence records.
USAGE
$ sf setup-agents evidence compact [--json] [--flags-dir <value>] [-d <value>] [--dry-run] [-t <value>]
FLAGS
-d, --older-than-days=<value> [default: 30] Age threshold in days.
-t, --task=<value> Only compact records for a specific task.
--dry-run Preview what would be compacted without writing.
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Compact and archive old evidence records.
Moves evidence records older than the specified threshold into an archive file,
reducing the size of the active evidence log.
EXAMPLES
Compact evidence older than 30 days:
$ sf setup-agents evidence compact
Preview compaction of 60-day-old records:
$ sf setup-agents evidence compact --older-than-days 60 --dry-run
Compact evidence for a specific task:
$ sf setup-agents evidence compact --task SA-96
FLAG DESCRIPTIONS
-d, --older-than-days=<value> Age threshold in days.
Archive evidence records older than this many days (default: 30).
-t, --task=<value> Only compact records for a specific task.
Restrict compaction to evidence records associated with the given task id.See code: src/commands/setup-agents/evidence/compact.ts
sf setup-agents evidence generate
Generate QA evidence (test, coverage, lint) and record it.
USAGE
$ sf setup-agents evidence generate -t <value> [--json] [--flags-dir <value>] [--target-dir <value>] [-k
all|test|coverage|lint]
FLAGS
-k, --kind=<option> [default: all] Which evidence to generate.
<options: all|test|coverage|lint>
-t, --task=<value> (required) Task or issue id for the generated evidence.
--target-dir=<value> Workspace root to target (defaults to cwd).
GLOBAL FLAGS
--flags-dir=<value> Import flag values from a directory.
--json Format output as json.
DESCRIPTION
Generate QA evidence (test, coverage, lint) and record it.
Runs the built-in QA evidence generators and appends the results to `.setup-agents/state/evidence.jsonl` as `report`
evidence for the given task.
- `test` runs `npx mocha --reporter json` and records pass/fail/skip counts.
- `coverage` parses `coverage/lcov.info` and records line/function/branch percentages.
- `lint` runs ESLint and records error/warning counts.
- `all` (default) runs the three concurrently and reports an overall status.
Use this instead of hand-rolling a script