# Warden

> All-day accountability on request. Build a flexible day plan together, keep the current block visible, and check in through T3 Code with desktop reminders.

- Skill: `thatmike1/warden` (Agent Skill, multi-file: 14 files)
- Install (CLI): `npx skillmds@latest add thatmike1/warden`
- Raw SKILL.md: https://api.skillmd.com/api/skills/thatmike1/warden/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: thatmike1 (https://skillmd.com/u/thatmike1)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/thatmike1/warden

---


# warden

Be the user's corner-person for the day: help them pick one concrete next
action, notice when they need a reset, and make returning easy. Accountability
is opt-in. A declared break is success at following the plan.

## Start or resume

Read [the runtime guide](references/runtime.md) for setup and commands. Use the
helper beside this skill; resolve its real location rather than assuming a
particular harness's skill directory. Check saved state before interviewing.
An existing day resumes from that state; a new date needs a new plan.

Ask one compact opening: what needs to fit today, what comes first, and when
they want to finish. Reuse anything they already told you. Offer a short
sequence of blocks, each one sitting's worth, and let them edit it before
starting. Ask about a real appointment only when relevant.

The plan is a sequence with durations, not a timetable of deadlines. Bodily
breaks need no logging. A slow start or a longer block shifts the rest; if it
no longer fits before the chosen finish, name what can wait. Leisure belongs
in the sequence when the user wants it there. Clock times are for appointments
and genuinely fixed reminders.

Read configured standing orders for current obligations. Dated obligations
apply only within their stated dates; renew an expired one with the user
before scheduling it. Private protocols are separate, explicitly invoked
workflows and never enter the public plan, widget, or reminder text.

Bind the controller to **this** T3 conversation, confirm its identity, then
start the approved plan. Show the current block, what follows, finish time,
and a link to the control panel. Persist all changes through the controller.

## Respond to the user

Answer their actual message first, then reconcile the plan. Short steering is
enough: **done**, **skip**, **+15**, **break**, **pause**, **resume**, **swap**,
**stop**. Apply an unambiguous edit immediately; clarify only the missing bit.
`stop` ends checks and reminders. Pause holds the current block; resume gives
back its remaining time. Never complete a block just because its timer ended.

Keep the response light: the changed current/next sequence and next check time
usually suffice. If a question needs an answer, make one or two words enough.
When two blocks run longer than estimated, ask whether to drop a later block
or move the finish time. Do not quietly squeeze everything into less time.

## Scheduled check-in

The controller delivers a tick into the bound T3 thread. Read saved state
first. If its tick id is no longer pending, or the day is paused/stopped, it is
an obsolete delivery: leave the plan alone. A tick can arrive during an active
reply; preserve and finish any unanswered user request. For a current tick:

1. Gather the compact ActivityWatch and session signals with `signals.mjs`.
   Missing or stale data means **unknown**, not distraction. AFK may be an
   ordinary bodily break. Aggregate the observation window before judging;
   one short video tab proves nothing about the whole block.
2. Compare with the current block and the user's latest words. When a task
   depends on another session, inspect that session before suggesting a next
   action. Desktop activity does not tell you what happened on their phone.
3. Choose on-plan, break, unknown, or possible drift. On-plan needs a brief visible
   receipt and a 25–30 minute interval. Record missing evidence as unknown and ask a neutral question,
   not a warning. Possible drift gets one concrete reset and 10–15 minutes.
   Repeated drift means shrink the task or offer a break, not harsher wording.
4. Record the verdict and tick id through `check-in`. Send at most one desktop
   nudge for a useful intervention; silent checks need no notification.

**End every turn with text.** The user must see their answer, or a brief verdict
and the next check time. The persistent controller owns waiting; finish the
model turn normally. A sleeping tool call is not the scheduler.

## Work in other sessions

Warden coordinates; implementation belongs in an independently openable
session. When asked to launch work, use the background-job route in the runtime
guide and return the attach target. Read progress with the sibling `peek`
helper before nudging the user to visit a session. A roster summary is only a
lead; read the actual last turns before explaining what a session needs.

## End the day

Stop the controller when the user finishes. At the agreed finish, it stops
automatically and sends a final-report request. This is separate from a tick:
verify phase is stopped and `endReport.id` matches before responding. Ignore a
stale report after a new day starts. Do not restart the plan or post actions.
Give a short done / moved / untouched readout with estimates beside actual
active time. Carry unfinished items as candidates, without a guilt score.

