ai-employees 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +160 -0
- package/TRADEMARKS.md +45 -0
- package/docs/COST.md +59 -0
- package/docs/FAQ.md +39 -0
- package/docs/GUARDRAILS.md +17 -0
- package/docs/HARNESSES.md +38 -0
- package/docs/HOW-EMPLOYEES-WORK.md +86 -0
- package/docs/INSTALL.md +148 -0
- package/docs/PREREQUISITES.md +91 -0
- package/docs/STANDARD.md +194 -0
- package/docs/UPGRADING.md +74 -0
- package/docs/WHAT-SETS-THEM-APART.md +10 -0
- package/employees/ad-manager-employee/AGENTS.md +46 -0
- package/employees/ad-manager-employee/CAPABILITIES.md +1002 -0
- package/employees/ad-manager-employee/CHANGELOG.md +99 -0
- package/employees/ad-manager-employee/CONTRACT.md +977 -0
- package/employees/ad-manager-employee/INSTALL-PROMPT.md +263 -0
- package/employees/ad-manager-employee/README.md +357 -0
- package/employees/ad-manager-employee/RELEASES.md +25 -0
- package/employees/ad-manager-employee/ROLE.md +617 -0
- package/employees/ad-manager-employee/SCHEDULE.md +275 -0
- package/employees/ad-manager-employee/VERSION +1 -0
- package/employees/ad-manager-employee/employee.json +185 -0
- package/employees/ad-manager-employee/examples/README.md +21 -0
- package/employees/ad-manager-employee/examples/board/LAUNCH-BOARD.md +19 -0
- package/employees/ad-manager-employee/examples/board/board.json +51 -0
- package/employees/ad-manager-employee/examples/brief-latest.md +20 -0
- package/employees/ad-manager-employee/examples/build/campaign-storm-repair.md +51 -0
- package/employees/ad-manager-employee/examples/creative/set-2026-03-04-fast-estimate/set.md +31 -0
- package/employees/ad-manager-employee/examples/metrics/daily.jsonl +2 -0
- package/employees/ad-manager-employee/examples/runlog.jsonl +3 -0
- package/employees/ad-manager-employee/recipes/BROWSER-RECIPES.md +558 -0
- package/employees/ad-manager-employee/recipes/META-ADS-RECIPES.md +100 -0
- package/employees/ad-manager-employee/routines/ads-account-intake/SKILL.md +929 -0
- package/employees/ad-manager-employee/routines/ads-account-read/SKILL.md +780 -0
- package/employees/ad-manager-employee/routines/ads-build-desk/SKILL.md +915 -0
- package/employees/ad-manager-employee/routines/ads-change-list/SKILL.md +818 -0
- package/employees/ad-manager-employee/routines/ads-creative-retro/SKILL.md +807 -0
- package/employees/ad-manager-employee/routines/ads-creative-studio/SKILL.md +802 -0
- package/employees/ad-manager-employee/routines/ads-desk-standup/SKILL.md +822 -0
- package/employees/ad-manager-employee/run/ads-account-intake.cmd.example +11 -0
- package/employees/ad-manager-employee/run/ads-account-read.cmd.example +11 -0
- package/employees/ad-manager-employee/run/ads-build-desk.cmd.example +11 -0
- package/employees/ad-manager-employee/run/ads-change-list.cmd.example +11 -0
- package/employees/ad-manager-employee/run/ads-creative-retro.cmd.example +11 -0
- package/employees/ad-manager-employee/run/ads-creative-studio.cmd.example +11 -0
- package/employees/ad-manager-employee/run/ads-desk-standup.cmd.example +11 -0
- package/employees/ad-manager-employee/scripts/copy-check.mjs +815 -0
- package/employees/ad-manager-employee/scripts/guard.mjs +447 -0
- package/employees/ad-manager-employee/scripts/review.mjs +443 -0
- package/employees/ad-manager-employee/scripts/runlog.mjs +785 -0
- package/employees/chief-of-staff/AGENTS.md +46 -0
- package/employees/chief-of-staff/CAPABILITIES.md +875 -0
- package/employees/chief-of-staff/CHANGELOG.md +91 -0
- package/employees/chief-of-staff/CONTRACT.md +1039 -0
- package/employees/chief-of-staff/INSTALL-PROMPT.md +206 -0
- package/employees/chief-of-staff/README.md +382 -0
- package/employees/chief-of-staff/RELEASES.md +22 -0
- package/employees/chief-of-staff/ROLE.md +425 -0
- package/employees/chief-of-staff/SCHEDULE.md +288 -0
- package/employees/chief-of-staff/VERSION +1 -0
- package/employees/chief-of-staff/employee.json +214 -0
- package/employees/chief-of-staff/examples/README.md +15 -0
- package/employees/chief-of-staff/examples/brief-latest.md +20 -0
- package/employees/chief-of-staff/examples/decisions/REGISTER.md +22 -0
- package/employees/chief-of-staff/examples/dossiers/dossier-seo-employee--seo-publish-run--silent-stop.md +43 -0
- package/employees/chief-of-staff/examples/fleet/fleet.json +119 -0
- package/employees/chief-of-staff/examples/runlog.jsonl +3 -0
- package/employees/chief-of-staff/recipes/BROWSER-RECIPES.md +512 -0
- package/employees/chief-of-staff/routines/cos-charter-and-fleet-audit/SKILL.md +1008 -0
- package/employees/chief-of-staff/routines/cos-decision-brief/SKILL.md +639 -0
- package/employees/chief-of-staff/routines/cos-decision-review/SKILL.md +644 -0
- package/employees/chief-of-staff/routines/cos-fault-dossier/SKILL.md +656 -0
- package/employees/chief-of-staff/routines/cos-fleet-reconcile/SKILL.md +942 -0
- package/employees/chief-of-staff/routines/cos-market-sweep/SKILL.md +655 -0
- package/employees/chief-of-staff/routines/cos-metrics-review/SKILL.md +746 -0
- package/employees/chief-of-staff/run/cos-charter-and-fleet-audit.cmd.example +11 -0
- package/employees/chief-of-staff/run/cos-decision-brief.cmd.example +11 -0
- package/employees/chief-of-staff/run/cos-decision-review.cmd.example +11 -0
- package/employees/chief-of-staff/run/cos-fault-dossier.cmd.example +11 -0
- package/employees/chief-of-staff/run/cos-fleet-reconcile.cmd.example +11 -0
- package/employees/chief-of-staff/run/cos-market-sweep.cmd.example +11 -0
- package/employees/chief-of-staff/run/cos-metrics-review.cmd.example +11 -0
- package/employees/chief-of-staff/scripts/copy-check.mjs +812 -0
- package/employees/chief-of-staff/scripts/guard.mjs +447 -0
- package/employees/chief-of-staff/scripts/runlog.mjs +766 -0
- package/employees/customer-satisfaction-employee/AGENTS.md +47 -0
- package/employees/customer-satisfaction-employee/CAPABILITIES.md +910 -0
- package/employees/customer-satisfaction-employee/CHANGELOG.md +91 -0
- package/employees/customer-satisfaction-employee/CONTRACT.md +1121 -0
- package/employees/customer-satisfaction-employee/INSTALL-PROMPT.md +290 -0
- package/employees/customer-satisfaction-employee/README.md +378 -0
- package/employees/customer-satisfaction-employee/RELEASES.md +22 -0
- package/employees/customer-satisfaction-employee/ROLE.md +393 -0
- package/employees/customer-satisfaction-employee/SCHEDULE.md +283 -0
- package/employees/customer-satisfaction-employee/VERSION +1 -0
- package/employees/customer-satisfaction-employee/employee.json +231 -0
- package/employees/customer-satisfaction-employee/examples/README.md +15 -0
- package/employees/customer-satisfaction-employee/examples/brief-latest.md +17 -0
- package/employees/customer-satisfaction-employee/examples/desk/DESK-BOARD.md +18 -0
- package/employees/customer-satisfaction-employee/examples/queue/2026-03-05-reply.md +36 -0
- package/employees/customer-satisfaction-employee/examples/runlog.jsonl +3 -0
- package/employees/customer-satisfaction-employee/examples/tickets/tickets.jsonl +2 -0
- package/employees/customer-satisfaction-employee/recipes/BROWSER-RECIPES.md +549 -0
- package/employees/customer-satisfaction-employee/routines/csat-churn-watch/SKILL.md +709 -0
- package/employees/customer-satisfaction-employee/routines/csat-deflection-desk/SKILL.md +671 -0
- package/employees/customer-satisfaction-employee/routines/csat-desk-intake/SKILL.md +1115 -0
- package/employees/customer-satisfaction-employee/routines/csat-desk-standup/SKILL.md +831 -0
- package/employees/customer-satisfaction-employee/routines/csat-inbox-sweep/SKILL.md +673 -0
- package/employees/customer-satisfaction-employee/routines/csat-reply-desk/SKILL.md +755 -0
- package/employees/customer-satisfaction-employee/routines/csat-satisfaction-report/SKILL.md +844 -0
- package/employees/customer-satisfaction-employee/routines/csat-taxonomy-refresh/SKILL.md +798 -0
- package/employees/customer-satisfaction-employee/run/csat-churn-watch.cmd.example +11 -0
- package/employees/customer-satisfaction-employee/run/csat-deflection-desk.cmd.example +11 -0
- package/employees/customer-satisfaction-employee/run/csat-desk-intake.cmd.example +11 -0
- package/employees/customer-satisfaction-employee/run/csat-desk-standup.cmd.example +11 -0
- package/employees/customer-satisfaction-employee/run/csat-inbox-sweep.cmd.example +11 -0
- package/employees/customer-satisfaction-employee/run/csat-reply-desk.cmd.example +11 -0
- package/employees/customer-satisfaction-employee/run/csat-satisfaction-report.cmd.example +11 -0
- package/employees/customer-satisfaction-employee/run/csat-taxonomy-refresh.cmd.example +11 -0
- package/employees/customer-satisfaction-employee/scripts/copy-check.mjs +888 -0
- package/employees/customer-satisfaction-employee/scripts/guard.mjs +447 -0
- package/employees/customer-satisfaction-employee/scripts/runlog.mjs +778 -0
- package/employees/gtm-engineer/AGENTS.md +47 -0
- package/employees/gtm-engineer/CAPABILITIES.md +929 -0
- package/employees/gtm-engineer/CHANGELOG.md +93 -0
- package/employees/gtm-engineer/CONTRACT.md +977 -0
- package/employees/gtm-engineer/INSTALL-PROMPT.md +237 -0
- package/employees/gtm-engineer/README.md +355 -0
- package/employees/gtm-engineer/RELEASES.md +22 -0
- package/employees/gtm-engineer/ROLE.md +551 -0
- package/employees/gtm-engineer/SCHEDULE.md +265 -0
- package/employees/gtm-engineer/VERSION +1 -0
- package/employees/gtm-engineer/employee.json +230 -0
- package/employees/gtm-engineer/examples/README.md +15 -0
- package/employees/gtm-engineer/examples/board/LAUNCH-BOARD.md +12 -0
- package/employees/gtm-engineer/examples/brief-latest.md +19 -0
- package/employees/gtm-engineer/examples/crm/contacts.csv +4 -0
- package/employees/gtm-engineer/examples/queue/2026-03-05-email.md +26 -0
- package/employees/gtm-engineer/examples/runlog.jsonl +3 -0
- package/employees/gtm-engineer/recipes/BROWSER-RECIPES.md +582 -0
- package/employees/gtm-engineer/routines/gtm-board-standup/SKILL.md +745 -0
- package/employees/gtm-engineer/routines/gtm-icp-refresh/SKILL.md +647 -0
- package/employees/gtm-engineer/routines/gtm-intake-and-dashboard/SKILL.md +1046 -0
- package/employees/gtm-engineer/routines/gtm-launch-step-runner/SKILL.md +802 -0
- package/employees/gtm-engineer/routines/gtm-outreach-queue/SKILL.md +708 -0
- package/employees/gtm-engineer/routines/gtm-paid-and-tracking-guard/SKILL.md +970 -0
- package/employees/gtm-engineer/routines/gtm-scoreboard/SKILL.md +740 -0
- package/employees/gtm-engineer/routines/gtm-signal-sweep/SKILL.md +648 -0
- package/employees/gtm-engineer/run/gtm-board-standup.cmd.example +11 -0
- package/employees/gtm-engineer/run/gtm-icp-refresh.cmd.example +11 -0
- package/employees/gtm-engineer/run/gtm-intake-and-dashboard.cmd.example +11 -0
- package/employees/gtm-engineer/run/gtm-launch-step-runner.cmd.example +11 -0
- package/employees/gtm-engineer/run/gtm-outreach-queue.cmd.example +11 -0
- package/employees/gtm-engineer/run/gtm-paid-and-tracking-guard.cmd.example +11 -0
- package/employees/gtm-engineer/run/gtm-scoreboard.cmd.example +11 -0
- package/employees/gtm-engineer/run/gtm-signal-sweep.cmd.example +11 -0
- package/employees/gtm-engineer/scripts/copy-check.mjs +815 -0
- package/employees/gtm-engineer/scripts/guard.mjs +447 -0
- package/employees/gtm-engineer/scripts/runlog.mjs +772 -0
- package/employees/sales-employee/AGENTS.md +46 -0
- package/employees/sales-employee/CAPABILITIES.md +880 -0
- package/employees/sales-employee/CHANGELOG.md +92 -0
- package/employees/sales-employee/CONTRACT.md +1161 -0
- package/employees/sales-employee/INSTALL-PROMPT.md +256 -0
- package/employees/sales-employee/README.md +372 -0
- package/employees/sales-employee/RELEASES.md +22 -0
- package/employees/sales-employee/ROLE.md +319 -0
- package/employees/sales-employee/SCHEDULE.md +263 -0
- package/employees/sales-employee/VERSION +1 -0
- package/employees/sales-employee/employee.json +202 -0
- package/employees/sales-employee/examples/README.md +16 -0
- package/employees/sales-employee/examples/brief-latest.md +17 -0
- package/employees/sales-employee/examples/crm/contacts.csv +4 -0
- package/employees/sales-employee/examples/crm/prospects.jsonl +2 -0
- package/employees/sales-employee/examples/pipeline/PIPELINE.md +18 -0
- package/employees/sales-employee/examples/queue/2026-03-05-first-touch.md +29 -0
- package/employees/sales-employee/examples/runlog.jsonl +3 -0
- package/employees/sales-employee/recipes/BROWSER-RECIPES.md +535 -0
- package/employees/sales-employee/routines/sales-desk-setup/SKILL.md +896 -0
- package/employees/sales-employee/routines/sales-desk-standup/SKILL.md +818 -0
- package/employees/sales-employee/routines/sales-first-touch-drafts/SKILL.md +681 -0
- package/employees/sales-employee/routines/sales-followup-sweep/SKILL.md +736 -0
- package/employees/sales-employee/routines/sales-pipeline-review/SKILL.md +765 -0
- package/employees/sales-employee/routines/sales-prospect-sweep/SKILL.md +696 -0
- package/employees/sales-employee/routines/sales-qualification-refresh/SKILL.md +743 -0
- package/employees/sales-employee/run/sales-desk-setup.cmd.example +11 -0
- package/employees/sales-employee/run/sales-desk-standup.cmd.example +11 -0
- package/employees/sales-employee/run/sales-first-touch-drafts.cmd.example +11 -0
- package/employees/sales-employee/run/sales-followup-sweep.cmd.example +11 -0
- package/employees/sales-employee/run/sales-pipeline-review.cmd.example +11 -0
- package/employees/sales-employee/run/sales-prospect-sweep.cmd.example +11 -0
- package/employees/sales-employee/run/sales-qualification-refresh.cmd.example +11 -0
- package/employees/sales-employee/scripts/copy-check.mjs +815 -0
- package/employees/sales-employee/scripts/guard.mjs +447 -0
- package/employees/sales-employee/scripts/runlog.mjs +773 -0
- package/employees/seo-employee/AEO-PLAYBOOK.md +51 -0
- package/employees/seo-employee/AGENTS.md +47 -0
- package/employees/seo-employee/CAPABILITIES.md +1006 -0
- package/employees/seo-employee/CHANGELOG.md +95 -0
- package/employees/seo-employee/CONTRACT.md +1020 -0
- package/employees/seo-employee/INSTALL-PROMPT.md +233 -0
- package/employees/seo-employee/README.md +368 -0
- package/employees/seo-employee/RELEASES.md +22 -0
- package/employees/seo-employee/ROLE.md +331 -0
- package/employees/seo-employee/SCHEDULE.md +267 -0
- package/employees/seo-employee/VERSION +1 -0
- package/employees/seo-employee/employee.json +233 -0
- package/employees/seo-employee/examples/README.md +14 -0
- package/employees/seo-employee/examples/board/WORK-BOARD.md +16 -0
- package/employees/seo-employee/examples/brief-latest.md +16 -0
- package/employees/seo-employee/examples/content/drafts.jsonl +2 -0
- package/employees/seo-employee/examples/content/published.jsonl +2 -0
- package/employees/seo-employee/examples/drafts/roof-lifespan-by-material/body.md +39 -0
- package/employees/seo-employee/examples/drafts/roof-lifespan-by-material/meta.json +16 -0
- package/employees/seo-employee/examples/runlog.jsonl +3 -0
- package/employees/seo-employee/recipes/BROWSER-RECIPES.md +576 -0
- package/employees/seo-employee/routines/seo-answer-visibility/SKILL.md +55 -0
- package/employees/seo-employee/routines/seo-calendar-refill/SKILL.md +614 -0
- package/employees/seo-employee/routines/seo-draft-run/SKILL.md +722 -0
- package/employees/seo-employee/routines/seo-index-sweep/SKILL.md +629 -0
- package/employees/seo-employee/routines/seo-intake-and-map/SKILL.md +916 -0
- package/employees/seo-employee/routines/seo-publish-run/SKILL.md +713 -0
- package/employees/seo-employee/routines/seo-rank-review/SKILL.md +795 -0
- package/employees/seo-employee/routines/seo-standup/SKILL.md +792 -0
- package/employees/seo-employee/run/seo-answer-visibility.cmd.example +11 -0
- package/employees/seo-employee/run/seo-calendar-refill.cmd.example +11 -0
- package/employees/seo-employee/run/seo-draft-run.cmd.example +11 -0
- package/employees/seo-employee/run/seo-index-sweep.cmd.example +11 -0
- package/employees/seo-employee/run/seo-intake-and-map.cmd.example +11 -0
- package/employees/seo-employee/run/seo-publish-run.cmd.example +11 -0
- package/employees/seo-employee/run/seo-rank-review.cmd.example +11 -0
- package/employees/seo-employee/run/seo-standup.cmd.example +11 -0
- package/employees/seo-employee/scripts/answer-audit.mjs +63 -0
- package/employees/seo-employee/scripts/copy-check.mjs +843 -0
- package/employees/seo-employee/scripts/guard.mjs +447 -0
- package/employees/seo-employee/scripts/runlog.mjs +864 -0
- package/employees/seo-employee/standards/PUBLISH-STANDARD.md +229 -0
- package/employees/social-media-employee/AGENTS.md +46 -0
- package/employees/social-media-employee/CAPABILITIES.md +1015 -0
- package/employees/social-media-employee/CHANGELOG.md +91 -0
- package/employees/social-media-employee/CONTRACT.md +1036 -0
- package/employees/social-media-employee/INSTALL-PROMPT.md +234 -0
- package/employees/social-media-employee/README.md +386 -0
- package/employees/social-media-employee/RELEASES.md +22 -0
- package/employees/social-media-employee/ROLE.md +376 -0
- package/employees/social-media-employee/SCHEDULE.md +278 -0
- package/employees/social-media-employee/VERSION +1 -0
- package/employees/social-media-employee/employee.json +195 -0
- package/employees/social-media-employee/examples/README.md +20 -0
- package/employees/social-media-employee/examples/brief-latest.md +19 -0
- package/employees/social-media-employee/examples/calendar/CALENDAR.md +23 -0
- package/employees/social-media-employee/examples/calendar/calendar.json +30 -0
- package/employees/social-media-employee/examples/posts/posts.jsonl +2 -0
- package/employees/social-media-employee/examples/queue/2026-03-05-business-network.md +28 -0
- package/employees/social-media-employee/examples/runlog.jsonl +3 -0
- package/employees/social-media-employee/recipes/BROWSER-RECIPES.md +550 -0
- package/employees/social-media-employee/routines/soc-calendar-standup/SKILL.md +783 -0
- package/employees/social-media-employee/routines/soc-draft-queue/SKILL.md +683 -0
- package/employees/social-media-employee/routines/soc-engagement-sweep/SKILL.md +636 -0
- package/employees/social-media-employee/routines/soc-intake-and-voice/SKILL.md +909 -0
- package/employees/social-media-employee/routines/soc-material-sweep/SKILL.md +658 -0
- package/employees/social-media-employee/routines/soc-performance-review/SKILL.md +795 -0
- package/employees/social-media-employee/routines/soc-publish-run/SKILL.md +643 -0
- package/employees/social-media-employee/run/soc-calendar-standup.cmd.example +11 -0
- package/employees/social-media-employee/run/soc-draft-queue.cmd.example +11 -0
- package/employees/social-media-employee/run/soc-engagement-sweep.cmd.example +11 -0
- package/employees/social-media-employee/run/soc-intake-and-voice.cmd.example +11 -0
- package/employees/social-media-employee/run/soc-material-sweep.cmd.example +11 -0
- package/employees/social-media-employee/run/soc-performance-review.cmd.example +11 -0
- package/employees/social-media-employee/run/soc-publish-run.cmd.example +11 -0
- package/employees/social-media-employee/scripts/copy-check.mjs +950 -0
- package/employees/social-media-employee/scripts/guard.mjs +447 -0
- package/employees/social-media-employee/scripts/runlog.mjs +786 -0
- package/employees/web-dev-employee/AGENTS.md +47 -0
- package/employees/web-dev-employee/CAPABILITIES.md +950 -0
- package/employees/web-dev-employee/CHANGELOG.md +91 -0
- package/employees/web-dev-employee/CONTRACT.md +1052 -0
- package/employees/web-dev-employee/INSTALL-PROMPT.md +210 -0
- package/employees/web-dev-employee/README.md +352 -0
- package/employees/web-dev-employee/RELEASES.md +22 -0
- package/employees/web-dev-employee/ROLE.md +383 -0
- package/employees/web-dev-employee/SCHEDULE.md +280 -0
- package/employees/web-dev-employee/VERSION +1 -0
- package/employees/web-dev-employee/employee.json +228 -0
- package/employees/web-dev-employee/examples/README.md +13 -0
- package/employees/web-dev-employee/examples/board/REVIEW-BOARD.md +20 -0
- package/employees/web-dev-employee/examples/brief-latest.md +14 -0
- package/employees/web-dev-employee/examples/changes/2026-03-05-fix-C-005.md +30 -0
- package/employees/web-dev-employee/examples/changes/changes.jsonl +2 -0
- package/employees/web-dev-employee/examples/health/incidents.jsonl +2 -0
- package/employees/web-dev-employee/examples/runlog.jsonl +3 -0
- package/employees/web-dev-employee/recipes/BROWSER-RECIPES.md +477 -0
- package/employees/web-dev-employee/routines/web-dependency-run/SKILL.md +634 -0
- package/employees/web-dev-employee/routines/web-fix-runner/SKILL.md +754 -0
- package/employees/web-dev-employee/routines/web-guardrail-review/SKILL.md +613 -0
- package/employees/web-dev-employee/routines/web-inventory-refresh/SKILL.md +700 -0
- package/employees/web-dev-employee/routines/web-platform-guard/SKILL.md +707 -0
- package/employees/web-dev-employee/routines/web-site-sweep/SKILL.md +732 -0
- package/employees/web-dev-employee/routines/web-standup/SKILL.md +738 -0
- package/employees/web-dev-employee/routines/web-weekly-report/SKILL.md +623 -0
- package/employees/web-dev-employee/run/web-dependency-run.cmd.example +11 -0
- package/employees/web-dev-employee/run/web-fix-runner.cmd.example +11 -0
- package/employees/web-dev-employee/run/web-guardrail-review.cmd.example +11 -0
- package/employees/web-dev-employee/run/web-inventory-refresh.cmd.example +11 -0
- package/employees/web-dev-employee/run/web-platform-guard.cmd.example +11 -0
- package/employees/web-dev-employee/run/web-site-sweep.cmd.example +11 -0
- package/employees/web-dev-employee/run/web-standup.cmd.example +11 -0
- package/employees/web-dev-employee/run/web-weekly-report.cmd.example +11 -0
- package/employees/web-dev-employee/scripts/copy-check.mjs +872 -0
- package/employees/web-dev-employee/scripts/guard.mjs +447 -0
- package/employees/web-dev-employee/scripts/runlog.mjs +792 -0
- package/installer/cli.mjs +250 -0
- package/installer/upgrade.mjs +255 -0
- package/package.json +43 -0
- package/skills/hire/SKILL.md +72 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
# Chief of Staff: the schedule
|
|
2
|
+
|
|
3
|
+
This file is the only place cadences, fire times, windows, budgets, period keys, and browser lanes live. Every routine reads its own row here at the top of every run, as Step 0.1, and takes `days`, `window_start`, `window_end`, `key`, `budget`, and `browser` from it. **A SKILL.md never carries a clock time.** A registered job may drift from this table without breaking anything, because the window guard catches it and the monthly drift check reports it.
|
|
4
|
+
|
|
5
|
+
If a routine cannot find its row here, or cannot parse it, it records `status: "failed"` with the blocker `no SCHEDULE.md row for <routine-id>` and exits. It never guesses a window.
|
|
6
|
+
|
|
7
|
+
`CONTRACT.md` section 1 carries the same seven routines with their cadence in words. **Where the two disagree, this file wins**, because this is the file the member edits and the file the guard reads.
|
|
8
|
+
|
|
9
|
+
All times are 24 hour local machine time. No time in this file is UTC and none is relative to any other zone.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 1. The rows
|
|
14
|
+
|
|
15
|
+
This table is authoritative. Edit it, and the routines follow on their next fire.
|
|
16
|
+
|
|
17
|
+
| routine | days | fire | window_start | window_end | key | budget | browser |
|
|
18
|
+
|---|---|---|---|---|---|---|---|
|
|
19
|
+
| `cos-fleet-reconcile` | `mon-fri` | 07:15 | 07:00 | 11:30 | `YYYY-MM-DD` | 20 min | never |
|
|
20
|
+
| `cos-fault-dossier` | `mon-fri` | 14:30 | 14:15 | 18:00 | `YYYY-MM-DD` | 25 min | never |
|
|
21
|
+
| `cos-market-sweep` | `wed` | 10:00 | 09:45 | 14:00 | `YYYY-Www` | 40 min | heavy |
|
|
22
|
+
| `cos-metrics-review` | `thu` | 10:30 | 10:15 | 15:00 | `YYYY-Www` | 30 min | conditional |
|
|
23
|
+
| `cos-decision-brief` | `fri` | 16:00 | 15:45 | 19:00 | `YYYY-Www` | 30 min | never |
|
|
24
|
+
| `cos-charter-and-fleet-audit` | `first-weekday` | 12:00 | 11:45 | 17:00 | `YYYY-MM` | 45 min | light |
|
|
25
|
+
| `cos-decision-review` | `last-weekday` | 13:00 | 12:45 | 17:30 | `YYYY-MM` | 30 min | never |
|
|
26
|
+
|
|
27
|
+
Seven rows, seven routines, and every id carries the `cos-` prefix so they namespace cleanly beside the other AI Employees this one watches.
|
|
28
|
+
|
|
29
|
+
### 1.1 The column meanings
|
|
30
|
+
|
|
31
|
+
| Column | Meaning |
|
|
32
|
+
|---|---|
|
|
33
|
+
| `routine` | The routine id. It equals the folder name under `routines/` and the YAML `name` key in that folder's SKILL.md. All three are always the same string |
|
|
34
|
+
| `days` | Which days the routine is allowed to run. Vocabulary in section 3 |
|
|
35
|
+
| `fire` | The time to register in whatever schedules this machine. Not a guarantee, and not what the window guard checks |
|
|
36
|
+
| `window_start`, `window_end` | The only thing the window guard checks. Outside this range the routine records `skipped-out-of-window` and exits |
|
|
37
|
+
| `key` | The period key format used by the once per period guard. Local date for weekdays, ISO week for weekly, calendar month for monthly, computed from the local date and never from a UTC timestamp |
|
|
38
|
+
| `budget` | Hard wall clock budget. At budget the routine writes what it has and records `partial` |
|
|
39
|
+
| `browser` | How much browser control the routine needs. This drives the staggering in section 4 and decides whether it takes the mutex |
|
|
40
|
+
|
|
41
|
+
### 1.2 The browser column
|
|
42
|
+
|
|
43
|
+
| Value | Means |
|
|
44
|
+
|---|---|
|
|
45
|
+
| `never` | Reads and writes files only. Runs to full function on a machine with no browser control at all. Never takes the mutex, and never deletes a lock |
|
|
46
|
+
| `light` | Prefers a route that needs no browser, and takes the lane for one step only. `cos-charter-and-fleet-audit` crawls through `web.fetch` and takes the lock only to view the built dashboard |
|
|
47
|
+
| `conditional` | Uses the browser on some runs only. `cos-metrics-review` takes a lane if and only if `charter/metric-map.md` names at least one live screen. On a healthy install it names none, and this routine opens nothing |
|
|
48
|
+
| `heavy` | Navigates and reads for most of its budget. Owns the lane for the whole browser phase |
|
|
49
|
+
|
|
50
|
+
**Anything other than `never` takes the browser mutex**, described in section 4.3. **Four of the seven are `never`**, and for two of them that is a discipline rather than a saving: `cos-decision-brief` argues only from facts another routine verified and wrote down, and `cos-decision-review` verifies only against a metric file rather than a display. Opening a page in either would break the thing that makes their output worth reading.
|
|
51
|
+
|
|
52
|
+
### 1.3 What happens on a machine with no browser control
|
|
53
|
+
|
|
54
|
+
There is no status meaning "this machine has no browser". A missing capability maps onto the closed eight in `CONTRACT.md` section 4.1:
|
|
55
|
+
|
|
56
|
+
- File work still to do: `partial`, with `no browser control capability configured` in `blockers[]`.
|
|
57
|
+
- Nothing else to do: `failed`, same blocker string.
|
|
58
|
+
|
|
59
|
+
**Six of the seven produce their main deliverable with no browser at all**, including the morning brief, the daily dossier, the weekly score, the Friday argument, and the monthly review. `CAPABILITIES.md` section 7 has the routine by routine detail and it is honest about the one that genuinely needs a browser, which is the market sweep.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 2. The roster
|
|
64
|
+
|
|
65
|
+
| routine | display name | cadence | job, one line |
|
|
66
|
+
|---|---|---|---|
|
|
67
|
+
| `cos-fleet-reconcile` | Fleet reconcile | Weekdays | Walks every AI Employee on this machine strictly read only, classifies every routine as running, stopped loudly, stopped silently, or paused, ages the faults, folds the decision register, and writes the brief |
|
|
68
|
+
| `cos-fault-dossier` | Fault dossier | Weekdays | Takes the top open fault and turns it into a page the member can act on in a minute, ending in one paste ready correction line with the exact path it belongs in |
|
|
69
|
+
| `cos-market-sweep` | Market sweep | Wednesdays | Works its own watchlist through one contiguous browser phase and captures one dated observation per real change, with a verbatim quote and the exact URL |
|
|
70
|
+
| `cos-metrics-review` | Metrics review | Thursdays | Scores the fleet and the business for the week with a source beside every number, citing the Employee that owns a metric rather than recomputing it |
|
|
71
|
+
| `cos-decision-brief` | Decision brief | Fridays | Picks three moves, argues both sides of each with a citation in every clause, and argues against its own top recommendation last |
|
|
72
|
+
| `cos-charter-and-fleet-audit` | Charter and fleet audit | First weekday of the month | First run it researches the business, discovers the Employees on this machine, writes the map and the charter, seeds the priorities and the watchlist, builds the dashboard, and registers seven jobs. Monthly it re-runs discovery and reconciles the map |
|
|
73
|
+
| `cos-decision-review` | Decision review | Last weekday of the month | Folds the decision ledger, scores this Employee's own judgement against the metric files that measured it, retires a move nobody ever accepted, and rewrites the priorities |
|
|
74
|
+
|
|
75
|
+
**Two of the seven cannot be turned off.**
|
|
76
|
+
|
|
77
|
+
`cos-charter-and-fleet-audit` writes `charter/fleet-map.md`, which is the file every other routine reads to know what exists. Without it the reconcile can walk exactly one root, its own.
|
|
78
|
+
|
|
79
|
+
`cos-fleet-reconcile` writes `brief-latest.md`, which is what the member opens first every morning. It is the only writer of `fleet/fleet.json` and `decisions/REGISTER.md`, the only reader of `fleet/inbox.jsonl`, and the only routine that turns a ticked box into a decision outcome. Without it no fault ever ages, the dossier has no input, and no decision is ever scoreable.
|
|
80
|
+
|
|
81
|
+
**The first run of `cos-charter-and-fleet-audit` is exempt from the window guard, and only from the window guard.** The member launches it by hand from `INSTALL-PROMPT.md`, at whatever hour they extracted the zip. It detects the first run by the absence of `state/cos-charter-and-fleet-audit.json` and records `notes: "first run, window guard not applicable"`. It is also the one run not held to the row's budget: it takes about an hour, it may run past the session that started it, and when it does the member opens a second session and it resumes from `progress[]`. Every other guard still applies, including the period guard, the budget, the mutex, and both stops.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 3. The `days` vocabulary
|
|
86
|
+
|
|
87
|
+
Closed. Six values, and `CONTRACT.md` section 1.2 carries the same six.
|
|
88
|
+
|
|
89
|
+
| Value | Means |
|
|
90
|
+
|---|---|
|
|
91
|
+
| `mon-fri` | Monday to Friday |
|
|
92
|
+
| `mon`, `tue`, `wed`, `thu`, `fri`, `sat` | That single weekday |
|
|
93
|
+
| `first-weekday` | Any Monday to Friday date in the first seven days of the calendar month |
|
|
94
|
+
| `last-weekday` | Any Monday to Friday date in the last seven days of the calendar month |
|
|
95
|
+
| `off` | Registered but disabled. Records `skipped-out-of-window` and exits |
|
|
96
|
+
|
|
97
|
+
Two values are deliberately absent.
|
|
98
|
+
|
|
99
|
+
**`sun` is not in the vocabulary.** A Sunday belongs to the ISO week that just ended, so a weekly routine scheduled on Sunday shares a period key with the following Monday to Friday run and one of the two is silently skipped forever. **The three weekly routines check their own row for `sun` and treat it as an unparsable row**, recording `failed` with a blocker naming the double count, because a silently lost week is worse than a loud failure.
|
|
100
|
+
|
|
101
|
+
**`daily` is not in the vocabulary either.** Nothing in this role needs to run on a weekend. A fleet that produced nothing on Saturday produced nothing correctly, and Monday's reconcile window covers the whole gap in one pass without losing an hour or counting one twice.
|
|
102
|
+
|
|
103
|
+
### 3.1 Why the two monthly values are ranges and not single dates
|
|
104
|
+
|
|
105
|
+
If the monthly routines only ran on the exact first or exact last weekday, a machine that was asleep or shut that morning would skip the whole month. **A month of scoring lost is a month of decisions that never reach an outcome**, and that is the one thing in this kit that cannot be recovered later, because a decision's `visible_by` date passes whether anybody looked or not.
|
|
106
|
+
|
|
107
|
+
Giving each a seven day span plus the once per period guard means it runs on the first eligible day the machine is actually awake, once, and then stops for the month. Be generous about when, be strict about how many times.
|
|
108
|
+
|
|
109
|
+
**The two monthly routines can never land on the same date.** The shortest month is 28 days, so days 1 to 7 and the last seven days never overlap in any month of any length. A late catch up cannot create the case either, because a first weekday fire arriving on the 25th fails the window guard's day test and exits clean.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 4. Staggering, and the browser lane
|
|
114
|
+
|
|
115
|
+
Two routines fighting over browser control is a real failure, not a theoretical one. The symptoms are ugly and slow to diagnose: a navigation lands in the other routine's tab, a read returns the wrong page, a click by element reference hits a detached node, or a disconnect is reported that did not happen while both runs keep going. Nothing crashes. The member gets two bad outputs and no error to explain either of them.
|
|
116
|
+
|
|
117
|
+
Two things keep the lane clear, and both are needed. The fire times below are the prevention. The mutex in 4.3 is the enforcement.
|
|
118
|
+
|
|
119
|
+
### 4.1 The rules
|
|
120
|
+
|
|
121
|
+
1. **Minimum gap between two browser capable fires: the earlier routine's full hard budget, plus 20 minutes.** Use the budget, never the typical run time. A routine that usually takes 12 minutes and is budgeted for 40 will one day take 40.
|
|
122
|
+
2. **No two routines share a fire minute**, even when neither touches the browser. Hosts flush queued jobs in bursts, and two agent sessions starting in the same second compete for the same files.
|
|
123
|
+
3. **The window is a catch up net, not a concurrency plan.** Windows overlap on purpose, so a late fire still does useful work. Fire times must not overlap. Where a catch up does put two browser routines in the same minute, the mutex decides which one gets the lane and the other records `blocked-browser-busy` after doing its file work.
|
|
124
|
+
4. **The weekly three run on consecutive days in one order and it is not arbitrary.** The sweep reads the world on Wednesday. The metrics review reads the fleet and cites the sweep's page on Thursday. The decision brief argues from both on Friday. Do not reorder them: a brief argued on Friday from a market page that has not been written yet is a brief argued from nothing.
|
|
125
|
+
5. **If a browser routine records `partial` three weeks running, move its fire or cut its scope. Do not widen its window.** A wider window invites an overlap. A smaller job finishes.
|
|
126
|
+
|
|
127
|
+
### 4.2 The week as it actually runs
|
|
128
|
+
|
|
129
|
+
Times below are the fire time, the hard budget, and the time the lane is guaranteed clear.
|
|
130
|
+
|
|
131
|
+
**Every weekday**
|
|
132
|
+
```
|
|
133
|
+
07:15 cos-fleet-reconcile 20 min never takes no lane
|
|
134
|
+
14:30 cos-fault-dossier 25 min never takes no lane
|
|
135
|
+
```
|
|
136
|
+
The gap between them is deliberate rather than incidental. The dossier reads `fleet/fleet.json`, which the reconcile writes that morning, so it wants to fire hours later and on the same day. If it ever reads a fleet file whose `generated_on` is not today, the reconcile did not run: it works the fault anyway from the file it has and puts the staleness in the dossier's own header.
|
|
137
|
+
|
|
138
|
+
**Wednesday adds**
|
|
139
|
+
```
|
|
140
|
+
10:00 cos-market-sweep 40 min heavy lane clear by 10:40
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Thursday adds**
|
|
144
|
+
```
|
|
145
|
+
10:30 cos-metrics-review 30 min conditional lane clear by 11:00
|
|
146
|
+
```
|
|
147
|
+
Different day from the sweep, so no gap arithmetic is needed between them.
|
|
148
|
+
|
|
149
|
+
**Friday adds**
|
|
150
|
+
```
|
|
151
|
+
16:00 cos-decision-brief 30 min never takes no lane
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**First weekday of the month adds**
|
|
155
|
+
```
|
|
156
|
+
12:00 cos-charter-and-fleet-audit 45 min light lane clear by 12:45
|
|
157
|
+
```
|
|
158
|
+
**This is the only row that needs the arithmetic**, because the first weekday of a month can be any weekday. On a first weekday that is a Wednesday, the sweep's lane is clear by 10:40 and this fires at 12:00, a gap of 80 minutes. On a first weekday that is a Thursday, the metrics review is clear by 11:00, a gap of 60 minutes. Both clear the 20 minute rule comfortably. The audit's own lane is clear by 12:45, which is 105 minutes before the dossier fires, and the dossier takes no lane anyway.
|
|
159
|
+
|
|
160
|
+
**Last weekday of the month adds**
|
|
161
|
+
```
|
|
162
|
+
13:00 cos-decision-review 30 min never takes no lane
|
|
163
|
+
```
|
|
164
|
+
Worst case end 13:30, which is 60 minutes before the dossier fires. It can never collide with the audit, because the two monthly cadences never share a date.
|
|
165
|
+
|
|
166
|
+
**The tightest gap between two lane holding fires in this schedule is 60 minutes**, on a first weekday that falls on a Thursday. That clears the 20 minute rule with 40 minutes to spare, and it is the first thing to check after any edit.
|
|
167
|
+
|
|
168
|
+
If you need more room there, **move the audit later rather than shortening the metrics budget.** The afternoon is empty on most days apart from the dossier, which takes no lane.
|
|
169
|
+
|
|
170
|
+
### 4.3 The mutex, in one paragraph
|
|
171
|
+
|
|
172
|
+
Every routine whose `browser` value is not `never` reads `state/browser-lock.json` before it touches a page. If the file exists and is less than 45 minutes old, another routine is live: do every phase that does not need the browser, record `blocked-browser-busy` naming the holder, and exit. If it is 45 minutes or older it is stale, so overwrite it and note that in the run record. **Delete it on every exit path, including every failure path**, in the same block that writes the run record so a later edit cannot separate the two. Forty five minutes is the staleness window for every routine regardless of its own budget, which is why nothing here is budgeted past 45 minutes. The full rule is `ROLE.md` section 7 and `CONTRACT.md` section 6.
|
|
173
|
+
|
|
174
|
+
**A stale lock is also a finding.** If the routine named in it has no run record for its own current period, it died without recording, and that goes in the run record so the next morning's reconcile raises it as `died-holding-lock`. That is one of the four cases in this kit that earns a push.
|
|
175
|
+
|
|
176
|
+
**A routine that never took the lock never deletes it**, on this Employee or on any other. The four `never` routines may read any lock the fleet map names, as a diagnostic. They write none and delete none.
|
|
177
|
+
|
|
178
|
+
### 4.4 Why the week runs in this order
|
|
179
|
+
|
|
180
|
+
**The reconcile goes first every morning** because everything else in the kit reads what it wrote, and because the member reads it with their first coffee. It takes no browser lane, so it costs the morning nothing.
|
|
181
|
+
|
|
182
|
+
**The dossier goes in the afternoon** because it needs today's fleet file, and because a diagnosis wants a whole run's budget rather than a slice of the morning. A fault it works has by definition been open for at least one full period already, so nothing is lost by the wait.
|
|
183
|
+
|
|
184
|
+
**The sweep goes mid week** because it wants the browser while nobody else is using it and because its page has to exist before Thursday.
|
|
185
|
+
|
|
186
|
+
**The metrics review goes after the sweep** so it can cite that week's market page by path rather than recomputing anything off it.
|
|
187
|
+
|
|
188
|
+
**The decision brief goes last in the week** because both of its evidence inputs are then on disk, verified, quoted, and sourced. It is the only routine whose whole output is an argument, and it argues from files rather than from pages for exactly that reason.
|
|
189
|
+
|
|
190
|
+
**The audit goes on the first weekday and the review on the last**, so the charter is fresh when the month starts and the priorities are fresh when the audit next arrives. **The two never write the same file:** the audit seeds `charter/priorities.md` once and the review owns it from the second month.
|
|
191
|
+
|
|
192
|
+
**If a catch up puts the dossier before the reconcile on some day**, the dossier works yesterday's fleet file and says so in its own header. That is a thin day, not a broken one.
|
|
193
|
+
|
|
194
|
+
### 4.5 Machines that sleep
|
|
195
|
+
|
|
196
|
+
If the machine is asleep at a fire time, what happens next depends on the scheduler, and none of them replays every missed fire. The Claude Desktop app skips a fire the machine slept through and, on wake, runs exactly one catch up for the most recently missed time, looking back seven days. Windows Task Scheduler runs one catch up when its setting to run a missed task as soon as possible is on, and none when it is off. launchd on macOS coalesces every missed fire into one run on wake. cron skips a missed fire and never catches up. So a late fire arrives alone, at an unplanned minute, and sometimes beside another routine's catch up. The window guard and the once per period guard exist for exactly this, and together they make a burst harmless.
|
|
197
|
+
|
|
198
|
+
**Set the earliest fire in this table after the time the machine is normally awake.** If the machine wakes at 08:00, a 07:15 fire always arrives as a catch up, which works, and the brief is permanently one wake behind.
|
|
199
|
+
|
|
200
|
+
**A day the machine slept through is handled rather than misreported.** The reconcile window runs from the exact instant the previous run closed to this run's start, so a Wednesday run after a Tuesday outage covers both days once. Nothing is lost and no hour is counted twice. `CAPABILITIES.md` section 9.5 covers the per platform detail, including the cron case, which never catches up at all.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 5. Registering this table
|
|
205
|
+
|
|
206
|
+
Every harness schedules differently and some do not schedule at all. **`CAPABILITIES.md` section 9 is the file that says which mechanism yours has and gives the exact commands for each one.** Section 9.2a of the same file says what the invocation inside those commands actually looks like on your harness. Neither is restated here, because a set of commands written down twice is a set of commands that will disagree.
|
|
207
|
+
|
|
208
|
+
What belongs here is the shape, which is the same on every harness.
|
|
209
|
+
|
|
210
|
+
1. **One job per routine.** Seven routines, seven jobs. Never one job that runs several in sequence: a chained job defeats the per routine period guard, blurs the budgets, and turns one failure into seven.
|
|
211
|
+
2. **Seven jobs, and never an eighth.** This Employee registers the seven routines in this kit and nothing else. **It never registers, retimes, disables, or removes a job belonging to any other Employee**, even when it can see one is wrong. It names that in the fleet map and in the report and leaves it to the member.
|
|
212
|
+
3. **The job's only content is the invocation.** All the logic is in the SKILL.md.
|
|
213
|
+
4. **Know what the invocation is before you register anything.** `CAPABILITIES.md` 9.2a gives its shape per harness. Where that section could not answer for your harness, find its non interactive run command and write what you found into the `## Corrections` at the bottom of that file.
|
|
214
|
+
5. **Prove one routine by hand before you register seven.** Run the line for `cos-fleet-reconcile` in a terminal and watch it write `brief-latest.md` and one line into `runlog.jsonl`. Seven jobs registered on an invocation nobody has run is seven silent failures on the same morning, and the first thing you see is an empty brief.
|
|
215
|
+
6. **Register the `fire` column, not the window.** The window is enforced inside the routine.
|
|
216
|
+
7. **Name every job exactly after its routine id.** The monthly drift check can only match a registered job to a row when the names are identical.
|
|
217
|
+
|
|
218
|
+
**The Employee registers these itself during setup.** `cos-charter-and-fleet-audit` reads this table and takes whichever route `CAPABILITIES.md` says exists on this machine: the harness's own scheduler first, the operating system's scheduler through `shell.run` second. Where neither is available it writes every command it would have run into `«COS_ROOT»/schedule-commands.txt`, expanded rather than left as a placeholder, and names that file first in its report. Run them once yourself and you are scheduled. **The kit runs identically whether a scheduler or a person started the run**, because every routine reads the clock, reads its row, and decides for itself whether to work.
|
|
219
|
+
|
|
220
|
+
### 5.1 The setting that decides whether any of this produces anything
|
|
221
|
+
|
|
222
|
+
**A routine launched in a prompting mode stalls forever waiting for a human who is asleep.**
|
|
223
|
+
|
|
224
|
+
At 07:15 the reconcile asks to write a file, and then it sits there. Nobody clicks Allow. The run does not fail, which would at least leave a record. It hangs. There is no run record, no brief, and no blocker to read in the morning, because the routine never reached the line that writes one.
|
|
225
|
+
|
|
226
|
+
**That is exactly the `silent-stop` fault class this Employee exists to catch on your other Employees**, and it is the one shape of failure that nothing catches on this one. Get the setting right on day one.
|
|
227
|
+
|
|
228
|
+
**The fix lives in your harness's own settings: run scheduled work in its auto approve mode**, scoped as narrowly as your harness allows for writes, ideally to `«COS_ROOT»` and nothing else. Read access wants to be wider, because reading your other Employees' folders is the job.
|
|
229
|
+
|
|
230
|
+
This does not weaken anything. **The prompt gate was never the guardrail:** it holds every outbound action unless you released the channel, never enters a credential, and never opens a write handle outside its own folder, and all four are checked as invariants at the end of every run. Turning off the prompt removes a question about writing a file inside `«COS_ROOT»`. It does not add a capability. `CAPABILITIES.md` section 10 has the full treatment.
|
|
231
|
+
|
|
232
|
+
If your harness cannot run without interactive approval at all, **schedule the four routines whose lane is `never` and run the other three by hand.** You still get the brief, the dossier, the Friday argument, and the monthly score.
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 6. Changing a time
|
|
237
|
+
|
|
238
|
+
1. Edit the row in this file. This file is the source, so change it here first.
|
|
239
|
+
2. Recompute the gaps in section 4.2 for every day the change touches. If any browser capable fire now sits inside another browser routine's budget plus 20 minutes, pick a different time. Remember that a first weekday can be any weekday.
|
|
240
|
+
3. Re register that one job at the new `fire` time, or leave it and let the monthly drift check remind you. The routine follows the new window either way, on its next fire.
|
|
241
|
+
|
|
242
|
+
**The Employee may change a `fire` time itself, and only for two reasons:** to clear a lane collision it detected inside this kit, or because a routine concluded its own window or cadence is wrong. In the first case `cos-charter-and-fleet-audit` edits the row and records both times in `charter/CHANGELOG.md`. In the second the routine edits **its own row only** and records both times in `improvements/CHANGELOG.md`. Either way it re registers that one job and the change appears in the next morning's brief.
|
|
243
|
+
|
|
244
|
+
**No routine ever changes a row belonging to another routine**, in this kit or in any other Employee. No routine removes a row, sets `days` to `off`, or changes a `days`, `key`, or `budget` value. Those are the member's.
|
|
245
|
+
|
|
246
|
+
A fire time is not a send, not a spend, and not a credential. There is no proposal file in this kit and no verdict to wait for. If the change is wrong, one line in this table puts it back, and the brief is where the member finds out it happened.
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## 7. Turning a routine off
|
|
251
|
+
|
|
252
|
+
Set its `days` to `off`. **Do not delete the row.** A missing row is a `failed` run record every time the job fires, which fills the brief's `Blocked` section with noise. `days: off` produces a clean `skipped-out-of-window` instead.
|
|
253
|
+
|
|
254
|
+
Then either remove the job or leave it. Leaving it costs nothing, because the routine exits in under a second, and turning the routine back on later is one word in this file.
|
|
255
|
+
|
|
256
|
+
**Prefer the `PAUSED` file for anything temporary.** An empty `PAUSED` file in the Employee root stops all seven and needs no re registration to undo. The same file holding a routine id on a line stops only that one. A holiday costs one file, and the first brief written after it is deleted names the gap so it reads as explained rather than as a hole.
|
|
257
|
+
|
|
258
|
+
**No routine is ever left off for a missing input.** A blank value is a research task, not a reason to disable anything. `ROLE.md` section 5 carries the table of what gets researched and what does not, and the list of what does not is three lines long: the ceilings, the rate floor, and the member's own claims.
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## 8. Daylight saving, travel, and the clock
|
|
263
|
+
|
|
264
|
+
Every fire time here is wall clock time on the machine. When the clock shifts for daylight saving, the whole schedule shifts with it and the windows absorb the change. Nothing needs editing.
|
|
265
|
+
|
|
266
|
+
If the member travels and changes the machine's timezone, the routines follow the new local time immediately, because every one of them reads the live clock at the top of the run and none of them reads a stored timezone. The timezone id in the audit's state file is a record of what was true at intake. **It is never used to decide anything.**
|
|
267
|
+
|
|
268
|
+
If the times look wrong by exactly one hour, or by exactly a whole number of hours, the machine's timezone is wrong. Fix the machine. Do not compensate by editing this table, because the next correct clock will then be wrong by the same amount in the other direction.
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## 9. Notes on this schedule
|
|
273
|
+
|
|
274
|
+
Rows that differ from the shipped defaults are recorded here with the date and the reason, so the next reader does not undo a deliberate change.
|
|
275
|
+
|
|
276
|
+
Format: `YYYY-MM-DD: <routine>, <what changed>, <why>.`
|
|
277
|
+
|
|
278
|
+
## Corrections
|
|
279
|
+
|
|
280
|
+
Format: one line per correction, newest at the top, `YYYY-MM-DD: what was wrong, what to do instead.` Every routine reads this section at the top of every run.
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
## The lane is per platform, amended at Standard v1.1, 2026-08-28
|
|
285
|
+
|
|
286
|
+
This section supersedes the browser lane and mutex language above wherever they disagree.
|
|
287
|
+
|
|
288
|
+
The harness runs agent sessions in isolated browser tab groups, so two routines touching different platforms may run at the same time. What still serializes is the member's identity on one platform: a site sees one logged-in account, not tab groups. So `state/browser-lock.json` now carries a `sites` list naming the platforms the holder is touching. A routine taking the lane writes its platforms; a second routine reads the lock and proceeds when its own platforms are disjoint, and records `blocked-browser-busy` after its file work only on an overlap. The staleness rule, the delete-on-every-exit rule, and the standup's reading of a stale lock as evidence of a dead run are all unchanged. Fire-time staggering above remains as prevention for same-platform pairs and machine load, not as a claim that the browser is scarce.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.6.0
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "ai-employee/1",
|
|
3
|
+
"slug": "chief-of-staff",
|
|
4
|
+
"name": "Chief of Staff",
|
|
5
|
+
"role": "Oversight and strategy",
|
|
6
|
+
"version": "1.6.0",
|
|
7
|
+
"standard": "1.3",
|
|
8
|
+
"repository": "https://github.com/markfulton/ai-employees",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"requires": {
|
|
11
|
+
"node": ">=18",
|
|
12
|
+
"harness": [
|
|
13
|
+
"claude-code",
|
|
14
|
+
"openclaw",
|
|
15
|
+
"hermes",
|
|
16
|
+
"opencode",
|
|
17
|
+
"grok-bot",
|
|
18
|
+
"codex",
|
|
19
|
+
"antigravity"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"connections": [
|
|
23
|
+
{
|
|
24
|
+
"capability": "mail.read",
|
|
25
|
+
"providers": [
|
|
26
|
+
"gmail",
|
|
27
|
+
"google-calendar",
|
|
28
|
+
"google-drive",
|
|
29
|
+
"microsoft-365"
|
|
30
|
+
],
|
|
31
|
+
"required": false,
|
|
32
|
+
"readonly": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"capability": "board.read",
|
|
36
|
+
"providers": [
|
|
37
|
+
"notion",
|
|
38
|
+
"linear-readonly",
|
|
39
|
+
"asana",
|
|
40
|
+
"atlassian",
|
|
41
|
+
"monday",
|
|
42
|
+
"clickup",
|
|
43
|
+
"todoist"
|
|
44
|
+
],
|
|
45
|
+
"required": false,
|
|
46
|
+
"readonly": true
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"capability": "money.read",
|
|
50
|
+
"providers": [
|
|
51
|
+
"stripe-restricted-key",
|
|
52
|
+
"xero",
|
|
53
|
+
"quickbooks",
|
|
54
|
+
"mercury",
|
|
55
|
+
"ramp",
|
|
56
|
+
"brex",
|
|
57
|
+
"chargebee"
|
|
58
|
+
],
|
|
59
|
+
"required": false,
|
|
60
|
+
"readonly": true
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"capability": "analytics.read",
|
|
64
|
+
"providers": [
|
|
65
|
+
"posthog",
|
|
66
|
+
"google-analytics-mcp",
|
|
67
|
+
"vercel"
|
|
68
|
+
],
|
|
69
|
+
"required": false,
|
|
70
|
+
"readonly": true
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"capability": "page.diff",
|
|
74
|
+
"providers": [
|
|
75
|
+
"firecrawl",
|
|
76
|
+
"exa",
|
|
77
|
+
"tavily",
|
|
78
|
+
"similarweb",
|
|
79
|
+
"crunchbase"
|
|
80
|
+
],
|
|
81
|
+
"required": false,
|
|
82
|
+
"readonly": true
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"capability": "chat.read",
|
|
86
|
+
"providers": [
|
|
87
|
+
"slack"
|
|
88
|
+
],
|
|
89
|
+
"required": false,
|
|
90
|
+
"readonly": true
|
|
91
|
+
}
|
|
92
|
+
],
|
|
93
|
+
"routines": [
|
|
94
|
+
{
|
|
95
|
+
"id": "cos-charter-and-fleet-audit",
|
|
96
|
+
"days": "first-weekday",
|
|
97
|
+
"fire": "12:00",
|
|
98
|
+
"window_start": "11:45",
|
|
99
|
+
"window_end": "17:00",
|
|
100
|
+
"period_key": "YYYY-MM",
|
|
101
|
+
"budget": "45 min",
|
|
102
|
+
"browser": "light"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "cos-decision-brief",
|
|
106
|
+
"days": "fri",
|
|
107
|
+
"fire": "16:00",
|
|
108
|
+
"window_start": "15:45",
|
|
109
|
+
"window_end": "19:00",
|
|
110
|
+
"period_key": "YYYY-Www",
|
|
111
|
+
"budget": "30 min",
|
|
112
|
+
"browser": "never"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"id": "cos-decision-review",
|
|
116
|
+
"days": "last-weekday",
|
|
117
|
+
"fire": "13:00",
|
|
118
|
+
"window_start": "12:45",
|
|
119
|
+
"window_end": "17:30",
|
|
120
|
+
"period_key": "YYYY-MM",
|
|
121
|
+
"budget": "30 min",
|
|
122
|
+
"browser": "never"
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": "cos-fault-dossier",
|
|
126
|
+
"days": "mon-fri",
|
|
127
|
+
"fire": "14:30",
|
|
128
|
+
"window_start": "14:15",
|
|
129
|
+
"window_end": "18:00",
|
|
130
|
+
"period_key": "YYYY-MM-DD",
|
|
131
|
+
"budget": "25 min",
|
|
132
|
+
"browser": "never"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"id": "cos-fleet-reconcile",
|
|
136
|
+
"days": "mon-fri",
|
|
137
|
+
"fire": "07:15",
|
|
138
|
+
"window_start": "07:00",
|
|
139
|
+
"window_end": "11:30",
|
|
140
|
+
"period_key": "YYYY-MM-DD",
|
|
141
|
+
"budget": "20 min",
|
|
142
|
+
"browser": "never"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"id": "cos-market-sweep",
|
|
146
|
+
"days": "wed",
|
|
147
|
+
"fire": "10:00",
|
|
148
|
+
"window_start": "09:45",
|
|
149
|
+
"window_end": "14:00",
|
|
150
|
+
"period_key": "YYYY-Www",
|
|
151
|
+
"budget": "40 min",
|
|
152
|
+
"browser": "heavy"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"id": "cos-metrics-review",
|
|
156
|
+
"days": "thu",
|
|
157
|
+
"fire": "10:30",
|
|
158
|
+
"window_start": "10:15",
|
|
159
|
+
"window_end": "15:00",
|
|
160
|
+
"period_key": "YYYY-Www",
|
|
161
|
+
"budget": "30 min",
|
|
162
|
+
"browser": "conditional"
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"files": {
|
|
166
|
+
"kit": [
|
|
167
|
+
"AGENTS.md",
|
|
168
|
+
"CAPABILITIES.md",
|
|
169
|
+
"CHANGELOG.md",
|
|
170
|
+
"CONTRACT.md",
|
|
171
|
+
"INSTALL-PROMPT.md",
|
|
172
|
+
"README.md",
|
|
173
|
+
"ROLE.md",
|
|
174
|
+
"VERSION",
|
|
175
|
+
".gitignore",
|
|
176
|
+
"employee.json",
|
|
177
|
+
"recipes/BROWSER-RECIPES.md",
|
|
178
|
+
"routines/**",
|
|
179
|
+
"run/**",
|
|
180
|
+
"scripts/**",
|
|
181
|
+
"examples/**"
|
|
182
|
+
],
|
|
183
|
+
"merge": [
|
|
184
|
+
"SCHEDULE.md"
|
|
185
|
+
],
|
|
186
|
+
"member": [
|
|
187
|
+
"RELEASES.md",
|
|
188
|
+
"state/**",
|
|
189
|
+
"board/**",
|
|
190
|
+
"crm/**",
|
|
191
|
+
"queue/**",
|
|
192
|
+
"strategy/**",
|
|
193
|
+
"briefs/**",
|
|
194
|
+
"scoreboard/**",
|
|
195
|
+
"dashboard/**",
|
|
196
|
+
"improvements/**",
|
|
197
|
+
"archive/**",
|
|
198
|
+
"paid/**",
|
|
199
|
+
"fleet/**",
|
|
200
|
+
"drafts/**",
|
|
201
|
+
"calendar/**",
|
|
202
|
+
"run/*.log",
|
|
203
|
+
"recipes/*.json",
|
|
204
|
+
"runlog.jsonl",
|
|
205
|
+
"*-latest.md",
|
|
206
|
+
".installed.json"
|
|
207
|
+
]
|
|
208
|
+
},
|
|
209
|
+
"notes": {
|
|
210
|
+
"merge": "SCHEDULE.md carries the shape the kit ships and the days, windows and budgets the member owns. An upgrade reports a changed shape and never rewrites the row values.",
|
|
211
|
+
"member": "Everything under member is the business the employee has been running: its evidence, its ledgers, its learned browser flows and its own field repairs. An upgrade that overwrites any of it has destroyed work that exists nowhere else.",
|
|
212
|
+
"recipes": "recipes/BROWSER-RECIPES.md ships with the kit. Every recipes/*.json is learned on the member's own screens by the routine that owns it, so it is member data."
|
|
213
|
+
}
|
|
214
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Example output
|
|
2
|
+
|
|
3
|
+
Everything in this folder is fictional. It is what the Chief of Staff kit writes during one baseline week for Northwind Roofing, a residential and light commercial roofing company run by Sam, with three other AI Employees installed beside it on the same machine: the GTM Engineer, the SEO/AEO Employee, and the Sales Employee.
|
|
4
|
+
|
|
5
|
+
The week runs from 2026-03-02 to 2026-03-06 and every file is dated the way the routines would have dated it. Nothing here is a real business, a real person, a real domain, or a real run.
|
|
6
|
+
|
|
7
|
+
Every file passed the kit's own copy check before it was committed, and every run record line validated through the kit's own run log script in dry run mode. The rules those two scripts enforce are the same rules the routines are held to.
|
|
8
|
+
|
|
9
|
+
| File | What it is |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `brief-latest.md` | The morning brief `cos-fleet-reconcile` wrote on the Thursday, in the shape its brief template gives |
|
|
12
|
+
| `runlog.jsonl` | Three run records from this kit's own log: one ok, one skipped outside its window, one partial |
|
|
13
|
+
| `fleet/fleet.json` | The fleet file from the same morning, every Employee and every routine on the machine in one of four states |
|
|
14
|
+
| `decisions/REGISTER.md` | The register as re-rendered that morning: three moves from the Friday brief, one accepted, one deferred, one waiting on a tick |
|
|
15
|
+
| `dossiers/dossier-seo-employee--seo-publish-run--silent-stop.md` | The dossier for the one fault older than a week, ending in the line to paste |
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# 2026-03-05
|
|
2
|
+
|
|
3
|
+
## Today
|
|
4
|
+
- fleet/fleet.json: 4 employees walked, 29 routines, 26 running, 2 stopped, 1 paused, 2 faults open
|
|
5
|
+
- dossiers/dossier-seo-employee--seo-publish-run--silent-stop.md, rewritten 2026-03-04, one line to paste
|
|
6
|
+
- market/market-2026-W10.md, written 2026-03-04, one change and the rest held as baselines
|
|
7
|
+
|
|
8
|
+
## Waiting on you
|
|
9
|
+
- d-hail-season-landing-page-launch waiting on a tick, decisions/REGISTER.md
|
|
10
|
+
- dossier ready to paste into D:\AgentOps\seo-employee\routines\seo-publish-run\SKILL.md, section Corrections
|
|
11
|
+
- gtm-engineer PAUSED file names gtm-paid-and-tracking-guard, pause first observed 2026-03-02
|
|
12
|
+
|
|
13
|
+
## Blocked
|
|
14
|
+
- seo-employee, seo-publish-run, stopped silently, open since 2026-02-24: no record on any eligible day, last record 2026-02-19, seo-employee runlog.jsonl line 402
|
|
15
|
+
- 1 more open fault, sales-employee, sales-followup-sweep, stopped loudly, raised 2026-03-05, listed in fleet/fleet.json
|
|
16
|
+
|
|
17
|
+
## What changed about me
|
|
18
|
+
- cos-market-sweep: reads the pricing surface first now, because it is the only surface that has changed across five sweeps, improvements/CHANGELOG.md
|
|
19
|
+
|
|
20
|
+
Guided version, updates and premium employees: [club.reinventing.ai](https://club.reinventing.ai/?utm_source=github&utm_medium=kit&utm_campaign=chief-of-staff)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
## d-hail-season-landing-page-launch
|
|
2
|
+
- title: Launch the hail season inspection page as the next launch step
|
|
3
|
+
- proposed: 2026-02-27 | cos-decision-brief | decisions/decision-2026-W09.md
|
|
4
|
+
- [ ] accept
|
|
5
|
+
- [ ] reject
|
|
6
|
+
- [ ] defer
|
|
7
|
+
|
|
8
|
+
## d-commercial-segment-outreach-pause
|
|
9
|
+
- title: Pause first touch drafts to the light commercial segment until the inspection offer page is live
|
|
10
|
+
- proposed: 2026-02-27 | cos-decision-brief | decisions/decision-2026-W09.md
|
|
11
|
+
- [ ] accept
|
|
12
|
+
- [ ] reject
|
|
13
|
+
- [x] defer
|
|
14
|
+
Sam: revisit after the walkthrough with Jordan Example on 2026-03-12. The commercial quotes in the pipeline stay where they are until then.
|
|
15
|
+
|
|
16
|
+
## d-metal-roofing-cluster-refill
|
|
17
|
+
- title: Refill the SEO calendar with the metal roofing cost cluster before the spring quote season
|
|
18
|
+
- proposed: 2026-02-27 | cos-decision-brief | decisions/decision-2026-W09.md
|
|
19
|
+
- [x] accept
|
|
20
|
+
- [ ] reject
|
|
21
|
+
- [ ] defer
|
|
22
|
+
Sam: yes. Keep the standing seam page first, the crew gets asked about it on every estimate.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# seo-publish-run on seo-employee: no run has written a record since 2026-02-19
|
|
2
|
+
|
|
3
|
+
- fault: seo-employee--seo-publish-run--silent-stop
|
|
4
|
+
- class: silent-stop
|
|
5
|
+
- open since: 2026-02-24
|
|
6
|
+
- employee root: D:\AgentOps\seo-employee
|
|
7
|
+
- routine file: D:\AgentOps\seo-employee\routines\seo-publish-run\SKILL.md
|
|
8
|
+
- fleet state read from: fleet/fleet.json, generated 2026-03-04
|
|
9
|
+
|
|
10
|
+
## What is happening
|
|
11
|
+
The publish run starts every weekday morning and never finishes. Nothing has been published since 2026-02-19, and the SEO/AEO Employee's own brief cannot say so, because the line that would say it is never reached.
|
|
12
|
+
|
|
13
|
+
## The first record that shows it
|
|
14
|
+
2026-02-19 | seo-employee runlog.jsonl line 402 | status ok | no blocker. This is the last record the routine wrote. Every record after it on that log belongs to another routine.
|
|
15
|
+
|
|
16
|
+
## What changed around that date
|
|
17
|
+
- 2026-02-19 | D:\AgentOps\seo-employee\improvements\CHANGELOG.md | "seo-publish-run | Step 4 | when the publish API returns an error, open the site editor in the browser and publish there"
|
|
18
|
+
- 2026-02-20 | D:\AgentOps\seo-employee\state\seo-publish-run.json | last_period has stayed at 2026-02-19 while started has moved to every weekday since, most recently 2026-03-04T09:15:05-08:00, and progress is empty
|
|
19
|
+
|
|
20
|
+
## Three candidate causes
|
|
21
|
+
1. The browser route added on 2026-02-19 waits on a site permission grant that the browser extension asks for the first time a site is opened, and nobody is present at 09:15 to give it | evidence: D:\AgentOps\seo-employee\improvements\CHANGELOG.md, dated line 2026-02-19, and D:\AgentOps\seo-employee\state\seo-publish-run.json, started 2026-03-04T09:15:05-08:00 with progress empty
|
|
22
|
+
2. The publish API has returned an error on every run since 2026-02-20, which is what sends the routine down the browser route at all | evidence: n/a (the evidence would be in files this Employee does not read)
|
|
23
|
+
3. The machine was asleep at the fire time | n/a (no record shows this): seo-draft-run fires at 08:00 and gtm-launch-step-runner at 09:15, and both carry a record on every weekday since 2026-02-20, seo-employee runlog.jsonl lines 403 to 446 and gtm-engineer runlog.jsonl lines 601 to 655
|
|
24
|
+
|
|
25
|
+
## What it has cost
|
|
26
|
+
Cost: this routine produced one published post per weekday run when it was working, seo-employee runlog.jsonl lines 380 to 402.
|
|
27
|
+
It has missed nine eligible runs since 2026-02-20. The last record it wrote is still seo-employee runlog.jsonl line 402.
|
|
28
|
+
|
|
29
|
+
## The one line to paste
|
|
30
|
+
Paste into: D:\AgentOps\seo-employee\routines\seo-publish-run\SKILL.md
|
|
31
|
+
Under the heading: "## Corrections", newest at the top
|
|
32
|
+
2026-03-04: since 2026-02-20 your browser route to the site editor has waited on a permission grant nobody is present to give, and no run since then has written a record. Publish through the API route only. When the API returns an error, record partial with the error class in blockers and stop. Never open the editor.
|
|
33
|
+
|
|
34
|
+
## What this does not tell you
|
|
35
|
+
- Why the publish API returned an error in the first place. That answer sits in the routine's own queue files, which this Employee does not read. Open them yourself and look at the entries dated 2026-02-20.
|
|
36
|
+
|
|
37
|
+
## History
|
|
38
|
+
- 2026-02-24 | first written, silent-stop, open since 2026-02-24
|
|
39
|
+
- 2026-02-25 | rewritten, cause ranking unchanged
|
|
40
|
+
- 2026-02-26 | rewritten, cause ranking unchanged
|
|
41
|
+
- 2026-02-27 | rewritten, cause ranking unchanged
|
|
42
|
+
- 2026-03-02 | rewritten, cause ranking unchanged
|
|
43
|
+
- 2026-03-04 | rewritten, cost section updated from seo-employee runlog.jsonl
|