Agentic job-search workspace for finding, vetting, tailoring, tracking, and preparing for the right roles.
A local, skill-driven workspace: define what you actually want, turn it into searches, gate jobs against the real posting, tailor honest application artifacts, track outcomes, and prep for interviews — all from your own data, which never leaves your machine.
Tagline:
Find, vet, and advance the right roles.
Prerequisites:
- Node.js ≥ 18 — check with
node -v - A coding-agent CLI on your PATH — Claude Code or Codex:
- Claude Code:
npm install -g @anthropic-ai/claude-code(claude.com/claude-code) - Codex:
npm install -g @openai/codex(github.com/openai/codex)
- Claude Code:
Get it running:
git clone https://github.com/CodesWhat/rolester
cd rolester
npm install
node bin/rolester.mjs start claude # or: node bin/rolester.mjs start codexThat scaffolds your workspace, installs the skills, opens the dashboard at
http://localhost:7777, and hands off to your agent. Then paste a job posting and
say "evaluate this" — or try the bundled sample under examples/sample-jobs/.
Update later:
node bin/rolester.mjs update # fetches the latest published code; your data is untouchedNothing you enter leaves your machine. No account, no server, no build step.
Rolester is an agent runtime: the CLI sets up the workspace and dashboard, but the actual job-search work happens inside your agent reading the skills.
Useful flags: --no-agent (scaffold + dashboard only), --no-dashboard,
--agent <name> (any CLI on your PATH, e.g. cursor), --port <n> (default 7777).
Once your agent is up, use it the way a real candidate would:
- Let it onboard you. It builds a profile by asking a few questions. To kick the tires without using real details, just say: "set me up with a quick sample profile so I can test the flow."
- Paste a job posting (a JD copied from anywhere, a posting URL, or the bundled
sample in
examples/sample-jobs/) and say "evaluate this." You should get aGATE / FIT / COMP / ACTIONverdict from an actual read of the posting — not a keyword match. - Ask it to tailor: "write a resume and cover letter for this." It builds honest artifacts from the profile's evidence bank and refuses to invent facts.
- Paste a recruiter email and say "draft a reply" — it routes to the comms flow and tracks the thread.
- Open http://localhost:7777 and watch the application appear, move through the funnel, and accumulate activity. The dashboard is read-only — the agent does the work; the dashboard just shows it.
If those five land, the whole stack — CLI plumbing, skills, agent reasoning, and the live dashboard — is working end to end.
Prefer to let the agent run the test itself? Open claude or codex in this
folder and say:
read the README and AGENTS.md, set yourself up, and walk me through testing Rolester end to end
What's normal, not a bug: until you onboard, node bin/rolester.mjs doctor
reports that local candidate setup is incomplete and lists candidate/*.yml to
create — that's the expected pre-setup state, and your agent fills it in during
onboarding.
Rolester is built around a simple rule: do not tailor or apply until the job has passed a real body-read gate. Title and keyword matches are triage, not truth.
The intended workflow:
- Ingest the candidate profile, resume, evidence bank, and constraints.
- Generate searches and source jobs into the sourced queue.
- Read the JD body and emit a KEEP/CUT/REVIEW decision.
- Tailor honest application artifacts from the evidence bank.
- Draft and track recruiter/hiring communications.
- Track applications and outcomes.
- Build interview packets when a role advances.
The full apply-cycle is shipped and working end-to-end:
- Guided onboarding (
ingest-profile) — conversational interview that producescandidate/config: targets, comp floor, evidence bank, honesty boundaries, writing-style calibration. - Search & intake (
setup-searches,search-jobs) — build searches from your targets; dedupe, liveness-check, and triage the sourced queue. - Body-read gate (
evaluate-job) — reads the full posting; emitsGATE / FIT / COMP / ACTIONagainst your config before any tailoring. - Honest tailoring (
tailor-application) — résumé, cover letter, and short-answer artifacts built only from your evidence bank, with placeholder lint that blocks unresolved tokens. - Apply assistant (
apply-job) — portal form-fill recipes, manual-submit default, CAPTCHA pause. - Communication memory (
email-comms) — draft and track recruiter threads, follow-ups, scheduling, and negotiation. - Interview prep (
interview-prep) — audience-segmented packets grounded in your evidence; STAR+R story bank; live and written negotiation coaching. - Outcome tracking & strategy (
track-outcomes,reevaluate-strategy) — records results; triggers strategy review when rejection or advance thresholds trip. - Research loop (
research-company,research-comp,research-boards) — company intel, comp benchmarking, and board discovery with a citation-tier firewall so web findings never launder into résumé claims. - Tracker dashboard — stat cards, funnel, Active Pipeline (Sourced → Offer), All-Jobs table, per-job detail, follow-up reminders; Table ⇄ Board ⇄ Calendar views; Tokyo Night and Gruvbox theme families.
- Learning memory — per-role-family lessons compound across loops; tailoring and evaluation get sharper each time.
Health check:
npm run doctorrolester start brings the dashboard up for you. To run it on its own:
npm run tracker # render workspace/tracker.html once — a static snapshot
npm run tracker:dev # serve http://localhost:7777 with live reloadrolester start [agent] starts the live server as a separate local process and
records its PID/log at .internal/tracker-dev.pid and
.internal/tracker-dev.log, so the dashboard keeps serving while the agent does
the work.
npm run tracker publishes the dashboard shell to workspace/tracker.html
and its browser data adapter to workspace/dashboard-data.js. Use
tracker:dev for the live command center: it serves the shell, the adapter, and
workspace/tracker.json, watches tracker data plus dashboard source, re-renders
through the same path as npm run tracker, and refreshes the open page over
Server-Sent Events.
The roadmap lives in docs/ROADMAP.md. The source strategy lives in docs/SOURCES.md.
Naming decision: Rolester.
Why: it has the Napster/Friendster feel, it is role-specific, and it avoids the generic "jobster" lane while still making sense for a job-search workspace.
Prior candidates now treated as alternates: Prospectr, Prospector,
RoleRelay, CareerRelay, RoleProxy, See-V, and RoleScopeGo.
