13 KiB
Weekly Agent Scheduler Prompt
Use this prompt to run the next weekly agent task in the rotation.
You are the bitvid weekly agent scheduler. Your job is to determine which weekly agent task to run next, execute it, and log the run.
Authority Hierarchy
- AGENTS.md — repository-wide policy (overrides everything)
- CLAUDE.md — repository conventions and development guidance
- This prompt — scheduler logic
- Individual agent prompt — the task you will execute
Read both AGENTS.md and CLAUDE.md before executing any task.
Task Log Format
Task logs use a directory-based format where each log entry is a separate file. This prevents git merge conflicts when multiple agents run concurrently.
Directory
docs/agents/task-logs/weekly/
File Naming Convention
YYYY-MM-DD_HH-MM-SS_<agent-name>_<status>.md
Examples:
2026-02-13_14-30-00_changelog-agent_started.md2026-02-13_15-45-22_changelog-agent_completed.md
File Content Template
Each log file contains:
# Agent Task Log Entry
- **Date:** YYYY-MM-DD
- **Agent:** <agent-name>
- **Prompt:** <prompt-file>
- **Status:** started | completed | failed
- **Branch:** <branch-name>
- **Summary:** <one-line summary>
Reading the Log
To find the most recent entry:
ls docs/agents/task-logs/weekly/ | sort | tail -n 1
To find all entries for a specific agent:
ls docs/agents/task-logs/weekly/ | grep "<agent-name>"
PRE-FLIGHT GATE — Run These Commands NOW
This gate is NOT optional. You MUST run both commands below and paste their raw output before doing anything else. If you skip this, you will duplicate another agent's work and waste the entire run. This has happened repeatedly.
If you arrived here from the meta prompt and already ran these commands and pasted the output, you may skip ahead to Step 1. Otherwise:
COMMAND 1 — Check for open weekly agent PRs
Run this command:
curl -s "https://api.github.com/repos/PR0M3TH3AN/bitvid/pulls?state=open&per_page=100" | jq '{count: length, prs: [.[] | {number, created_at, draft, head: {ref: .head.ref}, agent: ((.head.ref | capture("^agents/weekly/(?<agent>[^/]+)/")?.agent) // (.title | capture("(?<agent>[A-Za-z0-9-]+-agent)")?.agent // null))}] | sort_by(.created_at, .number)}'
Paste the complete raw output. If the command returns nothing or errors, write: OUTPUT: (empty — no results)
Normalize each PR to an agent name using this deterministic rule:
- Preferred: parse the branch name from
head.refwith the conventionagents/weekly/<agent-name>/.... - Fallback: only if branch parsing fails, parse
<agent-name>from the PR title. - If an agent cannot be derived from PR metadata, treat that PR as a global lock warning and do not schedule any weekly agent until manually resolved.
Examples of valid weekly claim branch names (all parseable):
agents/weekly/ci-health-agent/2026-02-weekly-runagents/weekly/telemetry-agent/report-refreshagents/weekly/weekly-synthesis-agent/sprint-07
OFF LIMITS rule: any PR that maps to an agent in the weekly cadence is excluded, regardless of title tag format.
COMMAND 2 — Check the task log for incomplete runs
Run this command:
ls docs/agents/task-logs/weekly/ | sort
Paste the complete raw output.
Look for any _started.md files that do NOT have a corresponding _completed.md or _failed.md file from the same agent at a later timestamp. Those agents are OFF LIMITS (unless the started file is more than 24 hours old — check the date in the filename).
Build your exclusion list
Combine results from Commands 1 and 2:
- Agents with open/draft PRs → EXCLUDED
- PRs whose agent cannot be derived from metadata → GLOBAL LOCK (stop scheduling this cadence)
- Agents with
startedstatus less than 24 hours old (no matchingcompleted/failed) → EXCLUDED
Write your exclusion list explicitly:
EXCLUDED AGENTS: agent-a, agent-b
or:
EXCLUDED AGENTS: (none)
If Command 1 failed (network error, API rate limit, curl/jq unavailable): you MUST still check the task log directory (Command 2). Log a warning in your summary that PR-based claim checking was unavailable.
Do not proceed to Step 1 until you have pasted command outputs and written your exclusion list.
Step 1 — Determine the Next Task
- List the task log directory:
ls docs/agents/task-logs/weekly/ | sort - Find the most recent entry (last file alphabetically — filenames sort chronologically).
- Identify the
agent-namefrom the filename (the third segment, between the second_and the status). - Look up that agent in the alphabetical roster below and select the next agent in the list.
- If the most recent agent is the last in the roster, wrap around to the first.
- If the directory is empty, start with the first agent in the roster.
- CHECK YOUR EXCLUSION LIST. If the selected agent is on the exclusion list, skip to the next agent in the roster. Repeat until you find an agent that is NOT excluded. If you cycle through the entire roster and ALL agents are excluded, log as
failedwith summary"All roster tasks currently claimed by other agents"and stop.
Agent Roster (alphabetical order)
| # | Agent Name | Prompt File |
|---|---|---|
| 1 | bug-reproducer-agent | bitvid-bug-reproducer-agent.md |
| 2 | changelog-agent | bitvid-changelog-agent.md |
| 3 | dead-code-agent | bitvid-dead-code-agent.md |
| 4 | event-schema-agent | bitvid-event-schema-agent.md |
| 5 | frontend-console-debug-agent | bitvid-frontend-console-debug-agent.md |
| 6 | fuzz-agent | bitvid-fuzz-agent.md |
| 7 | interop-agent | bitvid-interop-agent.md |
| 8 | perf-deepdive-agent | bitvid-perf-deepdive-agent.md |
| 9 | perf-optimization-agent | bitvid-perf-optimization-agent.md |
| 10 | pr-review-agent | bitvid-pr-review-agent.md |
| 11 | race-condition-agent | bitvid-race-condition-agent.md |
| 12 | refactor-agent | bitvid-refactor-agent.md |
| 13 | smoke-agent | bitvid-smoke-agent.md |
| 14 | telemetry-agent | bitvid-telemetry-agent.md |
| 15 | test-coverage-agent | bitvid-test-coverage-agent.md |
| 16 | weekly-synthesis-agent | bitvid-weekly-synthesis-agent.md |
Step 2 — Claim the Task (Prevent Duplicate Work)
This step is MANDATORY. Do not proceed to execution without completing it.
You must create a visible claim before doing any work. This claim is a distributed lock that prevents agents on other platforms (Claude Code, Codex, Jules) from picking up the same task.
2a. Mandatory claim sequence (exact order)
Complete the following in this exact order. Do not reorder or skip steps:
- Create your working branch.
- Create a minimal claim commit (for example, a new
context/CONTEXT_<timestamp>.mdwith task scope). - Push the branch immediately.
- Open a draft PR immediately after the push.
- Create and push the
_started.mdlog file. - Re-run the claim check command.
- Only then proceed to Step 3 (task execution).
2b. Draft PR requirement (hard stop)
If draft PR creation fails for any reason, abort the run immediately, mark the scheduler attempt as failed, and do not execute the task body.
2c. Create and push _started.md log file
Create a
startedlog file NOW, before executing the task. This ensures the rotation advances even if you crash during execution.
Create a new file in docs/agents/task-logs/weekly/ with this naming pattern:
YYYY-MM-DD_HH-MM-SS_<agent-name>_started.md
Use the current UTC timestamp. The file content should be:
# Agent Task Log Entry
- **Date:** <YYYY-MM-DD>
- **Agent:** <agent-name>
- **Prompt:** <prompt-file>
- **Status:** started
- **Branch:** <branch-name>
- **Summary:** Task claimed — execution beginning
Commit and push this log file to your branch. This started entry serves as a secondary lock: other scheduler instances will see it and skip this agent.
2d. Final pre-execution claim check (race condition check)
After pushing the started log, re-check for competing claims:
curl -s "https://api.github.com/repos/PR0M3TH3AN/bitvid/pulls?state=open&per_page=100" | jq '{count: length, prs: [.[] | {number, created_at, draft, head: {ref: .head.ref}, agent: ((.head.ref | capture("^agents/weekly/(?<agent>[^/]+)/")?.agent) // (.title | capture("(?<agent>[A-Za-z0-9-]+-agent)")?.agent // null))}] | sort_by(.created_at, .number)}'
Decision logic (must be explicit):
- Compare only open/draft PRs whose derived
agentmatches the agent you just claimed. - If another matching PR has an earlier
created_at, abort this run and pick the next agent. - If
created_atvalues are equal or ambiguous, use the lowernumberas the tie-breaker (lower number wins).
Before proceeding, print exactly one race verdict line:
RACE CHECK: wonRACE CHECK: lost (agent already claimed by PR #<number>)
If the verdict is lost, abandon your branch and go back to Step 1 to select the next agent.
2e. Required output checklist (must be filled before Step 3)
Branch pushed: yes/no
Draft PR #: ...
Started log filename: ...
Final pre-execution claim check passed: yes/no
Do not begin Step 3 until all checklist fields are filled.
Step 3 — Execute the Task
- Read the selected agent's prompt file from
docs/agents/prompts/weekly/<filename>. - Adopt that prompt as your operating instructions for this session.
- Follow the agent prompt's workflow end-to-end, including:
- Updating the persistent state files (in
context/,todo/,decisions/,test_logs/) per AGENTS.md Section 15. - Running any required linting, tests, or audits specified by the agent prompt.
- Creating artifacts, reports, or PRs as the agent prompt directs.
- Updating the persistent state files (in
Step 4 — Update the Task Log (Final Status)
After completing the task (or if the task fails), create a new log file with the final status. Do NOT modify the started file.
Create a new file in docs/agents/task-logs/weekly/:
For completed tasks:
YYYY-MM-DD_HH-MM-SS_<agent-name>_completed.md
For failed tasks:
YYYY-MM-DD_HH-MM-SS_<agent-name>_failed.md
Use the current UTC timestamp (which will be later than the started file). The file content should be:
# Agent Task Log Entry
- **Date:** <YYYY-MM-DD>
- **Agent:** <agent-name>
- **Prompt:** <prompt-file>
- **Status:** completed (or failed)
- **Branch:** <branch-name>
- **Summary:** <one-line summary of what was done or why it failed>
Rules for the Log
- Never modify existing files — always create new files. This eliminates merge conflicts.
- One
started+ one final file per run — each scheduler invocation creates exactly two files (started, then completed/failed). - Use UTC timestamps — ensures consistent chronological sorting across time zones.
- Files sort chronologically — the filename format ensures
ls | sortproduces a timeline.
Important: Weekly agents use their own log directory (docs/agents/task-logs/weekly/), separate from the daily log (docs/agents/task-logs/daily/). This keeps weekly and daily rotations independent and avoids one cadence interfering with the other's position tracking.
Step 5 — Verify and Submit
- Verify the log: List
docs/agents/task-logs/weekly/and confirm your entries were created correctly (proper filename format, valid content). - Run a final check: Execute
npm run lintto confirm no lint regressions were introduced. - Commit your changes with a descriptive message following this pattern:
chore(agents): run <agent-name> weekly task — <brief summary> - Push to the appropriate branch.
Error Handling
- If the agent prompt file is empty or missing, skip it, log the run as
failedwith summary"Prompt file empty or missing", and proceed to the next agent in the roster. - If a task fails mid-execution (test failures, build errors), log the run as
failedwith a summary describing the failure. Still commit the log file and any partial artifacts. - If the task log directory is missing, create it:
mkdir -p docs/agents/task-logs/weekly/. - If
curlorjqis unavailable or errors, fall back to log-file-only claiming (thestartedfile). Log a warning in your summary that PR-based claim checking was degraded.
Quick Reference: What Prevents Duplicate Work
| Layer | Mechanism | Catches |
|---|---|---|
| Pre-flight gate | Scan ALL open PR metadata via curl + deterministic agent mapping |
Agents claimed by any platform |
| Pre-flight gate | Check task log dir for started files |
Agents in progress (even without PR) |
| Step 2a | Branch + claim commit + push + draft PR | Cross-platform visibility and explicit lock |
| Step 2c | Create started log file immediately |
Crash recovery — rotation advances |
| Step 2d | Final race condition re-check | Simultaneous claims |
All five layers must be executed. No single layer is sufficient on its own.
Why directories instead of CSV? Each agent creates its own uniquely-named file, so concurrent agents never touch the same file. This eliminates the git merge conflicts and race conditions that occurred when multiple agents appended to a shared CSV.