with one click
gus-cli
Interact with the Gus Salesforce org via CLI (sf). Query, create, update work items; query team epics. Use when user mentions Gus, work items, epics, or GUS/Git2Gus workflows.
Menu
Interact with the Gus Salesforce org via CLI (sf). Query, create, update work items; query team epics. Use when user mentions Gus, work items, epics, or GUS/Git2Gus workflows.
| name | gus-cli |
| description | Interact with the Gus Salesforce org via CLI (sf). Query, create, update work items; query team epics. Use when user mentions Gus, work items, epics, or GUS/Git2Gus workflows. |
Interact with Gus (Salesforce Agile Accelerator org) via sf CLI. Requires alias gus in sf alias list.
sf data create record / sf data update record after user says yes (or equivalent)Id (e.g. a07...) is for CLI commands. Name (e.g. W-12345) is for human display and PR titles appended as - W-12345 at the end per pr-draft Title format. NEVER use Id in PR titles or descriptions. Always query Name after creation.sf alias list --json; parse result for alias matching gus (case-insensitive)sf org login web -a gus-o gusCache: $HOME/.claude/runner-identity.json — {userId, username, ownerPrefix, slackId, githubLogin}.
sf alias list --json → entry /^gus$/i. Missing → sf org login web -a gus. Value = currentUsername.cached.username === currentUsername) → use it.sf data query --query "SELECT Id FROM User WHERE Username = '<currentUsername>' LIMIT 1" -o gus --result-format json → userIdcurrentUsername to ## Team members row → githubLogin, slackId. ownerPrefix = initials lowercase (Shane McLaughlin → sm; one-word → first 2 chars).mkdir -p $HOME/.claude && write JSON.Invalidate: alias change auto-detects. Manual: rm $HOME/.claude/runner-identity.json.
Same session: reuse conversation value; don't re-read.
| Constant | Value |
|---|---|
| Team ID | a00B0000000w9xPIAQ |
| Product Tag | a1aB000000005G3IAI |
| User Story RecordTypeId | 0129000000006gDAAQ |
Always use User Story RecordTypeId. Never create Bug records. If user describes a bug/repro, still create it as a User Story.
Objects: ADM_Work__c, ADM_Epic__c (not ADM_Theme__c).
Default when unassigned: Platform Dev Tools Scrum Team 005B0000000GIODIA4 – use when work isn't assigned to a person yet.
| Name | Id | GitHub login | Slack ID |
|---|---|---|---|
| Cristina Cañizales | 005EE000008cgrGYAQ | CristiCanizales | U040DRU0ADA |
| Daphne Yang | 005EE000005d0jdYAA | daphne-sfdc | U03CKVATVCY |
| Jonny Hork | 005B0000004pYWjIAM | jonnyhork | WFGT1L8HF |
| Kyle Walker | 005EE0000010oCLYAY | kylewalke | U02GCUGEAUU |
| Madhur Shrivastava | 005EE00000VZK5FYAX | madhur310 | U0852LWKWSW |
| Peter Hale | 005B0000000GFvWIAW | peternhale | WAR9BDB8T |
| Shane McLaughlin | 005B00000024wGBIAY | mshanemc | WB4TF6RFY |
Base select: SELECT Id, Name, Subject__c, Status__c, Story_Points__c, Epic__c, RecordType.Name FROM ADM_Work__c
Query patterns (combine as needed; use LIMIT on broad queries):
| Filter | WHERE clause |
|---|---|
| Mine | Assignee__c = '<userId>' |
| By status | Status__c = 'In Progress' (or other) |
| By epic | Epic__c = '<epicId>' |
| Unpointed | Story_Points__c = null |
| Team's open | Scrum_Team__c = 'a00B0000000w9xPIAQ' AND Status__c NOT IN ('Closed', 'Completed', 'Closed - Duplicate', 'Closed - Resolved With Internal Tools', 'Closed - No Fix - Working as Designed', ...) |
| Epic + open | Epic__c = '<epicId>' AND Status__c NOT IN ('Closed', 'Completed', ...) |
Closed statuses: see ## Status__c values. Use LIMIT 50 (or 100) when querying team or epic work.
Create: Always set Story_Points__c=2, Product_Tag__c=a1aB000000005G3IAI, RecordTypeId. Include Subject__c, Assignee__c, Scrum_Team__c=a00B0000000w9xPIAQ, Epic__c (optional), QA_Engineer__c (optional), Details__c (optional). Leave Sprint__c blank; never modify it. Details__c: write concisely—fragments/bullets, minimal words, no repetition (see .claude/skills/concise/SKILL.md).
-v + --flags-dir don't combine on create: -v takes precedence; flags-dir values are dropped. Workaround: create without Details, then update with --flags-dir only.
Details__c formatting (readable WI body): Details__c is a Rich Text Area (extraTypeInfo: richtextarea)—use HTML, not markdown. The -v flag parses space-separated key=value; use --flags-dir with a values file (ref):
mkdir -p /tmp/gus-flagsvalues with one line: Details__c='<p><strong>Section</strong></p><p>Content. <code>inline code</code></p><ul><li>item</li></ul><p><strong>Ref:</strong> <a href="https://...">url</a></p>'sf data update record -s ADM_Work__c -i <id> -o gus --flags-dir /tmp/gus-flagsConstraints: File must be single-line (flags-dir treats each line as a separate flag invocation). Value in single quotes. Use HTML: <p>, <strong>, <code>, <ul><li>, <a href="...">. Avoid unescaped " inside value—use " or rephrase.
After create: Always provide the work item link. Format: https://gus.lightning.force.com/lightning/r/ADM_Work__c/<recordId>/view (replace <recordId> with the Id from the create output, e.g. a07EE00002V3a8YYAR). Example: a07EE00002V3a8YYAR.
CRITICAL: After creation, you MUST query the Name (W-XXXXX) to append to the PR title as - W-XXXXX. The id returned by sf data create is NOT the W-XXXXX name.
sf data query --query "SELECT Name FROM ADM_Work__c WHERE Id = '<id_from_create>'" -o gus --json
Update: If User Story has null Story_Points__c, set Story_Points__c=2. Never modify Sprint__c. Details__c can store PR links, notes.
sf data update record -s ADM_Work__c -i <recordId> -o gus -v "Status__c='In Progress' Subject__c='...' Details__c='...'"
Query team epics (exclude closed):
sf data query --query "SELECT Id, Name, Description__c FROM ADM_Epic__c WHERE Team__c = 'a00B0000000w9xPIAQ' AND Health__c NOT IN ('Completed', 'Canceled')" -o gus --result-format json
Closed = Health__c in ('Completed', 'Canceled'). Use Description__c when populated to match work to epic.
Use to pick the right Epic__c when creating work. Query epics first; match by Name/Description. Key epics:
IDEx - Mandates and Updates a3QEE0000023Fm92AE
IDEx - Trust a3QEE0000023FPZ2A2
effect services improvements a3QEE0000026sJ72AI
TDX 262 epics (Code Builder Web, CBLite, Org Browser on Web, LWC on web, Apex Testing Extension, etc.)
Backlog epics (IDE Exp - Core, Extensions, LWC & Aura, etc.)
When unsure which epic: ask the user.
[ai-auto] tag[ai-auto] in Subject__c or Details__c opts a WI into the auto-build-wi workflow (claim → plan → build → review → draft PR). See workflows/README.md.
Subject__c(Subject__c LIKE '%[ai-auto]%' OR Details__c LIKE '%[ai-auto]%')Create a WI from this PR
a3QEE0000023FPZ2A2) for bug-like issues unless PR/context indicates otherwise0129000000006gDAAQ (User Story — always, even for bug-like issues)sf data create record only after yesWhat's unfinished in this epic
Epic__c = '<epicId>' AND Status__c NOT IN (...) — use all values from ## Status__c values "Closed (terminal)" and "Bug no-fix"LIMIT 100; order by Status__c or NameWhen creating/updating, only use New,In Progress,Ready for Review,QA In Progress,Fixed,Waiting,Closed
When completing a work item, use Closed.
Flow: New → Acknowledged → Triaged → In Progress → Ready for Review → Fixed → QA In Progress → Completed/Closed
Blocked: Investigating | More Info Reqd from Support | Waiting On Customer | Waiting On 3rd Party | Waiting | Deferred | Integrate | Pending Release
Closed (terminal): Closed | Completed | Closed - Defunct | Closed - Duplicate | Closed - Eng Internal | Closed - Known Bug Exists | Closed - New Bug Logged | Closed - Resolved With Internal Tools | Closed - Resolved Without Code Change | Closed - Doc/Usability | Closed - Resolved with DB Script | Closed - No Fix - Working as Documented | Closed - No Fix - Working as Designed | Closed - No Fix - Feature Request | Closed - No Fix - Will Not Fix | Closed - Transitioned to Incident | Closed - Resolved by 3rd Party
Bug no-fix: Duplicate | Inactive | Never | Not a bug | Not Reproducible | Rejected | Eng Internal
--result-format json for parseable outputtail -1 or parse last object)sf data create record / sf data update record for single-record writeswriting, running, and debugging Playwright tests; creating and recreating scratch orgs (Dreamhouse, minimal, non-tracking); working with their output from github actions
Guidelines for consuming salesforcedx-vscode-services extension API. Use when working with extensions that have extensionDependency on salesforcedx-vscode-services, registering commands, using Workspace/Connection/Project/Settings/FS/Channel/Media services, quickpick/quickInput, implementing file/config watchers, editing extensionProvider.ts, buildAllServicesLayer, AllServicesLayer, setAllServicesLayer, prebuiltServicesDependencies, or Layer composition for VS Code extensions.
Enforces Effect-TS patterns for services, errors, layers, and atoms. Use when writing code with Effect.Service, Schema.TaggedError, Layer composition, or effect-atom React components.
Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.
Verification steps for code changes. Use after ANY code change to ensure quality, or when creating plans because those should include verification steps.
Polish the automated CHANGELOG for a release branch. Removes GUS refs, categorizes under-the-cover changes, improves customer-facing descriptions. Use when preparing/reviewing the changelog on a release branch, or when user mentions changelog quality.