vmenin.com Connect
AI-assisted Salesforce delivery · version 2.0

Salesforce BoosterThe same agents, rules and guardrails for every developer on the programme.

A delivery accelerator for large Salesforce programmes. It installs into an SFDX project and gives Claude Code and GitHub Copilot one shared configuration: specialist agents, skills and path-scoped rules. Unsafe actions are blocked by deterministic hooks, every change passes a quality gate that tells new findings from legacy debt, and a persona-based Playwright suite checks the result. Before an agent changes code, it asks OrgIntel what the change touches.

My own initiative Capgemini asset Claude Code GitHub Copilot Code Analyzer v5 Playwright
PS C:\work\acme-crm> pnpm run booster:doctor   ✓ Node.js ≥ 22.22.1  ✓ Salesforce CLI · Code Analyzer plugin  ✓ Java 11+ (PMD engine) · Python 3.10+ (Flow engine)  ✓ Playwright browser  ✓ AI configuration in sync  ✓ Legacy quality baseline  ✓ CODEOWNERS  ✓ OrgIntel checkout (knowledge base)  ✓ uv (runs the OrgIntel MCP server)   All checks passed.
1Shared practice set for Claude Code and GitHub Copilot
1Command to update a project
~100Consultants using it
~20 %Delivery time saved so far
50 %The target
0Passwords in the test suite
A first measure

The time saved is measured on client programmes while teams are still learning the tool, which is why the target sits well above it. Agents, skills and rules are added every release, so this page describes what they do rather than how many there are.

01 / The problem

AI assistants on a large Salesforce programme need more than a prompt

A long-lived org, a hundred developers and two assistants. Without a shared setup, every developer works with a different assistant, none of them knows the org, and the only safety net is an instruction the model may or may not follow.

Every developer prompts differently

A hundred people, two assistants, each with its own instruction file. The code that comes back follows a hundred conventions, and review cannot keep up.

Booster keeps one source for rules, agents and skills, and generates the files each assistant reads from it. A drift between them fails the pull request.

AGENTS.mdai:syncBoth clients

An instruction is followed most of the time

“Never force-push” in a prompt holds until the day it does not. Production orgs, credentials and protected branches need a guarantee.

Every rule that must hold is code: a hook that refuses the command and explains the compliant path, a permission, a git hook, a required CI check.

HooksDeny / askTested

Legacy debt breaks a zero-violation gate

The first version required zero violations per file. On an org with thousands of legacy classes, every touched file failed, so people avoided necessary fixes or bypassed the hooks.

The gate now compares each finding with a baseline of the existing debt: new findings block, legacy findings never do, and the baseline only shrinks.

Baseline ratchetClean as you code
02 / What it does

Four parts, installed into the project

Booster is installed into an existing SFDX repository with a pinned version, a dry run first, and a backup of any file the project had changed. It adds configuration, tools and tests; it never changes the org by itself.

One AI configuration for both assistants

Least-privilege specialist agents (impact analyst, solution designer, builder, test engineer, code reviewer, release manager and more), each with only the tools its job needs and a named agent to hand off to.

Skills with progressive disclosure, from impact analysis to SAFe delivery, and rule sets that load only for the files they govern: Apex, tests, LWC, Aura and Visualforce, Flows, metadata and security, integrations, end-to-end tests.

AgentsSkillsPath-scoped rules

Deterministic guardrails

One table of rules, enforced by the hooks of both assistants. It refuses force pushes, pushes to protected branches, --no-verify, writes to protected orgs, reading secrets or dumping the environment. It asks first before a deploy with no target org or a destructive data change.

Each refusal says why, and what to do instead. Every rule has a regression test.

One rule tableDeny / askBoth clients

A quality gate that knows the legacy

Salesforce Code Analyzer v5 (PMD 7, ESLint, regex, Flow scanner, retire-js) runs on the files a branch changes, plus Booster's own rules for hardcoded record Ids, org URLs, endpoints and email addresses.

