Offer 2-5 context-specific clickable reply buttons in the JHT game chat when they genuinely make the user's next decision easier. Use only for a small bounded choice; otherwise answer normally with jht-send. Never use these as a fixed onboarding tree.
Close the working day on request from the user. Triggered by a [SHUTDOWN] message from @utente. The user is closing the application and every agent is about to be killed mid-task; before that happens each one must record where it got to, so tomorrow the team resumes instead of restarting. Stop the agents one by one…
Diagnose whether a team agent's tmux session is alive, in a long turn, or silently dead — and respawn it preserving context if dead. Owned by the Dottore (the team's roving health-check agent), not by the Captain. The core failure mode this skill catches: jht-tmux-send returns exit 0 even when the target CLI has…
Standardize positions.location free-text into structured loc/work/rolefamily columns BEFORE marking any position as checked. Covers 10 special cases (Europe Remote, Italy+remote, multi-location, US-entity-in-EU). Enforces one-position-at-a-time, peer-aligned vocabulary, never-NULL workcountry. Use whenever the Analyst…
Extract the company logo for a company in the companies table and store it as a small base64 data-URI (max 35KB, min 32px). Primary path is fully automated via logofetch.py against the official website (apple-touch-icon → icon → og:image → favicon); when the site blocks bots or has no usable icon, find a direct logo…
The Mantenitore's INFRA maintenance sweep 👷♂️ (twin of the Dottore, scoped to infrastructure rather than agents). One daily one-shot pass: liveness canary of the container's life-support processes (bridge/daemon/watchdog) via processhealth.py, smoke-test of the mission-critical tools (browser/LinkedIn) via…
How the Mentor speaks once a pattern from mentor-patterns has crossed the threshold. Three output formats — strategic advice (rare, weighty), weekly digest, on-demand answer — each with strict shape and voice rules. The Mentor's authority comes from how rarely the words come and how heavy each one weighs; this skill…
The six patterns the Mentor hunts in the records to decide WHEN to speak. Silence is the default; only a real, recurring pattern earns a word. This skill gives the canonical detection method for each pattern (DB query + threshold) so the Mentor never speaks from a single data point. Read-only — never writes to the DB.…
Notify the user with automatic fallback. Tries Telegram first; if the bot is not configured / unreachable / rate-limited, the message lands on the web dashboard via cloud sync instead. Always records the message in pendingusermessages so nothing is lost. Use this whenever you need to reach the user with a status…
Geocode the precise office building (lat/lon/address) for a position AFTER location-enrichment has populated loccity/loccountry. Use web search aggressively (3+ attempts) to find the company HQ/office address, then resolve coordinates via Nominatim/Photon. Skip ONLY after exhaustive search fails or when multiple…
Conversational protocol the Assistente follows to onboard the user — first message, iterative one-question-per-turn pacing, blocking checklist (the floor that unlocks the dashboard) vs rich checklist (what makes Writers actually useful), settore-agnostic question style (NEVER assume IT), and the mandatory checkpoint…
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…
Decide WHICH role to spawn / pause / kill based on backlog state, not gut feel. Open this skill EVERY TIME you observe — vel team < 50% target, OR any role queue = 0, OR Scout sources exhausted, OR [SCALA UP] from Sentinella, OR PIPELINE VUOTA + UNDERSHOOT, OR MARGINE from bridge-pacing, OR cold start, OR whenever you…
The 5-gate sequence the Scout runs for EACH candidate position before INSERTing into positions: dedup → link verification → JD fetch → permissive filters → INSERT. Skipping any gate fills the DB with duplicates, dead links, or out-of-scope rows that the Analyst then has to drop — wasted Sonnet budget downstream. Owned…
Single source of truth for the SCHEMA of candidateprofile.yml — the canonical format that the WHOLE team produces and consumes. 3-level model: frozen core + standard blocks + free custom blocks. Defines the 6 block kinds the web knows how to render and the governance rule (no agent invents the format). Every profile…
Write the 4 narrative Markdown summaries under $JHTHOME/profile/summaries/ that complement the structured YAML. The Writers downstream NEED these — a YAML alone produces sterile CVs because it has no voice, no narrative, no positioning. Owned by the Assistente. Filenames are FIXED (the frontend ignores anything else)…
Maintain $JHTHOME/profile/candidateprofile.yml — the structured candidate data the entire team consumes. The frontend polls this file every 2s; an invalid YAML makes the user's left panel go silently blank. Owned by the Assistente. Use this skill on EVERY new piece of information from the user (text or uploaded file)…
Coordinated, team-wide cleanup of Python packages installed under $JHTHOME/.local via uv pip install --user (T13 magazzino). Owned by the Dottore. The audit is NOT unilateral — only the Writer / Critic agents know whether a library they imported dynamically still serves them, so the flow is broadcast → 1h consent…
Read the rate-limit budget snapshot for the active provider (usage %, time-to-reset, velocity, projection, recommended throttle) from the bridge. Use it at Captain startup to plan pace and decide how many agents to spawn, then periodically when you want a fresh snapshot without spending tokens calling the provider…
Recheck cadenzato della MODALITÀ CURA a costo minimo. Lo script fa il lavoro meccanico su un batch (verifica tiered di ogni URL, aggiorna lastchecked per le OPEN verificate); tu giudichi SOLO i casi ambigui. Misurato 78-86kT a posizione col giro manuale — con il batch spendi un turno per 10 posizioni, non 10 turni.…
Check whether a job posting is STILL OPEN without producing false-opens. Replaces the ad-hoc curl (HTTP 200 = "open") that does NOT see the expiry rendered in JavaScript (Ashby/Workday/Greenhouse) nor the LinkedIn authwall (200 for closed ones too). ALWAYS use it in the recheck; never set isopen by hand off a single…
When a mission-critical tool fails, NEVER degrade silently or report "queue exhausted"/new=0. Classify broken-vs-empty, then climb the fallback ladder — auto-repair via jht-install, retry, alternative method, mark OPENUNVERIFIED, escalate to the Capitano with the exact fix. Use whenever a tool you depend on (browser…
Gradual calibration of the roster — measure the burn of 1 worker, compute how many workers and which throttle it takes to hit the target speed, and spawn in stages (never in 6th gear).