thing-i-did
Log a professional experience - accomplishments, lessons, expertise, decisions, influence, or insights. Extracts context from arguments or conversation history for fast capture, or runs a full guided interview when context is sparse.
What this skill does
<purpose>
Walk the user through capturing a professional experience with enough depth and structure to be useful for resumes, interviews, and blog posts later. When the user provides rich context (pasted transcript, decision summary, or detailed description), extract fields automatically and confirm before writing. When context is sparse, fall back to a full guided interview that adapts based on the evidence type.
</purpose>
<steps>
<step id="load-configuration" number="1">
<description>Load Configuration</description>
<load-config>
<action>Resolve the user's home directory.</action>
<command language="bash" output="home" tool="Bash">echo $HOME</command>
<constraint>Never pass `~` to the Read tool.</constraint>
<read path="<home>/.things/config.json" output="config" />
<if condition="config-missing">Tell the user: "Run `/things:setup-things` first." Then stop.<exit /></if>
<read path="<home>/.things/shared/professional-profile.json" output="profile" />
<read path="<home>/.things/i-did-a-thing/preferences.json" output="preferences" />
<if condition="preferences-missing">Tell the user: "Run `/setup-idat` first." Then stop.<exit /></if>
</load-config>
</step>
<step id="load-professional-context" number="2">
<description>Load Professional Context</description>
<action>Read the professional profile from `<home>/.things/shared/professional-profile.json` -- the `current_role`, `target_roles`, `career_direction`, `building_skills`, and `aspirational_skills` fields. This context shapes which follow-up questions to ask and how to tag the entry.</action>
<action>Read default tags from `<home>/.things/i-did-a-thing/preferences.json`.</action>
</step>
<step id="assess-available-context" number="3">
<description>Assess Available Context</description>
Determine whether there is enough context to take a fast path (extract and confirm) or whether a full interview is needed.
<substep name="check-interview-flag">
<description>Check for Interview Flag</description>
<if condition="interview-flag-set">Strip the flag and jump to Step 4 (full interview). Use any remaining text after the flag as the brief description / starting point.</if>
</substep>
<substep name="gather-context">
<description>Gather Context</description>
<action>Collect context from two sources:</action>
- `$ARGUMENTS`: The text the user passed directly to the skill
- Conversation history: Prior messages in the current session that describe a professional experience
<if condition="no-relevant-context">Jump to Step 4 (full interview).</if>
<constraint>
What counts as relevant context:
- Descriptions of work done, decisions made, problems solved, lessons learned, expertise applied, influence exercised, or patterns observed
- Project/task specifics -- codebase names, team context, stakeholder interactions, timelines, outcomes
</constraint>
<constraint>
What does NOT count:
- Code debugging sessions or casual chat that isn't about a professional experience
- Prior skill runs (like `/practice-wdyd`) -- these are not themselves loggable events
- Generic greetings or unrelated conversation
</constraint>
</substep>
<substep name="extract-log-fields">
<description>Extract Log Fields</description>
<action>Attempt to extract all log fields from the combined context.</action>
Required fields -- must be present or inferrable for the fast path:
- `title` -- descriptive title for the entry
- `evidence_type` -- accomplishment, lesson, expertise, decision, influence, or insight
- `impact` -- major, notable, solid, or learning
- `category` -- technical, leadership, communication, problem-solving, process, growth, expertise, decision-making, or influence
- `skills_used` -- cross-reference against the user's `building_skills` and `aspirational_skills` from profile
- Body section content -- the narrative sections for this evidence type (see the table in Step 9)
Optional fields -- extract if present, skip if not:
- `description` -- 1-2 sentence summary
- `tags` -- searchable tags
- `skills_developed` -- new skills learned or grown
- `target_alignment` -- which professional targets this supports (from profile)
- `role_at_time` -- the user's role when this happened
- `team_or_org` -- team or organization context
- `duration` -- how long this took
- `metrics` -- quantifiable outcomes
<constraint>Project/task context preservation: When the context references a specific project, codebase, tool, or task, capture that specificity in the body sections, in `team_or_org`, and in tags. Don't generalize away the details -- "redesigned MyApp's prompt routing system" is better than "improved a system."</constraint>
<action>Classify each field as:</action>
- **confident** -- clearly stated or directly quotable from the context
- **inferrable** -- reasonably derivable from the context
- **missing** -- not enough information to determine
</substep>
<substep name="decision-gate">
<description>Decision Gate</description>
<if condition="fast-path-eligible">
Take the fast path (continue to "Present Summary"). Requires:
- `evidence_type` is confident or inferrable, AND
- At least 3 of the evidence type's body sections have confident content
</if>
<if condition="fast-path-not-eligible">Jump to Step 4 (full interview), carrying whatever was extracted as a head start so the user doesn't repeat themselves.</if>
</substep>
<substep name="present-summary">
<description>Present Summary for Confirmation</description>
<ask-user-question>
<question>Show everything extracted as a structured summary:
- Title, evidence type, impact, category
- Each body section with a preview (first 1-2 sentences)
- Skills used/developed
- Tags (auto-generated)
- Any optional fields that were extracted</question>
<option>Looks good -- proceed to fill gaps (if any) or directly to tag review (Step 8)</option>
<option-with-text-input>Some changes needed -- provide corrections</option-with-text-input>
<option>Full interview instead -- jump to Step 4 with the extracted title as starting point</option>
</ask-user-question>
</substep>
<substep name="fill-gaps">
<description>Fill Genuine Gaps</description>
<action>For each required field or body section still classified as missing, ask ONE focused question -- reuse the question text from the evidence-type interview in Step 6. Do not ask situational follow-ups on the fast path. After gaps are filled, proceed to Step 8 (tag review).</action>
</substep>
<if condition="multiple-loggable-events">Identify the primary one and mention the others. Offer to log the rest afterward (by running the skill again).</if>
</step>
<step id="start-interview" number="4">
<description>Start the Interview</description>
This is the full interview path -- used when context is sparse, when the user passes `--interview`, or when the user opts out of the fast path at the summary step.
<if condition="partial-extraction-available">Use it as the starting point. Acknowledge what you already know: "I have some context already -- let me fill in the details." Skip questions whose answers are already confident.</if>
<if condition="no-context-extracted">Ask the opening question:</if>
<ask-user-question>
<question>What's on your mind? Could be something you built, a lesson you learned, a topic you went deep on, a decision you shaped -- anything worth remembering.</question>
</ask-user-question>
</step>
<step id="classify-evidence-type" number="5">
<description>Classify thRelated 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.