practice-wdyd
Drill a single interview question with persona-driven feedback, arsenal cross-references, and spaced repetition selection
What this skill does
<references>
- references/feedback-rubric.md
- references/answer-anti-patterns.md
- references/stage-coaching.md
</references>
<purpose>
Select a question using spaced repetition, adopt an interviewer persona, coach the user's answer, then log a detailed session file.
</purpose>
<steps>
<step id="load-config" 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.</if>
<read path="<home>/.things/shared/professional-profile.json" output="profile" />
<read path="<home>/.things/what-did-you-do/preferences.json" output="preferences" />
<if condition="preferences-missing">Tell the user: "Run `/setup-wdyd` first." Then stop.</if>
</load-config>
</step>
<step id="load-arsenal" number="2">
<description>Load the User's Arsenal</description>
<action>Read all files in `<home>/.things/i-did-a-thing/arsenal/` to understand logged skills and evidence. Read professional goals from `<home>/.things/shared/professional-profile.json`.</action>
<if condition="no-logs-exist">
> You haven't logged any entries yet. Run `/thing-i-did` first so I have your arsenal to coach you with. I can still ask questions, but my feedback will be much richer with your evidence loaded.
</if>
</step>
<step id="load-session-history" number="3">
<description>Load Session History</description>
<command language="bash" tool="Bash">bash <plugin_root>/scripts/search-sessions.sh --recent 10</command>
<constraint>Use recent session data for spaced repetition: avoid recently asked questions, weight toward weak dimensions.</constraint>
</step>
<step id="select-persona" number="4">
<description>Select Persona</description>
<if condition="persona-specified">
<read path="<home>/.things/shared/roles/<persona>.md" output="persona" />
</if>
<if condition="no-persona-specified">
<action>Select based on the question's `interviewer_types` field.</action>
</if>
<if condition="no-persona-and-no-question-yet">
<ask-user>
Who's interviewing you today?
<options>
- Staff Engineer -- technical depth, architecture, tradeoffs
- Engineering Manager -- collaboration, communication, growth
- Principal Engineer -- system thinking, organizational impact
- Bar Raiser -- judgment, ownership, cross-functional depth
- Recruiter -- motivation, culture fit, communication clarity
- Surprise -- I'll pick based on the question
</options>
</ask-user>
</if>
<action>Read the selected persona file and adopt their voice, evaluation weights, and follow-up patterns.</action>
</step>
<step id="select-category" number="5">
<description>Select Question Category</description>
<if condition="category-provided">
<action>Use the provided category argument.</action>
</if>
<if condition="no-category-provided">
<ask-user>
What kind of question?
<options>
- `behavioral` -- "Tell me about a time when..."
- `technical` -- Architecture, code quality, operations
- `system-design` -- End-to-end system architecture
- `leadership` -- Mentorship, decisions, strategy
- `situational` -- "What would you do if..."
- `surprise` -- Weighted toward your gaps
</options>
</ask-user>
</if>
</step>
<step id="select-question" number="6">
<description>Select Question Using Spaced Repetition</description>
<action>Read `<plugin_root>/questions/<category>.yaml` and `<home>/.things/what-did-you-do/questions/custom.yaml` for custom questions.</action>
<algorithm name="spaced-repetition">
<phase name="filter-category" number="1">Filter by category (and stage if `default_stage` is set in config).</phase>
<phase name="filter-level" number="2">Filter by level appropriate to `current_role` and `target_roles`.</phase>
<phase name="filter-recency" number="3">Filter out questions asked in the last 7 days (from session history).</phase>
<phase name="score-candidates" number="4">
Score remaining questions:
- `weakness_weight = 5 - avg_score_for_skills_tested` (from session history)
- `recency_bonus = days_since_last_asked / 14` (capped at 2.0)
- `aspirational_bonus = 1.5 if any skill_tested is in aspirational_skills, else 0`
- `total = weakness_weight + recency_bonus + aspirational_bonus`
</phase>
<phase name="weighted-random" number="5">Select from top-scored questions with some randomness (weighted random, not strictly top).</phase>
</algorithm>
</step>
<step id="ask-question" number="7">
<description>Ask the Question</description>
<action>Present the question in the persona's voice.</action>
<template name="persona-question">
> **[Persona Name]**: <question>
>
> Take your time. Answer as if you're in an actual interview.
</template>
<constraint>Note the question's `time_budget_minutes` and `expected_format` for coaching context, but don't display them to the user.</constraint>
</step>
<step id="analyze-answer" number="8">
<description>Receive and Analyze the Answer</description>
<action>After the user answers, analyze against five dimensions (from `references/feedback-rubric.md`).</action>
<rubric>
1. Specificity (1-5) -- Concrete details vs vague claims
2. Structure (1-5) -- Clear narrative arc (STAR/CAR)
3. Impact (1-5) -- Quantified outcomes, scope of effect
4. Relevance (1-5) -- Actually answers the question asked
5. Self-Advocacy (1-5) -- Owns contribution without hogging credit
</rubric>
<validate>Check the answer against the question's `red_flags` and `green_flags`.</validate>
<action>Cross-reference with arsenal, prioritizing evidence types by question theme.</action>
<if condition="question-about-failure-or-challenge">Prioritize `lesson` entries from arsenal.</if>
<if condition="question-about-expertise-or-depth">Prioritize `expertise` entries.</if>
<if condition="question-about-technical-decision">Prioritize `decision` entries.</if>
<if condition="question-about-influence-or-mentoring">Prioritize `influence` entries.</if>
<if condition="question-about-vision-or-hypothetical">Prioritize `insight` entries.</if>
<if condition="standard-behavioral-question">Default to `accomplishment` entries.</if>
For each relevant arsenal entry:
- Find logged entries that could strengthen the answer
- Identify skills demonstrated but not mentioned
- Note metrics from logs they could have cited
</step>
<step id="follow-ups" number="9">
<description>Deliver Follow-Ups (Based on Depth Config)</description>
Based on `follow_up_depth` in config:
<if condition="depth-concise">
<action>Skip follow-ups. Go directly to feedback.</action>
</if>
<if condition="depth-detailed">
<action>Ask the question's `depth: 2` follow-up in the persona's voice. Analyze the follow-up answer.</action>
</if>
<if condition="depth-coaching">
<action>Ask `depth: 2` follow-up, analyze, then ask `depth: 3` follow-up. Continue the conversation until the user is satisfied.</action>
</if>
</step>
<step id="deliver-feedback" number="10">
<description>Deliver Feedback</description>
<action>Use the persona's voice and evaluation weights. Reference `references/feedback-rubric.md` for scoring and `references/answer-anti-patterns.md` for anti-pattern detection. Use `references/stage-coaching.md` for stage-specific guidance.</action>
<templatRelated 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.