jira-ticket
Create a SAAS Jira ticket. Just describe what you're working on and it handles the rest.
What this skill does
# Create Jira Ticket
Create a ticket in the SAAS project with smart defaults so the developer can just describe the work in plain English.
## Input
`$ARGUMENTS` — A free-form description of the work. Can be as brief as a title or as detailed as needed. Examples:
- `/jira-ticket fix the login redirect bug`
- `/jira-ticket refactor the pillow processor to reduce memory usage`
- `/jira-ticket investigate formplayer memory spikes, assign to Graham`
- `/jira-ticket Delete FF follow-up: remove old SMS settings model, hours`
- `/jira-ticket update exports page header, assign to Daniel, P3`
- `/jira-ticket add case search filter, in the ERM epic, hours`
- `/jira-ticket Subtask 1: add geolocation to formplayer, under SAAS-18500`
## Defaults & Constants
- **Project:** `SAAS` (always)
- **Cloud ID:** `dbff467f-3c3f-4ced-a2ba-a29e1941edd6`
- **Effort Range field:** `customfield_10160`
- **Sprint field:** `customfield_10010`
## Assignee (Dynamic)
The assignee is determined from the input using natural language:
1. **If the user mentions someone by name** (e.g., "assign to Daniel", "for Graham", "Ahmad should do this", "give this to Evan"), use `lookupJiraAccountId` to search for that person's name and use their `accountId`.
2. **If no one is mentioned**, assign to self — use `atlassianUserInfo` to get the current authenticated user's account ID. Developers self-assign 94% of the time.
3. **If the user explicitly says "unassigned"**, do not set `assignee_account_id`.
Never hardcode an assignee ID. Always resolve dynamically.
## Issue Type Detection
Infer the issue type from the description using natural language. The user does NOT need to use exact keywords — understand intent.
**Based on dev team patterns:** Task is overwhelmingly dominant (88% of IC dev tickets). Improvement is a distant second. Bug and Story are rare. The team does not use the `Feature`, `Design`, or `New Feature` issue types.
| Issue Type | Exact Jira Name | When to Use |
|---|---|---|
| Task | `Task` | **Default for almost everything.** New functionality, creating things, investigations, follow-ups, migrations, deletions, management commands, specs, testing, FF cleanup, hotfixes. If "add", "new", "create", "implement", "build", "investigate", "delete", "set up", "test", "remove", "merge", "track", "confirm", "validate", "spec" — use Task. |
| Improvement | `Improvement` | Enhancing something that **already works** and the user explicitly frames it as an improvement: "improve", "refactor", "optimize", "clean up", "enhance", "modernize", "simplify", "consolidate", "better error message", "disable when already", "replace X with Y". Only use this when the intent is clearly about making an existing thing better, not building something new. |
| Bug | `Bug` | Something is **broken or wrong** and the user explicitly says so: "bug", "broken", "crash", "error", "fails", "regression", "not working". Devs rarely file bugs (3% of tickets) — most bug tickets come from support. |
| Performance/Scale | `Performance/Scale` | Infrastructure performance issues: "slow", "performance", "memory spikes", "latency", "OOM", "bottleneck", "connection spikes", "apdex". |
| Story | `Story` | User stories, research spikes, ideation, UX research. Very rarely used. |
**Important:** Use the exact Jira name from the second column when calling `createJiraIssue`. When in doubt, use `Task`.
## Summary Style
The team writes summaries in a consistent style. Follow these conventions:
1. **Sentence case** — NOT Title Case. Write "Investigate formplayer memory usage" not "Investigate Formplayer Memory Usage".
2. **Verb-first** when possible — The most common starting verbs on the team are: Create, Delete, Investigate, Test, Remove, Track, Confirm, Validate, Merge, Accept, Separate, Downsize.
3. **Keep it under 80 characters** — concise but descriptive. Median is 55 chars.
4. **Preserve user prefixes** — If the user includes a prefix pattern, keep it exactly as-is. Common team patterns:
- `Delete FF: ...` (feature flag removal — most common pattern)
- `Delete FF follow-up: ...` (post-deletion cleanup)
- `GA FF: ...` (GA feature flag work)
- `User & Security Features: ...` (feature audit)
- `Data & Export Features: ...` (feature audit)
- `Subtask N: ...` (numbered subtasks)
- `Onboarding: ...` (onboarding tasks)
- `[Investigation] ...` or `[Mobile] ...` (bracket tags)
- `Hotfix X.Y.Z - ...` (hotfix tasks)
5. **Strip metadata from summary** — Remove effort, priority, assignee, and epic references. The summary should only contain the work description.
## Effort Range
The **Effort Range** (`customfield_10160`) is required. Infer from natural language in the input:
| Value | Jira Option ID | Trigger Signals |
|---|---|---|
| Hours | `10384` | "hours", "hour", "quick", "small", "a few hours", "half day", "simple" |
| Days | `10385` | "days", "day", "a day or two", "multi-day", "several days", "large" |
| Too Large - Needs Breaking Down | `11973` | "too large", "needs breaking down", "epic-sized", "needs to be split", "way too big" |
| Awaiting Score | `10383` | "not sure", "unsure", "unknown effort", "TBD", "awaiting score" |
| N/A | `10426` | "n/a", "not applicable" |
**Default when no effort is mentioned:** Use `Hours` (id: `10384`). This matches 62-79% of dev-created tickets. Only ask the user if the work sounds like it could be multi-day or ambiguous.
## Priority Detection
Detect priority from the input using natural language. If no priority is mentioned, **do not set it** — the Jira default is P6 and developers almost never override this (88-98% leave it at P6). Only set priority when the user explicitly mentions it.
| Priority | Jira ID | Trigger Signals |
|---|---|---|
| P1 | `1` | "P1", "blocker", "site down", "production down", "outage", "SEV1", "sev-1" |
| P2 | `2` | "P2", "urgent", "ASAP", "critical", "SEV2", "drop everything" |
| P3 | `3` | "P3", "high priority", "important", "soon" |
| P4 | `4` | "P4", "normal priority", "medium priority" |
| P5 | `5` | "P5", "low priority", "when you get a chance", "not urgent" |
| P6 | `10000` | "P6" (rarely set explicitly — it's the default) |
| P7 | `10001` | "P7", "someday", "lowest" |
Set priority via `additional_fields`: `"priority": {"id": "<priority_id>"}`
## Epic Linking
If the user mentions an epic, link the new ticket as a child of that epic using the `parent` field on `createJiraIssue`.
**Team patterns:** Developers link to a parent epic ~80-100% of the time. However, don't always interrupt the flow to ask — use judgment:
- **Ask about epic** when the work sounds like it belongs to a larger initiative (feature work, multi-step projects, anything that implies related tickets exist). Phrase it as: "Should this be under an epic? (paste a SAAS key, describe it, or say 'no')"
- **Skip the question** when the work is clearly standalone: quick bug fixes, hotfixes, one-off investigations, small cleanup tasks, or anything where the user's phrasing signals urgency or simplicity ("quick fix", "hotfix", "one-off", "small cleanup"). Just create the ticket without an epic — the user can always add one later.
**How to detect epic references (natural language):**
- "in the X epic" / "under the X epic" / "part of X" / "belongs to X epic"
- "epic: SAAS-1234" / "parent: SAAS-1234" / "under SAAS-1234"
- Any mention of a SAAS ticket key that turns out to be an Epic
- "no epic" / "none" / "skip" → do not set a parent
**How to resolve the epic:**
1. If the user gives a **ticket key** (e.g., "SAAS-18371"), use it directly as the `parent` value.
2. If the user gives a **name or description** (e.g., "in the ERM epic", "under the RabbitMQ replacement epic"), search for it:
- Use JQL: `project = SAAS AND issuetype = Epic AND statusCategory != Done AND summary ~ "<search terms>" ORDER BY created DESC`
- If exactly one match, use it. If multiple, show the top 3 and ask the user to pick.
- If none found, tell the user and ask for the ticket kRelated in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.