Data Model & the Workspace
Where data lives, what each file means, and how the tracker is structured.
Directory layout
rolester/
candidate/ ← private, gitignored — your config and evidence
workspace/ ← private, gitignored — runtime data and artifacts
config/ ← public schemas and example files
.agents/skills/ ← the 21 skill definitions (public)
src/ ← core scripts and CLI (public)
bin/ ← the CLI entry pointROLESTER_HOME overrides where candidate/ and workspace/ are created. Set it
to keep your data outside the repo tree.
candidate/ — private config
These files are gitignored and never shipped:
| File | Contents |
|---|---|
profile.yml | Identity, location, compensation floor and targets, domain/toolchain |
targeting.yml | Role buckets, keep/cut signals, excluded companies, degree policy |
evidence.yml | Accomplishment claims that feed tailored artifacts |
honesty.yml | Tools confirmed, do-not-claim list, fabrication boundaries |
form-defaults.yml | Applicant facts and expected-base for portal forms |
modes.yml | Usage and application posture switches (optional) |
automation.yml | Browser capability and platform consent switches (optional) |
writing-style.md | Voice calibration for outbound artifacts |
stories.yml | STAR+R behavioral story bank |
learnings/<family>.md | Per-role-family durable lessons (compounding) |
AGENTS.md | Personalized router generated by ingest-profile |
workspace/ — runtime data
Also gitignored:
| Path | Contents |
|---|---|
tracker.json | The single source of truth for the dashboard |
tracker.html | Latest static dashboard snapshot |
dashboard-data.js | Browser-side data adapter (re-generated with each render) |
activity.jsonl | Append-only Activity Pulse feed |
jobs/ | Saved JD bodies (<slug>.md) |
tailored/ | Tailored résumés, cover letters, short answers |
comms/ | Full recruiter / hiring thread bodies |
interview-prep/ | Interview packets and debriefs |
research/ | Company intel, comp benchmarks, board-discovery log |
intake/ | Sourced and triaged posting queue |
scan-results/ | Raw board / ATS scan output |
writing-samples/ | Voice-calibration writing samples |
captures/ | Throwaway browser screenshots (never committed) |
tracker.json structure
tracker.json is the primary data contract between the agent and the dashboard.
Its top-level shape:
{
"meta": {
"lastUpdatedAt": "2026-06-01T12:00:00Z",
"lastSweepAt": "...",
"version": 42
},
"applications": [...],
"sourced": [...],
"communications": [...],
"strategyReview": {...}
}applications[]
Each application row contains:
company,role,url,status— identity and pipeline positionfitScore,fitBucket,roleFit— body-read gate verdict and fit detailscompEstimate,compNote— comp intelinterviewAt,nextInterviewAt,interviewNote— scheduled interview statefollowUp— follow-up due date and draftconversations[]— array of calls, interviews, and debriefs (typed bykind)artifacts— paths to tailored documents, JD body, interview dossier
sourced[]
Roles discovered by search-jobs before the gate runs. Each entry has
fitScore, fitBucket, fitBasis, and the saved JD body path. Promoted to
applications[] after a KEEP gate verdict.
communications[]
Recruiter and hiring threads. Each has status, messages[], draft, and
nextActionDue. The dashboard's Next Steps and CTA queue derives from these
fields, not from the Activity Pulse.
The tracker is the authority
The dashboard renders exclusively from workspace/tracker.json. There is no
separate database. If the dashboard shows stale data, re-render:
rolester tracker # re-render from current tracker.jsonOr run rolester tracker-dev for a live-reloading session.