Borrowing it
Nothing to install: this file belongs to galiprandi/job-seeker. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/galiprandi/job-seeker/main/.agents/skills/polish/SKILL.mdgit clone --depth 1 https://github.com/galiprandi/job-seekerWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/galiprandi/job-seeker/polish)<a href="https://agentmods.dev/skills/galiprandi/job-seeker/polish"><img src="https://agentmods.dev/badge/skills/galiprandi/job-seeker/polish/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/galiprandi/job-seeker/polish"><img src="https://agentmods.dev/badge/skills/galiprandi/job-seeker/polish.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium Memory Poisoning · line 141 Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.Fix: Implement context-window management that detects and rejects padding or stuffing attempts. Prioritize system instructions over user-injected content.
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00041 | $0.03742 |
| Opus 5.5 | $0.00016 | $0.01497 |
| Sonnet 5.5 | $0.00008 | $0.00748 |
| Haiku 4.5 | $0.00004 | $0.00374 |
Grade A, and why
polish scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 279 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Polish — LinkedIn profile + CV optimization
Trigger
Keyword: polish (or variants: "mejorar mi linkedin", "pulir perfil", "alinear cv", "optimizar perfil")
Purpose
Takes the user's captured profile (users.data.profile) and job preferences (users.data.job_preferences) and uses them to optimize the two artifacts that recruiters see: the LinkedIn profile and the CV. This is an output flow, not an input flow — profile captures data, polish applies it externally.
Dependencies
onboarding(DB, browser profile, LinkedIn session)profile(requiresusers.data.profileandusers.data.job_preferenceswith Must/Strong/Nice weights)
Parallel execution
polish can run alongside other flows (e.g: apply, news, targets) by using an attached session:
node .agents/skills/browser-automation/scripts/browser.js open <url>
node .agents/skills/browser-automation/scripts/browser.js exec eval '<code>' --session polish-1
node scripts/generate-cv.js --session polish-1
node .agents/skills/browser-automation/scripts/browser.js exec close --session polish-1
All browser commands and generate-cv.js accept --session. When done, close only your own session (exec close --session polish-1) or leave it — never close-all, which kills the browser for other agents. See AGENTS.md "Parallel execution".
Gate de validacion (pre-flight obligatorio)
Before executing any phase, verify that dependencies are satisfied. If any check fails, do not proceed — tell the user what is missing and how to resolve it:
# 1. Verify onboarding completed: DB exists and has user
node scripts/db.js "SELECT id, name, email, data FROM users WHERE id = <user_id>"
# If no row → "Necesitas ejecutar `onboarding` primero. No hay DB configurada."
# 2. Verify profile exists with minimum data
node scripts/db.js "SELECT data->'profile' AS profile, data->'job_preferences' AS prefs FROM users WHERE id = <user_id>"
# If profile is null/empty → "Necesitas ejecutar `profile` primero. No hay perfil capturado."
# If job_preferences is null/empty → "Necesitas completar el cuestionario de `profile`. No hay preferencias declaradas."
# 3. Verify minimum fields within profile
# Required for Phase 1 (LinkedIn): profile.title, profile.experience[], profile.skills[]
# Required for Phase 2 (CV): profile.full_name, profile.email, profile.experience[], profile.education[]
# If any required field missing → "Tu perfil esta incompleto. Falta: <fields>. Ejecuta `profile` para completarlo."
# 4. Verify LinkedIn session is active
node .agents/skills/browser-automation/scripts/browser.js status # lists active sessions
# If fails → "Necesitas iniciar sesion en LinkedIn. Ejecuta `onboarding` o abre el browser headed para login."
# 5. Verify linkedin_profile URL exists in DB
node scripts/db.js "SELECT data->'linkedin_profile' AS url FROM users WHERE id = <user_id>"
# If null → "No tengo tu URL de LinkedIn. Ejecuta `onboarding` para guardarla."
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago Changed · -1 lines 51c1b230a00a
- 1mo ago Changed c72c1d43dc68
- 1mo ago First seen · 280 lines · 41 tokens per session scan A e82976722796
polish is a skill published in the GitHub repository galiprandi/job-seeker (58 stars, last pushed 2d ago), licensed MIT. It adds 41 tokens to every session and 3,742 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
cv-creator
Professional CV and resume builder transforming career narratives into ATS-optimized, multi-format resumes. Integrates with career-biographer for data and competitive-cartographer for positioning. Generates PDF, DOCX, LaTeX, JSON Resume, HTML, and Markdown. Activate on 'resume', 'CV', 'ATS optimization', 'job…
extract-resume
Parse a resume's uploaded PDF into structured JSON (basics, experience, projects, skills, education) and save it to the editor.
resume-tailor
Rewrite a candidate's resume tailored to one specific JD using a hiring-recon report, emit it as a rendercv YAML, then render to PDF. Reorders jobs/bullets and adjusts language to incorporate JD keywords without inventing experience. Outputs one YAML (source of truth, user-editable) plus a .pdf published alongside it.
critic-loop
Run the mandatory 3-round CV review loop with the Critico — autonomously, without going through the Capitano. For each round you spawn a FRESH CRITICO-S session (same N as your Scrittore session: SCRITTORE-2 → CRITICO-S2), send PDF + JD, wait for the structured verdict, kill the Critic, correct the CV, regenerate the…
parse-cv
Pre-process a CV/profile file (PDF, DOCX, ODT, RTF) into plain text BEFORE feeding it to the LLM context. Reduces token cost by 5-10x on long CVs and yields more reliable extraction than reading binary PDFs directly via multimodal vision. The Assistente calls this skill on every uploaded document in…
freehire-tailor-cv
Use when reframing someone's CV toward a specific vacancy through freehire — reading the fit analysis for a tailored copy, fetching or editing the CV document by path, rendering the ATS PDF, or deciding what may and may not be written into a CV. Carries the evidence rule: anything stating what the candidate DID needs…