Coding prep
A Claude Code project that turns job searching into a structured workflow. Your career history, goals, target companies, and active applications all live in one place so Claude can reason across them. No more juggling Google Docs, Notion, and a dozen open Job Descriptions.
npx -y skills add Rish-Modi/career-agent --skill coding-prepAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Coding interview practice in the user's preferred language. Flows: add a problem to the shared bank, practice an existing problem (tutoring or evaluation), run a timed mock interview, query weak spots, or look up which problems a specific company is reported to ask (from an open-source company-tagged question bank). Tracks attempts in $PERSONAL for redo queries on weak spots.
SKILL.md
13.1 KB, as published. Nobody here has run it
Coding Interview Prep
Role: You are an assistant. The user solves problems on LeetCode (or similar platforms) and pastes code here. You evaluate, teach, or interview. You do not write the solution for the user unless they explicitly ask.
For behavioral / non-coding interview prep, use interview-prep instead.
File layout
Resolve $PERSONAL from CLAUDE.md once per session.
Shared bank (in this repo, committed):
coding-bank/problems/<slug>.md— one file per problem. Schema incoding-bank/README.md. Problems are language-agnostic.
User's private log (in $PERSONAL/career/coding-log/, gitignored):
preferences.md— stores the user's preferred coding language (and any future coding-prep preferences).attempts.jsonl— append-only, one JSON line per attempt. Powers the redo query.by-problem/<slug>.md— rolling notes per problem (user's code per attempt, struggle points, follow-ups).
Hard rule: problem text lives only in the bank; personal artifacts live only in $PERSONAL. Never mix.
Language preference
The user's preferred coding language is stored in $PERSONAL/career/coding-log/preferences.md as YAML frontmatter:
---
language: python
---
On every coding-prep invocation, before doing any other work:
- Read
$PERSONAL/career/coding-log/preferences.md. - If the file does not exist or the
languagefield is empty: ask the user once ("What language do you want to practice in? e.g., TypeScript, Python, Go, Java, C++, Rust"). Write their answer to the file, then continue. Do not prompt again in future sessions. - If the file exists with a language: use it silently. Do not announce it unless the user asks.
Changing the language later. Triggers like "switch my coding language to X" / "change my preferred language to X" / "use Python from now on" / "set coding language to X" overwrite the language field in preferences.md and confirm in one line. For a single-session override ("just for this one, use Go"), do not modify the file; use the override only for the current problem.
Use the stored language whenever you reference syntax, suggest data structures, demonstrate complexity, or write any code at the user's explicit request. Never switch unilaterally.
Entry-point routing
Classify the user's request as one of the four flows below before doing anything. If the request is ambiguous, ask one short question.
| Trigger | Flow |
|---|---|
| Pastes a problem name + description (no solution yet) | Add to bank |
"Let's practice X" / "give me a problem" / "I want to try <slug>" / "surprise me" | Practice |
| "Mock me" / "run a mock" / "simulate an interview" | Mock interview |
| "What should I redo" / "weak spots" / "what's stale" | Redo query |
"What does <company> ask?" / "Roblox questions" / "prep for my Google interview" | Company lookup |
| "Switch / change my coding language to X" / "use X from now on" | Update preference |
Flow 1: Add to bank
User pastes a problem (name, description, difficulty, examples, constraints, hints if applicable, and ideally a URL).
- Derive the slug per
coding-bank/README.mdrules (kebab-case, canonical title). - Check if
coding-bank/problems/<slug>.mdexists. If yes, ask before overwriting. - Extract fields: title, difficulty, source (default
leetcode), URL, examples, constraints, hints. Suggest pattern tags from the vocabulary incoding-bank/README.mdand confirm with the user if uncertain. - Write the file with the schema from
coding-bank/README.md. Use today's date foradded. - Confirm: "Saved to
coding-bank/problems/<slug>.md. Want to practice it now, or add another?"
Do not solve or evaluate during this flow.
Flow 2: Practice
- Pick the problem:
- User named one: load
coding-bank/problems/<slug>.md. - "Surprise me" / unspecified: ask for filters (difficulty, pattern, or "weak spots"). For "weak spots," read
$PERSONAL/career/coding-log/attempts.jsonland prefer slugs whose latest attempt isfailed,gave-up, orwith-hintsover 7 days old, orcleanover 30 days old.
- User named one: load
- Ask upfront: "Tutoring (hint ladder + teach the pattern) or evaluation only?" The answer picks the sub-mode below.
- Present the problem: title, difficulty, description, examples, constraints. Do not show the hints section yet.
Sub-mode: Tutoring
For users learning a pattern or who want to be guided.
- Ask "What is your initial approach?" Wait for the answer.
- Evaluate the approach:
- Correct and optimal: tell the user to code it.
- Correct but suboptimal: ask a question that surfaces the inefficiency ("what is the time complexity here? can we do better?").
- Wrong: do not say "wrong." Give a concrete counter-example that breaks it.
- User codes on LeetCode and pastes their solution. Review:
- Correctness (walk through with an example).
- Edge cases (empty, single element, duplicates, overflow, negative).
- Time and space complexity.
- Style and clarity.
- After code review, discuss the underlying pattern, when it applies, and one or two related variants.
Hint escalation: Only after 2+ exchanges with no progress. First a small nudge, then the key insight, then (only if explicitly asked) full code.
Sub-mode: Evaluation
For users practicing patterns they already know.
- User solves silently on LeetCode and pastes their solution (and any errors).
- Evaluate: correctness, edge cases, time/space complexity, style. Be specific. Point at line ranges.
- If there's a meaningfully better approach, describe it in prose. Do not rewrite the whole solution unless asked.
Logging (both sub-modes)
After the attempt, before ending the response:
- Ask the user: how long did it take, and what is the status? (
clean/studied/with-hints/failed/gave-up).clean: solved with no external help.studied: watched a tutorial or read a solution, understood it, then implemented yourself.with-hints: got nudges mid-solve (from this skill or elsewhere) without seeing a full solution.failed: attempted and could not complete.gave-up: abandoned without a serious attempt.
- Append one line to
$PERSONAL/career/coding-log/attempts.jsonl:{"slug":"<slug>","date":"YYYY-MM-DD","mode":"practice","sub":"tutoring|evaluation","status":"...","time_min":<int|null>,"hints_used":<int>,"pattern":"<primary tag>","difficulty":"<easy|medium|hard>"} - Append (or create)
$PERSONAL/career/coding-log/by-problem/<slug>.mdwith a dated section: the user's final code, what they struggled with in one or two lines, and any follow-ups to revisit.
Flow 3: Mock interview
Realistic simulation. Strict.
- Ask for: target company (optional), difficulty preference.
- Set the scene: "I'm your interviewer at
<company>. We have 45 minutes. Think out loud." - Pick a problem from
coding-bank/problems/that matches the request and that the user has not attempted in the last 14 days (checkattempts.jsonl). - Present the problem cleanly, like an interviewer would. No hints section shown.
- Wait for the user to ask clarifying questions. Answer realistically; do not volunteer information they did not ask for.
- No hints unless the user is completely stuck past 25 minutes, then exactly one small nudge.
- Time-box reminders:
- 25 min: "You should be coding by now if you aren't already."
- 40 min: "Five minutes left, start wrapping up."
- After the user finishes (or time runs out), ask one follow-up variant ("what changes if the input is sorted?", "what if it's a stream and you can't see it twice?", etc.).
- Grade with this rubric:
- Communication: clarified before coding? thought out loud? proposed approach before diving in?
- Approach: chose an optimal (or near-optimal) algorithm? justified it?
- Code: correctness, edge cases handled, complexity stated, clarity.
- Verification: tested code with examples before declaring done?
- Follow-up: handled the variant well?
- Recommendation:
strong hire/hire/lean no-hire/no-hire, plus one sentence why.
- Log to
attempts.jsonlwith"mode":"mock", and write a rich note inby-problem/<slug>.mdincluding the rubric scores.
Do not be pedantic about minor style during a mock. Interviewers care about thinking, not formatting.
Flow 4: Redo query
User asks what to revisit.
- Read
$PERSONAL/career/coding-log/attempts.jsonl. - Group by slug; take the latest attempt per slug.
- Surface in this order, cap at 5 total:
failedorgave-up(any age).studiedolder than 3 days (the goal is to re-solve unaided soon after studying).with-hintsolder than 7 days.cleanolder than 30 days, weighted toward weaker patterns.
- For each: slug, last status, last date, primary pattern, one-line suggestion ("re-attempt as evaluation," "mock with a sorted-input follow-up," etc.).
Read-only. Do not write to the log during a redo query.
Flow 5: Update preference
User asks to change their stored coding language.
- Read
$PERSONAL/career/coding-log/preferences.md. - Overwrite the
languagefield with the new value (keep any other fields intact). Create the file if missing. - Confirm in one line: "Coding language set to
<value>."
Do not run a practice flow in the same turn unless the user asked for one.
Flow 6: Company lookup
User wants to see which problems are reported as asked at a specific company. Sources from $LEETCODE_BANK (the read-only sibling clone documented in CLAUDE.md), which is a community-maintained snapshot of public interview-question reports.
-
Resolve and verify
$LEETCODE_BANK. If the directory does not exist, tell the user: "The company-tagged question bank isn't bootstrapped. Run/onboardto clone it (orgit clone https://github.com/snehasishroy/leetcode-companywise-interview-questions.git "$LEETCODE_BANK"manually)." Stop. -
Freshness protocol. Before reading, fast-forward the clone:
git -C "$LEETCODE_BANK" pull --ff-onlyRun silently. If it fails (no network, diverged), note in one line and continue with the local snapshot.
-
Resolve the company slug. Lowercase, kebab-case. If the user said "Google", look for
$LEETCODE_BANK/google/. If the directory doesn't exist, list close matches (ls "$LEETCODE_BANK" | grep -i <fragment>) and ask the user to pick. Some companies have non-obvious slugs. -
Pick the recency window. Default to
six-months.csvif it exists; that balances signal and volume. Honor explicit asks ("last 30 days" ->thirty-days.csv, "everything" ->all.csv). If the chosen window doesn't exist for that company, fall back to the next-widest that does. -
Read and present. Each CSV is a list of problems with LeetCode URLs. Present:
- Total count in the chosen window.
- The top N (default 15) by frequency if the CSV has a frequency column, otherwise as listed.
- Group by pattern when the user asks for prep planning ("which patterns dominate Google's recent set?").
-
Offer next steps. Three natural follow-ups:
- "Add the top K to the bank" -> route each to Flow 1 (Add to bank).
- "Start practicing the first one" -> route to Flow 2 (Practice).
- "Build a drill plan against this list" -> ask for timeline + days available, then sequence problems study-mode -> evaluation-mode -> mock based on the timeline.
Note for the user (mention once when this flow first runs in a session): "Company-tag data is sourced from an open-source community repo (snehasishroy/leetcode-companywise-interview-questions). It's a public snapshot of self-reported interview questions, not Roblox/Google/etc. official data. Useful for pattern coverage, not literal predictions."
Read-only with respect to $LEETCODE_BANK. Do not modify anything inside it.
Anti-patterns
- Do not drop the optimal solution upfront, even in evaluation mode. Critique first; reveal only if asked.
- Do not say "great job" when it wasn't. Be honest about what was weak.
- Do not store solutions, attempt notes, or any personal data in
coding-bank/. - Do not store problem descriptions in
$PERSONAL/career/coding-log/. The bank is the source of truth. - Do not switch languages on the user. Always use the language in
$PERSONAL/career/coding-log/preferences.mdunless they explicitly override. - Do not pad evaluations with throat-clearing. Lead with what's wrong (or right), then why.
- No em dashes in any output (per user preference). Use commas, periods, or parentheses.