LLM Intern Skill
wanyichen06/LLMInternSkill
A skill your agent uses when polishing, diagnosing, tailoring, or exporting resumes for LLM, RAG, Agent, Agentic RL, post-training, pretraining, AIGC, search/ranking, multimodal, AI backend, or LLM…
Runs the job-search pipeline. An agent skill from reactive-resume/reactive-resume.
$ npx skills add reactive-resume/reactive-resume --skill job-application-manager -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install reactive-resume/reactive-resume job-application-manager --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/reactive-resume/reactive-resume.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/reactive-resume/skills/job-application-manager .claude/skills/job-application-manager && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "job-application-manager" agent skill from https://github.com/reactive-resume/reactive-resume/tree/main/plugins/reactive-resume/skills/job-application-manager into .claude/skills/job-application-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-application-manager", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/reactive-resume/reactive-resume/tree/main/plugins/reactive-resume/skills/job-application-managerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add reactive-resume/reactive-resume --skill job-application-manager -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install reactive-resume/reactive-resume job-application-manager --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/reactive-resume/reactive-resume.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/reactive-resume/skills/job-application-manager .agents/skills/job-application-manager && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "job-application-manager" agent skill from https://github.com/reactive-resume/reactive-resume/tree/main/plugins/reactive-resume/skills/job-application-manager into .agents/skills/job-application-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-application-manager", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add reactive-resume/reactive-resume --skill job-application-manager -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install reactive-resume/reactive-resume job-application-manager --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/reactive-resume/reactive-resume.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/reactive-resume/skills/job-application-manager .cursor/skills/job-application-manager && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "job-application-manager" agent skill from https://github.com/reactive-resume/reactive-resume/tree/main/plugins/reactive-resume/skills/job-application-manager into .cursor/skills/job-application-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-application-manager", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/reactive-resume/reactive-resume.git --path plugins/reactive-resume/skills/job-application-manager--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add reactive-resume/reactive-resume --skill job-application-manager -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install reactive-resume/reactive-resume job-application-manager --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/reactive-resume/reactive-resume.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/reactive-resume/skills/job-application-manager .gemini/skills/job-application-manager && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "job-application-manager" agent skill from https://github.com/reactive-resume/reactive-resume/tree/main/plugins/reactive-resume/skills/job-application-manager into .gemini/skills/job-application-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-application-manager", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install reactive-resume/reactive-resume job-application-managerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add reactive-resume/reactive-resume --skill job-application-manager -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/reactive-resume/reactive-resume.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/reactive-resume/skills/job-application-manager .github/skills/job-application-manager && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "job-application-manager" agent skill from https://github.com/reactive-resume/reactive-resume/tree/main/plugins/reactive-resume/skills/job-application-manager into .github/skills/job-application-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-application-manager", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add reactive-resume/reactive-resume --skill job-application-manager -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install reactive-resume/reactive-resume job-application-manager --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/reactive-resume/reactive-resume.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/reactive-resume/skills/job-application-manager .opencode/skills/job-application-manager && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "job-application-manager" agent skill from https://github.com/reactive-resume/reactive-resume/tree/main/plugins/reactive-resume/skills/job-application-manager into .opencode/skills/job-application-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-application-manager", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
job-application-managerRuns the job-search pipeline. An agent skill from reactive-resume/reactive-resume.
Job Application Manager is an agent skill from reactive-resume/reactive-resume. Runs the job-search pipeline. Adds jobs from a link or pasted posting, keeps stages and dates accurate, sets follow-ups, runs a weekly review (stale applications, next actions, funnel stats), records the exact resume version sent, and drafts networking, LinkedIn, referral, recruiter-reply, follow-up, thank-you, status-check, expedite and withdrawal messages without sending them. Use when the user says "add this job to my tracker", "I applied", "log my interview", "I got rejected", "I was ghosted", "log my offer"…
Its SKILL.md is about 13k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including reference files (for example `references/intake-checks.md`, `references/mcp-recipes.md` and `references/messages.md`).
It sits in Business, Finance & HR, covering Job search and resumes, Interview preparation and Recruiting and HR. It works with LinkedIn and Model Context Protocol. The repository describes itself as: A one-of-a-kind resume builder that keeps your privacy in mind. Completely secure, customizable, portable, open-source and free forever. Try it out today! The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c6a7b1d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Job Application Manager loads about 13k tokens when it runs, and up to ~41k if it reads all its reference files. Until then it costs about 260 tokens; SKILL.md has 4,933 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from reactive-resume/reactive-resume at commit c6a7b1d, republished under its MIT licence (© reactive-resume). 4,933 words, ~12,836 tokens.
.claude/skills/job-application-manager/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.Run the user's job search as a pipeline. Each opportunity is one record with one stage, real dates, the exact documents sent, a next action and a follow-up date. You draft and log. The user applies, sends and decides. Everything works in plain conversation with a Markdown or CSV tracker; when the Reactive Resume MCP server is connected, the same workflow drives its application tools.
saved: save it, show the card, offer edits. Get a yes before changing an existing record, linking documents at Applied (which locks them), closing, bulk changes and deletes. Put proposals in one numbered list so the user confirms once.saved rows the user wants gone, and say first that deletion can't be undone.If asked to fabricate, decline in one sentence and offer the honest alternative in the same reply:
User: Say Priya referred me. She won't mind.
Agent: I won't name Priya as your referrer until she has agreed, because recruiters check with referrers and it would sink the application. I can draft a short note asking her, with a blurb she can forward if she says yes. Want that?
User: Tell them I'm on 120k so they go higher. (They earn 100k.)
Agent: I won't put a pay figure you don't earn in writing; it can be checked, and offers get pulled over it. I can frame it as a target instead: "I'm targeting 120–130k for this role." Want that?
list_applications exists, use the MCP section; otherwise plain conversation. Ask about an existing tracker only when the request is about tracking (add, applied, review, spreadsheet); a one-off message needs no tracker.followUpAt or an interview time. With MCP, reuse the offset of an existing followUpAt or an interview's timezone; otherwise add it to the batch. Country only when drafting a message or answering a salary question. Today's date comes from the conversation or system; ask if you don't know it.api_career_profile once per session (targetRoles, locations, priorities, minBase, maxOfficeDays, noticeWeeks) and use it to suggest tiers, flag knockouts at intake (posted pay below minBase, more office days than maxOfficeDays, a location outside locations) and compare offers. Without MCP, keep a 5-line search brief at the top of the tracker: target roles, locations or remote, pay floor with currency, deal-breakers, hours per week for the search. Ask for it in the first tracking session only, and leave out anything the user doesn't know.| User says | Go to |
|---|---|
| "Add this job", a link, a pasted posting | §1 Intake |
| "I applied", "got a screen", "rejected", "ghosted", "on hold" | §2 Stages |
| "I have an interview Tuesday", "log my interview" | §2 (log the round), then offer interview-prep |
| "What should I follow up on?", "what's stale?" | §3 Clock |
| "Weekly review", "how is my search going", "why am I not getting interviews" | §4 Review |
| "Write a follow-up / thank-you / referral ask / recruiter reply / withdrawal" | §5 Messages |
| "Log my offer", "I accepted / declined the offer" | §6 Offers (stage, deadline, accept cascade) |
| "Is this offer good?", "should I negotiate?", "they want an answer by Friday" | offer-negotiation if installed; otherwise §6 |
| "Track my applications in a spreadsheet", no MCP | §7 Tracker |
| "I want to get into Acme" with no posting; a networking contact | §7 Networking (or the MCP sequence) |
Handoffs. Sibling skills may not be installed; when one is missing, do the light version yourself and say so.
Get the posting text. A link alone is fragile: postings close and pages change, and the text is what later prep and tailoring need. Fetch it if you can; if the page is unreadable or login-walled, ask the user to paste it. Never guess fields from the URL.
Check for duplicates by company and role (and location) among existing records. If one exists, update it instead of adding a second.
Scam check. Stop, tag suspected-scam and warn the user before anything else if the posting or recruiter asks for money (training, equipment, placement fee, deposit "to unlock earnings"); sends a check to deposit and forward; offers paid "tasks" (rating, liking, "optimization") or crypto pay; asks the user to reship packages; pushes them to run a repo or package during a live call, or asks for code to be run when the recruiter or company can't be verified; or wants ID documents, bank details or a national ID number before a verified written offer. Soft flags get a warning only: chat-only interviews, pay far above market for little work, a free-mail or mismatched recruiter domain, same-day pressure, and an ordinary take-home that needs someone else's code run (run it only in a disposable VM or container). Read references/intake-checks.md when any flag trips or money has already moved.
Ghost-risk and criteria flags. Check what's in the posting text: older than 45–60 days or repeatedly reposted, "talent pool" or "evergreen" wording, no pay range where local law requires one, and any clash with the user's criteria (pay below the floor, too many office days, wrong location). For tier A only, and only when a web tool is available, run one search for the role on the company's careers page and one for recent layoffs. Tag ghost-risk, suggest less effort and a human contact. Never auto-skip: most unfilled postings are paused roles, not fakes.
Tier and contact, in one batch with defaults. "Tier: I assumed B (A = top target, C = exploratory)." For A or B add: "Do you know anyone at <company>, even second-degree?" Pick the default from the user's target roles when you have them.
| Tier | Before applying | Application |
|---|---|---|
| A | Find a first- or second-degree contact; ask for a referral or intro, then ask the referrer whether to apply first or wait for their submission (referral systems differ). Apply on the company's own site, not an aggregator. | Tailored |
| B | Look for a named recruiter or hiring manager | Tailored, plus one note to that person |
| C | Nothing | Light touch; cap the time spent |
Why: in one vendor's tech/startup-heavy data (Ashby, 2021–2024), referred applicants reached interview about 40% of the time against about 3% for inbound applications. If only an aggregator "easy apply" exists, look for the same role on the company's careers page.
Save, then show the card. Save at saved, or at the real stage and date if the user already applied, and offer edits:
Acme · Senior Backend Engineer · Remote (EU) tier A · source company-site
Pay: €85–100k (posted) Link: https://jobs.example.com/123
Must-haves: Go · Postgres at scale · on-call · payments domain
Flags: none
Next: ask Priya for a referral by Tue 13 Oct (and whether to apply first)Set the follow-up date to that next action.
One stage per record: where the application is now. Map what the user says:
| User says | Stage | Reason / tag |
|---|---|---|
| bookmarked, want to apply | saved | |
| submitted | applied, with the real date | record the documents first (below) |
| recruiter replied, phone screen booked | screening | |
| hiring-manager, technical, panel, onsite, AI or async interview | interview | log the round with its type |
| verbal or written offer | offer | follow-up before the deadline (§6); tag deadline |
| rejected at any point | closed | not-selected |
| "I pulled out" | closed | withdrew |
| accepted a job elsewhere | closed (each other open one) | accepted-other |
| accepted this one | closed | accepted |
| silence past the clock (§3) | closed | no-response; if they reply, move it to the stage the reply puts it in (usually screening), or change the reason to not-selected for a rejection |
| offer rescinded | closed | not-selected, tag rescinded |
| hiring freeze, on hold | unchanged | tag on-hold, set a follow-up |
| posting expired before applying | delete after confirming | (there is no "expired" reason) |
screening for a recruiter call, interview for the rest).applied.accepted-other and draft the withdrawals (§5) in the same turn.Record exactly what was sent. Interviewers quiz the resume they received, so the record must hold that version. Before marking applied, ask "Which resume and cover letter did you send?" and record both in the same update. In Reactive Resume, reaching Applied snapshots the linked resume and letter as they are at that moment and then fixes the link. If the user has edited the resume since submitting, the snapshot won't match what the employer has: attach the PDF they actually sent instead. Without MCP, record the exact file name (e.g. Sam_Lee_Acme_2026-10-02.pdf) and tell the user to keep that file unchanged.
Every open record has a next action and a date. Defaults, which the user can change:
| Situation | When | Action |
|---|---|---|
| Applied, named contact known | 7–10 business days | one follow-up that adds one new true fact |
| Applied, no contact | day 10 | don't chase the ATS; tier A/B: look for a person instead |
| Applied, tier A, still silent | day 21 | a second channel: hiring manager or an employee intro |
| Applied, silent | day 45 | propose closed / no-response |
| Screening or interview, they gave a date | that date + 2 business days | status check |
| Screening or interview, no date given | 7 business days | status check |
| After a status check, no reply | 5 business days | second status check |
| After the second status check, no reply | 10 business days | propose closed / no-response |
| Any interview round | same or next business day | thank-you note (§5) |
| Offer | 2 business days before the written deadline if time allows; never after | next offer step (§6) |
| Saved for more than 14 days (not a networking target) | ask: apply or drop? | |
| Networking message, no reply | 5–7 business days | one follow-up, then let it rest |
Don't close earlier than day 45: in one 2025 tracker dataset, a quarter of applications that led to an interview took more than two months to get it, and a no-response close is a guess about a slow process. One habit beats every template: at the end of each interview, the user asks "What are the next steps, and when should I expect to hear?" Log the answer as the follow-up date.
Log outreach and replies as notes that start Sent: or Received: (e.g. Sent: follow-up to J. Rao (recruiter), email). That makes "days since the employer last spoke" computable later. Read references/pipeline-rules.md for edge cases (agencies, several roles at one company, re-applying), tag and source vocabularies, and regional rules.
Read references/weekly-review.md before step 1: it has the calculations, benchmarks with caveats, and pacing guidance. Keep the review under 20 minutes of the user's time.
respondBy on api_career_saved_items {kind: "offer"}, which the web app's Offers page fills; if the two disagree, show both and ask), interviews in the next 7 days (offer interview-prep), thank-yous owed, overdue follow-ups, networking follow-ups due.no-response close, show the latest activity entry and ask about it, because notes written elsewhere may not use the Received: prefix. Treat any note describing an employer call, email or reply as contact. Propose nudges and closures as one numbered list, and change nothing until the user picks numbers.<date>" and offer a calendar entry (.ics text) or a scheduled reminder if the client supports one, since you can't remind the user yourself.Example output (MCP connected; 14 active, 5 untouched for 3+ weeks, an offer due Friday; today Fri 9 Oct 2026):
Week of 9 Oct. Active 14: applied 9 · screening 2 · interview 2 · offer 1
Due now
1. Initech offer expires Fri 16 Oct 17:00. Do you want it? Name any process you'd pick over it and I'll draft expedite notes to those only.
2. Globex panel Tue 13 Oct 10:00. Prep on Monday (interview-prep)?
3. Thank-you owed: Hooli hiring-manager call yesterday (Dana Ruiz).
Stale (no movement for 21+ days)
4. Acme, applied 24 d, tier A, contact J. Rao → note to the hiring manager
5. Baz GmbH, screening, said "next week" on 15 Sep → status check
6. Foo Ltd, applied 47 d, last entry 23 Aug (applied): heard anything since? If not → close as no-response
7. Bar Inc, applied 52 d, last entry 18 Aug (applied): heard anything since? If not → close as no-response
8. Qux, applied 22 d, tier C → leave; recheck at day 45
Funnel. Last 4 weeks (12 sent): 2 responses · 1 interview · 0 offers.
All time (41 sent): 9 responses (22%) · 5 interviews · 1 offer. Referrals 3 of 4 responded; cold 6 of 37.
Next week: decide Initech by Thu · Globex panel prep · items 4–5 · new applications only if you decline
Next review: Fri 16 Oct. Want a calendar entry?
Reply with the numbers to act on (e.g. "1, 3, 6, 7"). I change nothing until then.Diagnose only with enough data (about 30 applications or 5 interview processes):
| Pattern | Likely cause | Next |
|---|---|---|
| Responses under ~1% across 50+ cold applications (well below the ~3% inbound benchmark) | Targeting (level, location, visa, pay), weak match, too many cold applications | resume-tailor; more referrals |
| Screens, but few later rounds | Pitch, pay expectations, logistics | mock-interview, recruiter screen |
| Interviews without offers | Interview answers, thin stories | interview-prep, mock-interview |
| Offers the user turns down | Targets don't match what they want | Revisit the criteria (Setup) |
Three rejections after interviews is normal variance: interview-to-offer rates of roughly 6–16% are typical. Tell the user plainly.
Read references/messages.md before drafting: every template with a before/after, LinkedIn and InMail limits, regional formality, salary scripts and recruiter replies.
Sent: …), set the next follow-up and apply any stage change.| Message | When | Shape | After "sent" |
|---|---|---|---|
| Networking / informational | Any time; ask for information, never a job | connection → why them → who you are in one line → 15–20 min ask → easy out | follow-up once, 5–7 business days |
| Referral ask | After some rapport, where the company runs referrals | the role and link or req ID → one true fit point → the ask → forwardable 30–50-word third-person blurb → easy no | tag referral; ask "apply first or wait for your submission?" |
| Post-application follow-up | 7–10 business days, named person only | date applied → one new true fact → one question | none further |
| Thank-you | Within 24 h of each round | thanks → one callback to what that person said → optional addition or correction → interest; 75–150 words; one per interviewer, no two alike | follow-up = their decision date + 2 business days |
| Status check | Their date + 2 business days | cite their date → still interested → offer anything useful | a second check after 5 business days; 10 business days later, propose no-response |
| Expedite | The day another offer lands | offer with deadline X → strong interest in this role ("first choice" to at most one company, and only if true) → can the timeline move? | tag expedite-requested |
| Reply to rejection | When it arrives | thanks → optional single narrow feedback question → door open | closed / not-selected |
| Withdrawal | As soon as decided, before the next step | withdrawing → brief true reason (optional) → thanks to named people | closed / withdrew or accepted-other |
| Accept offer | Once terms are in writing | restate title, pay, start date, location, contingencies → ask next steps | closed / accepted; withdrawals to the rest |
| Decline offer | Promptly | thanks → the decline in the first two lines → optional brief reason → door open | closed / withdrew or accepted-other |
| Extension request | Before the deadline | thanks → enthusiasm → a specific date and a true reason | stays offer; follow-up = the new date |
Thank-yous: ask in one batch for the company, role and sign-off if you don't have them, then each interviewer's name, role and one thing they said or asked. If the user can't recall anything for someone, write that note without a callback rather than inventing one. Past 24 hours, send today anyway, with no apology for the delay.
Lint every draft and rewrite on any hit:
Worked example, post-application follow-up:
Before: "Hi, just checking in on my application. Any updates? Thanks!"
After (36 words; the 31% comes from the user's resume): "Hi Dana, I applied for Senior Backend Engineer on 2 Oct. The role's focus on retries and idempotency is what I built at Beta, where failed charges fell 31%. Is the role still open? Thanks, Sam"
Salary questions: follow messages.md §9. In short: ask for the range first; the user decides whether to share current pay; never state a figure they don't earn. offer-negotiation, if installed, owns the number in depth and the accept, decline and extension wording; the table's Accept, Decline and Extension rows are the fallback.
This skill tracks the offer: its stage, deadline, expedite notes to other employers and the accept cascade. Evaluating and comparing offers, the counter, extension requests and the accept or decline wording belong to offer-negotiation. If it isn't installed, the "Need more time", "Light negotiation" and currency bullets below are the fallback; say so.
<Company>? Which open processes would you pick over it?" Compare the offer line by line with the user's criteria (with MCP, api_career_profile: minBase, maxOfficeDays, priorities); unknown terms stay unknown.deadline and name the deadline in the follow-up note. Date the follow-up for the next step (decide, counter, ask for more time): at least 2 business days before the deadline when time allows, so a reply still fits, and never after it. With MCP, terms the user saved on the web app's Offers page are in api_career_saved_items {applicationId, kind: "offer"}, including respondBy.accepted-other, draft the withdrawals, cancel pending interviews, and offer short thank-you notes to everyone who helped (referrers, contacts, references).Read references/tracker-template.md when creating, importing or reviewing a plain tracker (not for a one-off message): header, filled example rows, spreadsheet formulas and the import mapping.
job-search/applications.csv and an append-only job-search/stage-log.md. Otherwise keep a Markdown table, reprint the changed rows after each update, and reprint the whole table at the end of a session for the user to save and paste next time. The search brief (Setup) sits at the top of the Markdown tracker, or in job-search/brief.md.id, company, role, location, salary, source, tier, tags, stage, furthest_stage, closed_reason, applied_on, last_contact_on, follow_up_on, next_action, resume_version, cover_letter, contacts, url, notes.2026-10-09 | 7 | applied → screening.job-search/contacts.csv (name, company, role, relationship, last_contact_on, next_step, follow_up_on, notes) so informational chats, referral leads and "who else should I talk to?" names aren't lost.furthest_stage drives the funnel, and last_contact_on and follow_up_on drive the clock.import_applications (up to 500 per call).Use these only when the server is connected. Read before writing; show before/after and get a yes before changing an existing record. Read references/mcp-recipes.md before the first Reactive Resume write in a session: exact payloads for intake, applied with the resume link, interviews, logging sent messages, bulk closes, the accept-offer cascade and fixing mistakes.
| Job | Tools |
|---|---|
| Find records | list_applications {limit: 100, offset}, repeated until nextOffset is null; read_application {id}; list_application_tags |
| Read a posting | api_applications_ai_parse_posting {input: link or text} fetches the link and returns the text as jobDescription with postingSource. It fills requirements and salary only when an AI provider is configured (filledBy: "ai"), and then sends the posting text to that provider. When filledBy is page or none, read up to 5 must-haves and any posted pay from jobDescription yourself, show them on the card, and pass them as requirements and salary. 422 POSTING_UNREADABLE: with a web-fetch tool, fetch the page and call again with its text; otherwise ask the user to paste it. |
| Create | create_application {company, role, status, stageEnteredAt, location, salary, source, sourceUrl, jobDescription, requirements, postingSource, tags, contacts, followUpAt, followUpNote}; many rows: import_applications {items} |
| Move, edit, link | update_application {id, …} |
| Log | add_application_note {id, text, date} |
| Interviews | add_application_interview, update_application_interview, delete_application_timeline_entry |
| Bulk | bulk_update_applications {ids, status, closedReason, addTags} |
| Stats | get_application_stats (current stage only); compute the funnel from activity |
| What was sent | sentResumeVersionId on the application; api_resume_list_versions (kind sent), api_resume_get_version; PDFs made elsewhere: attach_application_document |
| Draft help | draft_application_message {id, kind: "follow-up"}: AI, a generic 80–120-word recruiter follow-up, not saved. Edit it against §5 |
| Facts, criteria | api_career_facts {applicationId} (read-only); api_career_profile for the search criteria |
| Offers | api_career_saved_items {kind: "offer"} (or with applicationId): terms and respondBy saved from the web app |
Core sequences:
api_applications_ai_parse_posting → scam, ghost and criteria checks → create_application at saved with the tier tag → show the card.list_resumes to find the resume the user named (ask if several or none match). Compare its updatedAt with the applied date; if later, say: "Backend v3 was edited on <date>, after you applied, so linking it records today's version. Do you have the PDF you sent? I'll attach that instead." Then read_application → show before/after → one update_application {id, resumeId, coverLetterId, status: "applied", stageEnteredAt, followUpAt, followUpNote, tags}, where tags is the full existing list plus the tier tag, plus tailored when the resume was made for this job (a resume-tailor copy, or the user says so; ask once if unsure). The response should now carry sentResumeVersionId.get_application_stats for the headline → all records → api_career_saved_items {kind: "offer"} → compute → numbered proposals → bulk_update_applications for closes and tags, update_application per record for follow-up dates.add_application_note {id, text: "Sent: …", date} → update_application {id, followUpAt, followUpNote}.create_application {company, role: <target team or role family>, status: "saved", tags: ["target-company"], contacts, followUpAt, followUpNote}. The 14-day saved rule and the funnel skip that tag.Gotchas that cost users data:
update_application replaces the tags and contacts lists. Read the record and send the complete list. bulk_update_applications addTags appends instead.stageEnteredAt is YYYY-MM-DD; followUpAt is ISO 8601 with an offset, e.g. 2026-10-19T09:00:00+02:00 (09:00 in the user's timezone).applied resets appliedAt to the reopen date and adds a second applied entry, which skews the clock and response times. Reopen to the stage the reply implies.resumeId and coverLetterId can't change. For a fresh application to the same company, prepare a resume copy (resume-tailor) and a new record.add_application_interview doesn't move the stage. at needs an offset; timezone is an IANA name such as Europe/Berlin.delete_application and bulk_delete_applications are permanent (no Trash) and also delete attached PDFs no other application uses.draft_application_message, autofill_application_from_job, score_application_match, tailor_resume_for_application) send the resume and posting to the user's AI provider: ask first. Without a provider they fail with "No AI provider is configured"; carry on without them.NOT_FOUND → list again for valid IDs; 409 → read again and recompute; 429 → rate limited, wait; BAD_GATEWAY → the AI provider failed."70–85% of jobs come through networking", "75% of resumes are rejected by ATS", "40% of postings are fake", "referrals are 5x more likely to be hired" (no stage named), "apply to 10 jobs a day" and "thank-you notes decide hires" have no sound source. Quote statistics only with a stage and a source; references/weekly-review.md §8 has the corrections.
© reactive-resume, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 6 other files (references) in plugins/reactive-resume/skills/job-application-manager of reactive-resume/reactive-resume.
Open the folder on GitHubat commit c6a7b1d
Job Application Manager next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Job Application Manager this skillreactive-resume/reactive-resume | 44k | — | ~13k | Automated safety check: Pass | MIT | |
| LLM Intern Skillwanyichen06/LLMInternSkill | 326 | — | ~1.2k | Automated safety check: Pass | MIT | |
| AI Agent Developer Interview QuestionsSnailclimb/interview-guide | 3.3k | — | ~183 | Automated safety check: Pass | AGPL-3.0 | |
| Offer Toolkit Skillyanliudesign/offer-toolkit-skill | 520 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Job Huntrebecha1227-a11y/CareerForge | 323 | — | ~2k | Automated safety check: Warn | None | |
| Linkedin Jobs Searchbrowser-act/skills | 6.1k | — | ~2.5k | Automated safety check: Pass | MIT |
wanyichen06/LLMInternSkill
A skill your agent uses when polishing, diagnosing, tailoring, or exporting resumes for LLM, RAG, Agent, Agentic RL, post-training, pretraining, AIGC, search/ranking, multimodal, AI backend, or LLM…
Snailclimb/interview-guide
Plays an interviewer for AI agent developer roles, probing agent loops, tool integration, MCP, RAG, context engineering and multi-agent design through practical scenarios.
yanliudesign/offer-toolkit-skill
求职工具包。把「找岗位 → 签 offer」拆成六个独立子 skill:⓪ Job Hunt 批量发现岗位,① Job Description 解码具体 JD,② Resume 定向简历,③ BQ 准备行为面试,④ Offer Compare 对比多份 offer,⑤ Salary Negotiation 谈 package。任何求职相关请求(找工作、该不该投、改简历、准备面试、选…
rebecha1227-a11y/CareerForge
AI 岗位猎手。基于用户简历,自动在各大招聘平台搜索匹配岗位,输出带匹配度评估的岗位列表. An agent skill from rebecha1227-a11y/CareerForge.
browser-act/skills
Search LinkedIn job listings and extract full job details. An agent skill from browser-act/skills.
sickn33/agentic-awesome-skills
Job search automation, auto apply, resume generation, application tracking, salary intelligence, and recruiter outreach using the JobGPT MCP server.
reactive-resume/reactive-resume
Builds resumes as valid JSON for the open-source Reactive Resume app by interviewing you, and can track job applications through its MCP tools.
reactive-resume/reactive-resume
Prepares the user for a specific interview from their real experience.
reactive-resume/reactive-resume
Runs a mock interview for a specific job description. An agent skill from reactive-resume/reactive-resume.
reactive-resume/reactive-resume
Evaluates and negotiates job offers. An agent skill from reactive-resume/reactive-resume.
reactive-resume/reactive-resume
Turns resume duties into truthful impact bullets. An agent skill from reactive-resume/reactive-resume.
reactive-resume/reactive-resume
Tailors one resume to one specific job posting. An agent skill from reactive-resume/reactive-resume.
Works with
Categories
Runs the job-search pipeline. An agent skill from reactive-resume/reactive-resume. Job Application Manager is an agent skill from reactive-resume/reactive-resume. Runs the job-search pipeline.
Job Application Manager fits situations like: the user says add this job to my tracker; log my interview; track my applications; do my weekly review.
Run `npx skills add reactive-resume/reactive-resume --skill job-application-manager -a claude-code`. Or copy the skill folder (plugins/reactive-resume/skills/job-application-manager in reactive-resume/reactive-resume) into .claude/skills/job-application-manager in your project. Claude Code loads it when a task matches its description.
Run `npx skills add reactive-resume/reactive-resume --skill job-application-manager -a codex`. Or copy the skill folder (plugins/reactive-resume/skills/job-application-manager in reactive-resume/reactive-resume) into .agents/skills/job-application-manager in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add reactive-resume/reactive-resume --skill job-application-manager -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/job-application-manager, .gemini/skills/job-application-manager, .github/skills/job-application-manager and .opencode/skills/job-application-manager in your project.
SKILL.md names no scripts, command-line tools or credentials: Job Application Manager is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Job Application Manager is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 13k tokens (SKILL.md is roughly 51k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 28k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Job Application Manager: LLM Intern Skill (wanyichen06/LLMInternSkill, 326 stars), AI Agent Developer Interview Questions (Snailclimb/interview-guide, 3.3k stars), Offer Toolkit Skill (yanliudesign/offer-toolkit-skill, 520 stars) and Job Hunt (rebecha1227-a11y/CareerForge, 323 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
reactive-resume (a GitHub organization) maintains it in reactive-resume/reactive-resume, which has 44,062 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 9, 2026.
Source: reactive-resume/reactive-resume on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.