| name | three-shifts |
| description | Daily standup engine. Plans tasks 3x daily (6 AM, 2 PM, 10 PM) and delivers them for approval. Execution happens in the main session via direct conversation. Night shifts auto-approve carryover from earlier in the day.
|
| version | 3.0.0 |
Three Shifts v3 — Daily Standup Engine
Architecture: Plan 3x daily → deliver for approval → execute in main session.
Why v3: V2 had a 15-minute autonomous cycle executor that never worked — state machine deadlocked for 19 days, burning ~27M tokens on no-ops. V3 removes it entirely. Plans are generated by cron, execution happens through normal conversation when the user approves.
How It Works
- Planner cron fires (6 AM, 2 PM, 10 PM) — reads context, generates a prioritized task list
- User reviews — approves, modifies, or skips
- Agent executes in main session — when the user says "go" or gives specific instructions
- Daily memory captures what was done — next planner reads it for continuity
No file-based state machine. No autonomous executor. The main session IS the executor.
File Structure
shifts/
├── tasks.md # Current shift plan (generated by planner)
├── context.md # Stack, constraints, known pitfalls
└── state.json # Shift metadata (which shift, approval status)
tasks.md
Generated by the planner each shift. This is a task list, not a state machine.
# Morning Shift — 2026-03-13
Approved by: user | Approved at: 6:15 AM CST
## P1 (Must do)
1. Fix bootstrap key server (keys.everclaw.xyz returning 404)
2. Test installer on fresh Linux environment
## P2 (Should do)
3. Update MEMORY.md with yesterday's work
4. Review open PRs across EverClaw repos
## P3 (Could do)
5. Memory file maintenance (archive >7 day old dailies)
## Blocked/Waiting
- XMTP agent-to-agent — blocked on BASE_WALLET_PRIVATE_KEY
state.json
Minimal metadata for the planner to read between shifts:
{
"shift": "morning",
"date": "2026-03-13",
"status": "approved",
"approvedAt": "2026-03-13T06:15:00-05:00",
"approvedBy": "user"
}
Status values: planned | approved | skipped
context.md
Living document of constraints and lessons. Updated by the agent when something new is learned.
Shifts
| Shift | Cron | Window | Character |
|---|
| Morning ☀️ | 6:00 AM | 6 AM – 2 PM | Comms, decisions, urgent items |
| Afternoon 🌤️ | 2:00 PM | 2 PM – 10 PM | Deep work, building, coding |
| Night 🌙 | 10:00 PM | 10 PM – 6 AM | Research, maintenance, cleanup |
All times in user's local timezone.
Planning Phase
Model: venice/kimi-k2-5 (cost-efficient, good at structured plans)
See PLANNER.md for the full planner instructions.
What the planner reads:
shifts/tasks.md — previous shift's plan (check for incomplete items)
shifts/context.md — rules, constraints, pitfalls
shifts/state.json — previous shift metadata
memory/daily/YYYY-MM-DD.md — recent activity
MEMORY.md — active projects (⚡ Active Context section)
Plan format:
☀️/🌤️/🌙 [SHIFT] SHIFT PLAN
Date: [DATE] | Window: [START]–[END] CST
P1 (Must do):
1. [Task] — [Est. time] — [Why now]
P2 (Should do):
3. [Task] — [Est. time]
P3 (Could do):
5. [Task] — [Est. time]
Blocked/Waiting:
- [Item] — [Blocker]
Reply: "Approve" / "Skip" / "Add: [task]"
Carryover
If shifts/tasks.md has items from a previous shift that weren't completed:
- Carry forward into the new plan, marked as
[carryover]
- Night shift: auto-approve carryover from morning/afternoon (no user ping)
Approval flow
| User says | What happens |
|---|
| "Approve" | Plan written to tasks.md, state.json updated |
| "Add: [task]" | Task added to plan, then approved |
| "Skip" | State.json set to "skipped", next planner picks up |
| No response (30 min) | Plan stays, next shift carries forward |
Execution
Execution happens in the main session through normal conversation. There is no autonomous executor.
When the user approves a shift plan:
- The agent works through the tasks in priority order
- Progress is captured in
memory/daily/YYYY-MM-DD.md
- If interrupted by higher-priority work, remaining tasks carry over to the next shift
The planner's job is to surface the right priorities — not to control execution.
Safety Rules
Always OK (any shift)
- Reading files, organizing workspace
- Research and analysis
- Code review, documentation
- Memory updates, planning
- Git status, non-destructive commands
Requires Approval (via shift plan)
- Sending emails, messages, social posts
- Creating PRs, pushing code
- Financial transactions
- Any external-facing action
Night Shift Constraints
- No external communications (Signal, email, social)
- No financial transactions
- No destructive operations (rm, force push, branch delete)
- No security changes (key rotation, permissions)
- P3 maintenance tasks (memory, cleanup, docs) are OK autonomous
Cron Setup
Three planner jobs. No executor job.
Morning ☀️: cron 0 6 * * * (America/Chicago)
Afternoon 🌤️: cron 0 14 * * * (America/Chicago)
Night 🌙: cron 0 22 * * * (America/Chicago)
All use venice/kimi-k2-5, isolated sessions, deliver via Signal.
See references/config.md for customizing schedule, models, and weekend behavior.
Version History
- v3.0.0 (2026-03-13) — Removed broken cycle executor. Simplified to daily standup engine. Plans generated by cron, execution in main session.
- v2.0.0 (2026-02-27) — Added 15-minute cycle executor (state machine). Never worked — state deadlock caused 1,527 no-op runs over 19 days.
- v1.0.0 (2026-02-22) — Single long session per shift. Timeouts killed entire shifts.