Findings are matched to a baseline of legacy debt by a line-insensitive fingerprint. New ones block, old ones are reported, fixed ones are locked in. A waiver is a tech-lead decision, logged in a protected file.

Code Analyzer v5BaselineSARIF on the PR

A regression suite that logs in like users

Playwright with passwordless personas: each one is a real test user, signed in through a single-use session, so permissions are tested as people really have them. It works with MFA and stores no password anywhere.

Test data is created and cleaned through the API, waits follow the page state, and tags (tier, domain, persona, ticket) drive smoke, critical and regression runs, sharded in CI.

PersonasNo passwordsSharded
03 / How it works

From a story to a merged pull request, in seven steps

The same loop runs in Claude Code and in GitHub Copilot; only the way an agent is invoked differs. Each step hands off to the next agent, guardrails run underneath all of them, and a person merges, always.

Fig. 01 · the delivery loopclick a step · it walks itself · pause any time
The Booster delivery loop A story goes through seven steps, each led by a specialist agent: refine, impact, design, build, verify, review and release. The impact, design and build steps query the OrgIntel map of the org. The verify, review and release steps produce the evidence a pull request carries. Guardrails run underneath every step. The seven steps are described in full in the list below this diagram. STORY ACME-42 Jira · Gherkin 01 refine ready or not 02 impact org map first 03 design standard first 04 build test-first 05 verify numbers, not words 06 review no shared memory 07 release delta · smoke ORG MAP · ORGINTEL OVER MCP who_uses · dependencies · page · search asked before any code is searched answers cite a real path and line EVIDENCE · CARRIED BY THE PULL REQUEST quality gate · Apex · Jest · Playwright impact, evidence and rollout in the template plus a human-understanding checklist guardrails under every step · assistant hooks · git hooks · required CI checks · branch protection a person merges STORYACME-42 · Jira · Gherkin 01 refine ready or not 02 impact org map first 03 design standard first 04 build test-first 05 verify numbers, not words 06 review no shared memory 07 release delta · smoke ORG MAP · ORGINTEL OVER MCPwho_uses · dependenciesfeeds impact, design and build EVIDENCE · IN THE PULL REQUESTgate · Apex · Jest · E2Efrom verify, review, release guardrails under every stephooks · git · CI · a person merges
Hand-offs, not a chat

Each agent has a narrow job, the tools that job needs and nothing more, and a named agent to hand off to. The code reviewer reads the branch with no memory of how it was written, and it can only run read-only commands. Small, single-component fixes skip the loop through a quick-change skill.

  1. Refine

    requirements-analyst

    Turns a request into a story or an enabler with Gherkin acceptance criteria, checks it against the definition of ready, and challenges custom work when a standard feature already does the job.

  2. Impact

    impact-analyst

    Asks OrgIntel first: who uses the object, what runs on it and in which order, which contracts and which teams are involved. Returns the affected components, the tests to run and the owners. Another team's component means a dependency to raise, never a silent edit.

  3. Design

    solution-designer

    Standard first, then access, feature toggles and bypasses, and an architecture decision record when the choice matters. In Claude Code the plan is reviewed in plan mode, before any code exists.

  4. Build

    builder

    Test first: a characterisation test on the legacy behaviour, then the change behind a Custom Metadata toggle, then bulk, negative, permission and toggle-off tests. Each green step is committed.

  5. Verify

    /verify

    Lint, Jest, the quality gate and the related Apex tests on the developer's sandbox, then a read of the diff for unintended changes. It reports numbers, and a red gate lists only the findings this branch introduced.

  6. Review

    code-reviewer

    An independent review with no memory of how the code was written. Blocking findings are fixed, then the pull request is opened from a template that asks for the impact, the evidence, the rollout and a human-understanding checklist.

  7. Release

    release-manager

    Computes the delta, validates it and writes the release notes. After the deploy, the smoke suite runs; releases add the critical and regression tiers. Fixed legacy findings are pruned from the baseline in the same pull request.

