Rolester
Advanced

The Agent Contract

AGENTS.md — intent routing, the gate contract, artifact rules, and write-back invariants.

AGENTS.md in the repo root is the agent's operating contract. Every agent runtime that reads it (Claude Code, Codex, or similar) operates under the same rules. The file is the source of truth; this page summarizes the key sections.

Intent routing

The agent routes any user input — a job paste, a recruiter email, a question, a command — to the owning skill without you naming a skill explicitly. The routing table is extensive; a few key examples:

What you say or pasteRouted to
A job description or URLevaluate-job (then apply-job if apply intent)
"Apply to this"apply-job
"Find jobs" / "run a search"search-jobs
A recruiter / hiring emailemail-comms
An interview inviteinterview-prep
A rejection / offer / status changetrack-outcomes
"Schedule this" / availability threadschedule-meeting
"Research this company"research-company
"Optimize my LinkedIn"optimize-linkedin
Resume / profile factsingest-profile
"Change a setting"configure

Paste routing is universal: anything dropped into the agent chat gets classified, captured, and routed — nothing evaporates.

Gate contract

evaluate-job is the shared mandatory gate. No tailoring, filling, or submission can proceed without a KEEP verdict (or an explicit user-approved REVIEW).

apply-job runs or verifies evaluate-job as step zero. It cannot skip this step, even when the user says "just apply."

Tracker Write Contract

Every skill that mutates workspace/tracker.json must:

  1. Stamp meta.lastUpdatedAt to the current ISO timestamp and increment meta.version in the same write.
  2. Verify with rolester tracker --verify.
  3. Re-render with rolester tracker so the dashboard hot-reloads.
  4. Log one Activity Pulse event via rolester activity append.

These four steps are a unit. A partial write (e.g., updating data but not stamping) is an incomplete write.

Artifact rules

  • Every generated artifact (résumé, cover letter, email) must be complete — no templates, no [Placeholder] tokens.
  • Artifacts land in two places: the tracker record (for dashboard access) and ~/Downloads/rolester/<Company>/ (convenience copy).
  • Placeholder lint runs before any artifact is marked build-ready. An unresolved bracket blocks the build.
  • The agent never invents facts. Claims trace to candidate/evidence.yml.

The body-read gate invariant

The JD body is captured locally at grab time — when a posting is sourced, evaluated, or applied to. A link is never a substitute: postings vanish when a req closes or goes behind a login. The gate reads the locally saved body, not a live URL, so evaluation stays possible even after the req is taken down.

Privacy invariant

profile.yml#compensation.current_base is private. It informs comp strategy but must never appear in any outbound artifact (résumé, cover letter, recruiter message, interview packet, tracker note that could be shared). Outbound comp anchors on target_base. Skills that produce outbound text route around current_base by field path.

Domain-neutral rule

Skills and code never hardcode personal, role, tech, comp, region, board, or company preferences. Every such bias lives in candidate/ config files. A trucking candidate and an AI engineer run the same skills with different configs and get different behavior.

Round vocabulary

Interview rounds are named by type, never numbered:

conversations[].kindRung shown
recruiter screenScreen
assessmentAssessment
technicalTechnical
hiring managerHiring manager
onsiteOnsite
finalFinal
offerOffer

The dashboard derives an application's pipeline rung from the deepest kind it can classify. "Round 2" is never written.

On this page