Rolester
Advanced

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 point

ROLESTER_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:

FileContents
profile.ymlIdentity, location, compensation floor and targets, domain/toolchain
targeting.ymlRole buckets, keep/cut signals, excluded companies, degree policy
evidence.ymlAccomplishment claims that feed tailored artifacts
honesty.ymlTools confirmed, do-not-claim list, fabrication boundaries
form-defaults.ymlApplicant facts and expected-base for portal forms
modes.ymlUsage and application posture switches (optional)
automation.ymlBrowser capability and platform consent switches (optional)
writing-style.mdVoice calibration for outbound artifacts
stories.ymlSTAR+R behavioral story bank
learnings/<family>.mdPer-role-family durable lessons (compounding)
AGENTS.mdPersonalized router generated by ingest-profile

workspace/ — runtime data

Also gitignored:

PathContents
tracker.jsonThe single source of truth for the dashboard
tracker.htmlLatest static dashboard snapshot
dashboard-data.jsBrowser-side data adapter (re-generated with each render)
activity.jsonlAppend-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 position
  • fitScore, fitBucket, roleFit — body-read gate verdict and fit details
  • compEstimate, compNote — comp intel
  • interviewAt, nextInterviewAt, interviewNote — scheduled interview state
  • followUp — follow-up due date and draft
  • conversations[] — array of calls, interviews, and debriefs (typed by kind)
  • 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.json

Or run rolester tracker-dev for a live-reloading session.

On this page