Fig. 02 · one source, two assistantsgenerated, then checked in CI
One configuration source for Claude Code and GitHub Copilot AGENTS.md, the agent definitions, the path-scoped rules and the skills are the single source. A sync command generates the files Claude Code and GitHub Copilot each read. Both assistants query the same OrgIntel knowledge base over MCP. In continuous integration, a check fails the pull request if the generated files drift from the source. ONE SOURCE OF TRUTH AGENTS.md rules for every assistant ai/agents/ specialist agents ai/rules/ path-scoped rules .claude/skills/ procedures skills are read directly by both ai:sync Claude Code CLAUDE.md · .claude/agents · rules PreToolUse hooks · MCP wiring GitHub Copilot copilot-instructions · .github/agents hooks · auto-approve rules · MCP ORG KNOWLEDGE · ORGINTEL docs-rag/ + MCP server who_uses · dependencies page · search runs locally, next to the project cloud agents do not get it: they search code, and say so ai:check in CI · generated files in sync · skills valid · a drift fails the pull request ONE SOURCE OF TRUTH AGENTS.mdrules for every assistant ai/agents · ai/rulesagents and path-scoped rules .claude/skillsread directly by both ai:sync Claude Codeagents · hooksrules · MCP GitHub Copilotagents · hooksinstructions · MCP ORG KNOWLEDGE · ORGINTELdocs-rag/ + MCP server who_uses · dependencies · pagelocal only: cloud agents searchcode instead, and say so ai:check in CIa drift fails the pull request
Edit once, not twice

Agents and rules are edited in ai/, never in the generated folders. The sync writes both assistants' files, and the CI check refuses a pull request where they disagree, so Claude Code and Copilot cannot slowly become two different tools.

04 / Guardrails

What is enforced by code, and what is only asked

Instructions explain; code enforces. Anything that touches money, identity, compliance or a production org has a deterministic control, and the instruction that goes with it only explains the reason.

Fig. 03 · the enforcement layersleft of the line: cannot be talked around
Enforced controls versus instructions Left of the boundary, five layers enforce the rules in code: assistant hooks, permissions, git hooks, required CI checks and branch protection. Right of the boundary, AGENTS.md, the rules and the skills guide the assistant and explain why, but are followed probabilistically and are never the only line of defence. ENFORCED · CODE, TESTED assistant hooks one table · deny or ask permissions per agent · least privilege git hooks commit lint · pre-push gate required CI checks the gate is the authority branch protection a person merges a refusal names the rule and the compliant path an agent can never pass --no-verify; a person can, in an emergency ENFORCEMENT BOUNDARY ASKED · INSTRUCTIONS AGENTS.md · rules · skills conventions, patterns, procedures the reason behind each control followed most of the time guidance never the only line of defence ENFORCED · CODE, TESTEDassistant hooksone table · deny or askpermissionsper agent · least privilegegit hookscommit lint · pre-push gaterequired CI checksthe gate is the authoritybranch protectiona person mergesENFORCEMENT BOUNDARY ASKED · INSTRUCTIONSAGENTS.md · rules · skills the reason behind each controlfollowed most of the timenever the only line of defence
One table, two clients

The rules live in one table. Claude Code and GitHub Copilot both load it through their own hooks, so a rule added once applies to both. When a hook cannot run, it fails closed, and the doctor command says why.

Asked firstA person decides

What needs a human yes

Legitimate, sometimes necessary, and expensive when wrong. The hook stops and asks.

askthe developer confirms
  • A deploy with no --target-org, which would go to whatever the default org is.
  • A destructive metadata change or a data deletion.
  • A Playwright run while a production unlock is in force.
  • Editing a generated file instead of its source in ai/.
05 / See it work

A session, a refused command and a quality gate

A working miniature built on fixtures: an ACME story about invoices, not a client. Pick a scenario on the left, open the quality gate and change a line, or open the agent catalogue. Click anything. It also runs itself while you read.

