npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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

Readme

setup-agents ⚡ — Agentic Development Framework for Salesforce

Configure once. Let agents drive.

Plugin version Extension version Downloads CI License Node.js

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 trail

Phases 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 verificationworkflow run --autonomous uses 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/*.md for automated dev tasks in Vibes chat
  • MCP integrationsf setup-agents mcp wires @salesforce/mcp into 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,crma stacks 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 local

The 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 Cloud

Unsigned 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 Code

Full 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 --> local

Files 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-agents

Requirements

  • 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@latest

To verify your current settings:

npm config get before
npm config get min-release-age

Note: min-release-age is a security feature that prevents installing packages published less than N days ago (supply chain protection). Setting it to 0 disables the restriction. If you prefer to keep it enabled, wait the configured number of days after a release before installing, or use sf plugins link . from a local clone.


Commands

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 build

See 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 --yes

See 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 status

See 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 --clean

See 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