daily-job-plan · git:20261023.9f9eaf2 · 2026-10-23 · sha256 2510399c56ca2401
daily-job-plan git:20261023.9f9eaf2A
Immutable. This exact content never changes and is served at /api/v1/blob/2510399c56ca2401.
--- # GENERATED by scripts/kernel/sync.py from skills/daily-job-plan/SKILL.md - do not edit name: daily-job-plan description: "Use each morning (js-morning-brief, or when the owner starts the Recruiter) and evening (js-evening-review), or when the owner asks what the job search does today: the charter's day: sweep, cards, flashcards, quick actions, day queue, deep work, evening wrap." --- # Daily job plan: the charter's day (docs/AGENCY-CHARTER.md, "The day") Owner: the Recruiter (agent `lane-recruiter`, `lanes/recruiter/AGENT.md`). Tier: T1 for the files; every outward act is T3 and runs only on the owner's yes in that session (`playbooks/send-after-yes.md`). Mode `morning` before 12:00 local, `evening` from 12:00 (or pass the mode). A routine run is unattended: it collects and writes, then stops before the flashcards (step 4). Today is !`date +%F`. ## Inputs - `python3 scripts/interviews.py`: line 1 of every plan: interviews booked and held, daily, no ceiling (see the charter); the floors in targets/goals.yaml (`python3 scripts/lessons.py` prints them against today and this week). - `python3 scripts/clock.py status --today <date>`; `python3 scripts/strategy_review.py` (writes state/recruiter/review-<date>.md and proposals-<date>.md); `python3 scripts/dashboard.py --status --today <date>`. - `state/recruiter/LESSONS.md`, yesterday's `state/recruiter/wrap-<date>.md`, the posts lane's `state/posts/sweep-<date>.jsonl` when it has run, `legal/timers.md` (clocks within 7 days), today's calendar. ## Outputs - `state/recruiter/sweep-<date>.md` and `.json` (recruiter_sweep.py), `cards-<date>.md` and `.json` (cards.py), `queue-<date>.yaml` (day_queue.py), `wrap-<date>.md` (evening). - `state/daily/<date>.md`: line 1 the interviews line, line 2 the clock line, then the counts (sweep items, cards by group, queue items) and the path of today's cards file. Evening appends `## Actuals` and `## Tomorrow`. - The sentinel `NEEDS_YOU` or `NO_ACTION`; routine runs append a receipt to the routine's run log (`js-morning-brief/<date>.md` or `js-evening-review/<date>.md`): time, commands, counts, sentinel. ## Procedure: morning 1. Work from the user's data folder (`$JOB_AGENCY_DATA`). Run `interviews.py`, `clock.py status`, `strategy_review.py` and `dashboard.py --status`; every number in the plan comes from them or a command below. 2. **Sweep** (charter day steps 1 and 2): `python3 scripts/mail_intake.py` (the mail pass), then, when no `state/recruiter/sweep-<date>.md` exists yet, `python3 scripts/recruiter_sweep.py --since last --write`: every new post, listing, mail, message, follow-up, approval and due item, itemised. A second same-day run replaces the morning listing with the delta: read the existing file instead. No deep research yet. 3. **Cards** (step 3): when no `cards-<date>.md` exists, `python3 scripts/cards.py --write` ranks the items (posts and people first, then focused items, then fit and chance; the location tie-break is the user's policy, `policy.location.*`), each with one action and an effort level. A cards file that carries decisions is never overwritten. Unattended runs stop here: write `state/daily/<date>.md`, sentinel `NEEDS_YOU` (cards are waiting). 4. **Flashcards** (step 4, attended): fill each quick card's `draft:` (human, specific, never salesy; follow the user's style config and voice guide, see `skills/draft-reply`); brief the owner: decisions, messages for feedback, people and companies, quick actions; a round today or tomorrow first, with its pack, mock and logistics. The owner answers "yes 1-12, no 4, change 7: ...". 5. **Quick actions at once** (step 5): each yes card through `playbooks/send-after-yes.md` (the yes recorded, `outbox.py can-send`, the act, the receipt, `outbox.py mark-sent`, the tracker or touch event). 6. **Day queue** (step 6): `python3 scripts/day_queue.py build --with-quick-apply`; the lanes the owner starts claim items by kind; review each result before it reaches the owner or goes out. ## Procedure: evening (step 7, the wrap) 1. Step 1 above; `python3 scripts/day_queue.py show` for what is done, claimed, blocked. 2. `python3 scripts/evening_wrap.py --write` writes `state/recruiter/wrap-<date>.md` (numbers against the floors in targets/goals.yaml, experiments, re-checks due; the Recruiter's `## Decide` section is kept; `python3 scripts/lessons.py` prints the floors against today and this week). Then complete it: what went out and what came back ([references/commands.md](references/commands.md)), what the numbers say (the interviews line first), the day's Learned lines from every lane and role (state/learn/), what changed in the strategy and why, and the first items for tomorrow's cards. One LESSONS.md line per change: the number behind it (a sample large enough to trust, or one clear cause), a re-check date, reverted if it did not help. 3. Append `## Actuals` and `## Tomorrow` to `state/daily/<date>.md`; sentinel and receipt. ## Gate Every number is pasted from a command run this pass; one that could not be verified is marked "unverified". Nothing is presented that has not passed its gates; nothing goes out on a card the owner did not say yes to. ## Stop conditions - `dashboard.py`, `tracker.py` or `clock.py` fails: write the plan from files, mark every number "unverified", sentinel `NEEDS_YOU`. - An unattended run never drafts into a person's thread, never creates or decides an approval, never sends. ## Scope Writes the day files above, `state/daily/<date>.md`, LESSONS.md lines and the receipt. Never edits application records, pages or approvals from this skill (each has its owner). Usable by hand in any session.