~/work/acme-crm · feat/ACME-42-invoice-auto-approval · impact-analyst
you Use the impact-analyst to analyse ACME-42: invoices under the approval threshold are approved automatically. What runs on Invoice__c, and who is affected?
impact-analyst Querying OrgIntel before searching any code.
orgintel who_uses("Invoice__c") → 9 components
orgintel dependencies("InvoiceService", depth=2)
On save, in order: InvoiceTrigger → InvoiceTriggerHandler → InvoiceService.submit, then the record-triggered flow Invoice_Submit.
Also reads the object: LWC invoiceApproval, permission set Invoice_Approver, the ERP sync over the named credential ERP_Invoice.
ERP_Invoice_Sync belongs to another team: raise the dependency at the ART sync, do not edit it.
Tests to run: InvoiceServiceTest, InvoiceTriggerHandlerTest, Playwright @invoice @critical.
hand-off solution-designer
Live Scenarios, tabs, the gate buttons and the agent catalogue all work. The refusal texts are the rules' own wording; the org, the story and the findings are fixtures.
Fig. 04 · the baseline ratchetwhy adoption does not need to fix the past
How the quality gate classifies a finding Code Analyzer runs on the files the branch changes. Each finding is fingerprinted and compared with the committed baseline of legacy debt. A new finding at severity 3 or higher blocks; a new lower-severity finding is advisory; a finding already in the baseline never blocks; a baseline entry no longer found is reported as fixed and pruned, so the baseline only shrinks. A tech lead can waive a new finding, which adds it to the baseline and logs the reason in a protected file. changed files vs the base branch CODE ANALYZER V5 PMD 7 · ESLint · Flow regex · retire-js · CPD + hardcoded Ids, URLs, emails FINGERPRINT rule + file + normalised line + occurrence NEW · severity ≤ 3 blocks the push and the PR NEW · lower severity advisory, listed EXISTING · in the baseline never blocks: legacy debt FIXED · no longer found pruned: the baseline only shrinks waiver · quality:baseline:accept a tech lead's call, with a reason and a ticket baseline and WAIVERS.md are protected by CODEOWNERS · the debt trend is measured every programme increment changed filesvs the base branchCODE ANALYZER V5PMD 7 · ESLint · Flowregex · retire-js · Ids, URLsFINGERPRINTrule + file + normalised line+ occurrenceNEW · severity ≤ 3blocks the push and the PRNEW · lower severityadvisory, listedEXISTING · in the baselinenever blocks: legacy debtFIXED · no longer foundpruned: the baseline shrinkswaiver · baseline:accepta tech lead, a reason, a ticketprotected by CODEOWNERSdebt trend measured each increment
Clean as you code

New code is clean, touched code is not worse, and the baseline only goes down. That is what lets a programme adopt a strict gate on day one without fixing ten years of history first, while the hotspot report (churn × debt) tells the teams where enabler work pays most.

06 / Non-negotiables

Six principles, each backed by a control

They are written in the project's AGENTS.md for every assistant to read, and each one has a hook, a check or a template behind it.

Ask the org map first

Impact analysis goes through OrgIntel before any code search. On a large org, crawling files for dependents is slow, costly and incomplete.

Code enforces, prompts ask

A rule that must hold is a hook, a permission or a CI check. The instruction only explains it.

Clean as you code

New code is clean, touched code is not worse, the legacy baseline only shrinks, and every waiver is logged.

Evidence over claims

The verify step reports numbers. A pull request carries its gate result and its test evidence, not a statement that it works.

Humans own every merge

The author must be able to explain every line an assistant wrote. The pull request template asks, and branch protection waits for a person.

No secret in a transcript

Agents cannot read key files or the CLI auth store, print tokens or dump the environment. Tests read credentials from environment variables.

07 / Who it is for

One setup, read differently by each role

The documentation starts from the reader's role. Business analysts and product owners get story refinement and impact analysis; the roles below get a dedicated guide.

Programme & architects

An adoption plan in batches with champions, AI governance, architecture decision records, and a debt trend measured every programme increment.

Developers

A daily workflow from branch to merge, prompts that work, and a /project-help skill that reads the branch and says what to do next.

Tech leads

The gate policy, waivers, the legacy-code strategy and the hotspot report that points enabler capacity at the debt that hurts.

