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.
Install
npx skillscat add forcedotcom/salesforcedx-vscode/gus-cli Install via the SkillsCat registry.
Gus CLI
Interact with Gus (Salesforce Agile Accelerator org) via sf CLI. Requires alias gus in sf alias list.
Safety
- Queries (sf data query, sf alias list): run without asking
- Writes (create, update): do not execute until user explicitly confirms
- Present the draft (subject, epic, details, assignee). Ask: "Create this work item?" or "Update work item X?"
- Only run
sf data create record/sf data update recordafter user says yes (or equivalent) - Answering scope questions (e.g. "just createProject") is not confirmation—still ask
- Epic selection: when less than 50% sure which epic a work item belongs in, ask the user
Prerequisites
- Run
sf alias list --json; parseresultfor alias matchinggus(case-insensitive) - If missing: instruct user
sf org login web -a gus - All commands use
-o gus
User ID
- From step 1: gus entry
value= username sf data query --query "SELECT Id FROM User WHERE Username = '<username>' LIMIT 1" -o gus --result-format json- User Id =
result.records[0].Id - Reuse from earlier in conversation if already looked up this session; don't re-query
Constants
| Constant | Value |
|---|---|
| Team ID | a00B0000000w9xPIAQ |
| Product Tag | a1aB000000005G3IAI |
| User Story RecordTypeId | 0129000000006gDAAQ |
| Bug RecordTypeId | 012T00000004MUHIA2 |
Objects: ADM_Work__c, ADM_Epic__c (not ADM_Theme__c).
Team members (Assigneec, QA_Engineerc)
Default when unassigned: Platform Dev Tools Scrum Team 005B0000000GIODIA4 – use when work isn't assigned to a person yet.
| Name | Id |
|---|---|
| Cristina Cañizales | 005EE000008cgrGYAQ |
| Daphne Yang | 005EE000005d0jdYAA |
| Jonny Hork | 005B0000004pYWjIAM |
| Kyle Walker | 005EE0000010oCLYAY |
| Madhur Shrivastava | 005EE00000VZK5FYAX |
| Peter Hale | 005B0000000GFvWIAW |
| Shane McLaughlin | 005B00000024wGBIAY |
| Sonal Budhiraja | 005B0000005ccPnIAI |
Work items (ADM_Work__c)
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).
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-flags- Create
valueswith 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-flags
Constraints: 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.
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='...'"Epics (ADM_Epic__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 jsonClosed = Health__c in ('Completed', 'Canceled'). Use Description__c when populated to match work to epic.
Epic guide: which work items go where
Use to pick the right Epic__c when creating work. Query epics first; match by Name/Description. Key epics:
IDEx - Mandates and Updates a3QEE0000023Fm92AE
- Compliance, VSCode extensions major release, library/dependency upgrades (sfdx-core, Apex LS, etc.)
- Security/compliance work; keeping extensions on latest core features
IDEx - Trust a3QEE0000023FPZ2A2
- Customer investigations, bugs, trust backlog
effect services improvements a3QEE0000026sJ72AI
- Shared Effect library; common effect things that aren't runtime services
TDX 262 epics (Code Builder Web, CBLite, Org Browser on Web, LWC on web, Apex Testing Extension, etc.)
- Web IDE compatibility; running extensions in browser
Backlog epics (IDE Exp - Core, Extensions, LWC & Aura, etc.)
- Feature-area backlogs; use Name to match
When unsure which epic: ask the user.
Compound workflows
Create a bug from this PR
- Get PR context: title, body/description, URL (from git/GitHub if available)
- Resolve User Id (reuse from conversation if known)
- Pick epic: IDEx - Trust (
a3QEE0000023FPZ2A2) for bugs unless PR/context indicates otherwise - Subject__c: concise from PR title
- Details__c: PR link + key bullets; see .claude/skills/concise/SKILL.md
- RecordTypeId:
012T00000004MUHIA2(Bug) - Show draft, ask "Create this work item?" — run
sf data create recordonly after yes - After create: provide WI link (see After create above)
What's unfinished in this epic
- Get epic Id from user or context (branch name, prior query)
- Query:
Epic__c = '<epicId>' AND Status__c NOT IN (...)— use all values from ## Status__c values "Closed (terminal)" and "Bug no-fix" - Add
LIMIT 100; order by Status__c or Name - Present as table: Name, Subjectc, Statusc, Assignee (or run separate query for assignee names)
Status__c values
When 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
CLI tips
--result-format jsonfor parseable output- Strip CLI version warning before JSON parse (
tail -1or parse last object) sf data create record/sf data update recordfor single-record writes