Rolester is organized around skills plus deterministic scripts.
candidate profile ──────────────────────────────────────────────────────┐
-> search setup │
-> sourced scan │
-> gated intake <── research loop (research-company / -comp / -boards)│
-> body-read evaluation │
-> tailoring │
-> communication tracking │
-> application tracking │
-> interview prep │
-> outcome tracking ──> reevaluation loop (reevaluate-strategy) ───────┘
The research loop feeds evaluation and interview prep with cited company intel and comp benchmarks. The reevaluation loop reads the full funnel and recommends targeting, fit-calibration, or channel-mix changes when outcome thresholds trip.
Root AGENTS.md and CLAUDE.md instruct agents how to map user intent to the
16 skills. Routes are grouped below by cluster.
- New workspace or incomplete profile →
ingest-profile - "Scan my projects folder / repo" →
ingest-profile(projects-scan mode) - "Sync / import email, pull recruiter replies" (Apple Mail or opted-in Gmail/Outlook webmail) →
ingest-mail - "Sync / check LinkedIn or Wellfound messages/DMs" (opt-in browser) →
ingest-messages
- "Apply", "submit", or a JD URL with apply intent →
apply-job(apply-jobmust run or verifyevaluate-jobas step zero; LinkedIn Easy Apply postings can use the opt-in authenticated one-click path gated by theone_click_applycapability — no new skill, stays withinapply-job) - "Gate", "should I apply", or a JD URL without apply intent →
evaluate-job - "Find jobs", "source", "search", "refresh queue" →
search-jobs - "Set up searches", "build search config" →
setup-searches - "Tailor résumé / cover letter / short answer" (after gate passes) →
tailor-application
- "Research this company" / company URL or name pasted →
research-company - "What's market comp", "benchmark my salary ask" →
research-comp - "Find more boards", "what sources should I add", stale queue →
research-boards
- Email or recruiter message: draft, reply, follow-up, thank-you, scheduling,
written negotiation counter →
email-comms - Live / verbal offer call, real-time negotiation coaching, rehearsal →
interview-prep
- Interview invite, screen, panel, assessment →
interview-prep - Building behavioral / STAR stories, story bank →
interview-prep
- Rejection, offer, status change, outcome update →
track-outcomes - "Check my statuses", "sync my pipeline", poll ATS dashboards →
sync-status(opt-in browser automation; reads portals, hands transitions totrack-outcomes) - "Why am I getting filtered", strategy review, re-rank, or when outcome
thresholds trip →
reevaluate-strategy
- "Change a setting", comp floor/target, exclusions, writing style, form defaults,
search sources, usage mode, application mode, browser automation, or session
browser →
configure
apply-job must run or verify evaluate-job as step zero.
Skills make judgment calls:
- what to ask during onboarding
- whether a job passes the body-read gate
- how to rate fit
- which evidence should support an application
- how to draft and summarize candidate communications
- what to include in an interview packet
Scripts should be deterministic:
- validate setup
- build source URLs from config
- parse saved jobs
- dedupe sourced roles
- check link liveness
- render documents
- validate tracker state
Tracker state stores concise communication thread metadata. Longer message
bodies and summaries live in workspace/comms/.
email-comms should read both before drafting so the user does not need to
re-provide thread history.
Search sources are provider adapters under src/core/providers/.
- URL-query sources build stable URLs from config before Playwright opens them.
- RSS/Atom sources should poll feeds before browser capture.
- ATS sources should use stable public endpoints where possible.
- Browser-rendered sources should preserve the generated URL, raw capture, and exact recency cutoff.
See SOURCES.md.
Candidate facts, generated artifacts, and tracker state stay local.
Reusable skills, scripts, templates, and schemas are public-safe.
See ../DATA_CONTRACT.md.