QA & test automation

Persona onboarding, page objects for Lightning, LWC and Visualforce, specs that run unchanged against a translated org, and execution evidence.

08 / Available today

Version 2.0, in use on client programmes

What follows is the state of the tool as it stands. It runs on client programmes, with a pinned version per project, and it updates with one command.

What lands in the project

Configuration, tools and tests next to the Salesforce source. Nothing is deployed to the org by the installer.

acme-crm/ ├── AGENTS.md rules for every assistant ├── ai/ agents + rules, the source ├── .claude/ skills, agents, hooks (generated) ├── .github/ Copilot agents, hooks, CI workflows ├── quality/baseline/ legacy debt + WAIVERS.md ├── tests/e2e/ Playwright personas, page objects ├── tools/ guards, gate, installer, doctor ├── customer.config.yml one file per project └── docs/booster/ guides per role, ADRs
Pinned versionDry runAir-gapped option

What you can run

Every check a developer needs is one pnpm run away, and the same commands run in CI.

$ pnpm run booster:doctor is this machine ready? $ pnpm run verify lint, Jest, gate, numbers $ pnpm run quality:gate changed files vs baseline $ pnpm run quality:hotspots churn × debt $ pnpm run e2e:smoke · e2e:critical · e2e:regression $ pnpm run ai:sync · ai:check $ pnpm run orgintel:check docs travel with the feature $ pnpm run prod:unlock a person only, never an agent $ booster update install, then every check
Same in CIWindows-first

Shorter answers, half the code

Two output modes are on by default: terse prose, and lean code that reuses before it writes. On a small benchmark (48 answers, 6 Salesforce tasks, one model), both together cut prose by 60 % and the code from 133 to 65 lines, with every hidden test still passing.

A direction, not a guarantee: small single-function tasks, and the limits are written down next to the numbers.

12 / 12 passedMeasured

Orgs with no sandbox

Some programmes have to work against a production org. The production override covers that case end to end: a person unlocks one alias in their own terminal, with a reason, a ticket and an expiry.

Shell commands and the Playwright suite both respect it, CI always refuses, and the test report states that the run is not sandbox evidence.

Off by defaultExpires

Updates that leave a trace

booster update installs the new version, then runs the doctor, verify, the tool tests, the Playwright typecheck and the OrgIntel check, and prints one summary.

A file the project had changed is never replaced silently: it is named, and its previous content is kept. Files the new version no longer ships are removed the same way.

One commandBacked up
09 / Where it goes

From one strict setup to policies a programme can choose

Version 2.0 applies one set of guardrails to everyone. The work in progress lets each programme choose how strict it wants to be, and see the cost of that choice before making it.

  1. Shipped

    Version 2.0

    One configuration for Claude Code and GitHub Copilot; specialist agents, skills and path-scoped rules; guardrails enforced on both clients; the baseline quality gate on Code Analyzer v5; passwordless persona testing; pinned CI workflows; the OrgIntel wiring; and the production override, extended to the Playwright suite.

  2. In build

    Guardrail policies, install profiles and a cockpit

    A policy file with light, standard and strict profiles; install profiles from AI configuration only to the full set, each with the risk it leaves open; and a configuration cockpit with a guardrail matrix, a simulator and the agent and skill inventory.

  3. Next

    Evidence before the pull request, and the client's own documents

    A local Code Analyzer pass required before a pull request is opened. Ingestion of the client's documentation (office files, PDF, Confluence and Jira). Skill evaluations run across several model sizes, then model and effort set per agent from the results.

  4. With OrgIntel

    Impact analysis in CI

    When OrgIntel ships pull-request impact analysis, the CI pipeline calls it next to the quality gate, so every pull request carries the list of components it touches.

Status, stated plainly

Salesforce Booster started as my own initiative. Capgemini now offers it to its clients as a Capgemini asset, and about 100 consultants use it. It is not a product you can download, and it is not sold as one. If it is relevant to a programme you are responsible for, the conversation starts on LinkedIn.