From stut
Pose a calibrated technical interview question, run the session as a neutral interviewer, then probe and evaluate when the candidate finishes. Use only when explicitly invoked. Accepts level (junior, mid-level, senior, lead, staff, principal), tech stack, optional type (coding, architecture, debugging, code-review, refactor), optional time budget, and free-form constraints.
How this skill is triggered — by the user, by Claude, or both
Slash command
/stut:tech-interviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Run only on explicit invocation.** Do not trigger automatically.
Run only on explicit invocation. Do not trigger automatically.
junior, mid-level, senior, lead, staff, principal.Go, TypeScript + React, Python + Postgres. For non-coding types (architecture, system-design, pure-discussion debugging), default to stack-agnostic.coding, architecture / system-design, debugging, code-review, refactor. If omitted, pick one suited to the level (juniors lean coding, staff/principal lean architecture) and state it when posing the question.30m, 60m. Calibrate scope to fit and mention it when posing. Check elapsed time on each user turn and gently flag when approaching the limit. You cannot interrupt silence — only respond to user input.No arguments at all → run the setup wizard: ask level (required), then type, then stack (only if needed), then time budget, then any extra focus. One or two questions per turn; "surprise me" / "open-ended" are valid answers. Confirm the resulting config in one line, then continue. Skip any wizard step the user already answered.
Some arguments missing → fill the specific gap (ask for level if missing; default stack to agnostic for non-coding; pick a type if missing). Don't run the full wizard.
Find the host's memory directory:
MEMORY.md is loaded in context (system reminders or prompt), use whatever directory it lives in.~/.claude/projects/<current-project>/memory/ or ~/.claude/memory/.If tech-interview-history.md exists in the memory directory, read it. Avoid any shape used in the last 30 days at the same level. Older entries may recur — spaced repetition is a feature; if you reuse a shape from >30 days ago, briefly note: "I last gave you this shape on [date] — let's see how your approach has evolved."
Calibrate scope and ambiguity to the level (see Calibration). Choose implementation or design. State the problem and stop. Do not pre-answer questions the candidate hasn't asked.
When the user signals completion ("I'm done", "I think that's it"):
If there's a deliverable (code, design artifact, written analysis, or a stated verbal design — anything that's a "here's my answer"), run a probing phase. Pure exploratory back-and-forth without a stated solution skips probing.
Probing phase:
Report:
After the report, invite follow-up: "Happy to dig into any of this — why a miss mattered, what a stronger answer would have looked like, how this differs at the next level up, or anything else." Many candidates don't realize a debrief is on offer.
Append one row to tech-interview-history.md in the memory directory:
YYYY-MM-DD | level | stack | type | shape:<canonical-tag> | tags:<comma,separated,extras>
Example: 2026-05-05 | mid-level | Go | coding | shape:ttl-cache | tags:concurrency,sync.Map
Lazy creation: if the file doesn't exist, create it with a frontmatter header (name: Tech-interview history, type: reference, description noting it's used by this skill for spaced repetition) followed by a one-line format reminder. Then add (or create) a MEMORY.md entry in the same directory:
- [Tech-interview history](tech-interview-history.md) — past sessions, used by tech-interview skill to space out repetition
If memory was unavailable in step 0, skip this step silently.
Use a short, kebab-case tag to identify the shape of the problem. Reuse existing tags when applicable; only invent a new one if the shape is genuinely distinct. Variants on a base shape (e.g. token-bucket vs. sliding-window rate limiter) are different tags; minor stack/twist variations are not.
Coding (non-exhaustive): word-count, palindrome, reverse-list, fizzbuzz, parse-csv, parse-log-line, validate-input, find-duplicates, lru-cache, ttl-cache, write-through-cache, rate-limit-token-bucket, rate-limit-sliding-window, debounce, throttle, worker-pool, retry-backoff, pagination-iterator, file-tail, pub-sub, state-machine, url-router, concurrent-counter, diff-tree, event-bus, trie, bloom-filter, skip-list, parser-combinator, mini-scheduler, plugin-system.
Architecture / system-design (non-exhaustive): url-shortener, web-crawler, pastebin, notification-service, chat-system, feed-service, payment-flow, auth-service, analytics-pipeline, log-aggregation, recommendation-service, job-scheduler, search-service, file-storage, video-streaming, multi-tenant-saas, cache-tier.
Debugging / refactor / code-review: prefix with type — e.g. debug:slow-query, debug:memory-leak, refactor:god-object, code-review:auth-handler.
Higher levels get vaguer prompts and broader scope; the candidate is expected to drive clarification and prioritization.
Sample shapes:
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub stut/skills --plugin stut