sennight
n., archaic. seven nights; a week.
Your week is a git repo. You text a bot what happened; every six hours an
agent reads your messages, replans the rest of the week, admits what will not fit,
and commits. No app, no database, no service.
The whole system is a few hundred lines: a markdown file of standing instructions,
two YAML files, one validator, one cron, one HTML page. Small enough to read in one
sitting, and made to be copied, the way
micrograd is a model you can
read, this is a life planner you can read.
How a run works
- Fetch. Pull new Telegram messages, save them verbatim to inbox/.
- Interpret. "did 2h dsa yesterday" is a log entry. "report due Friday, ~5h" is a task.
"no gym this week" is an override that dies with the week. Only "permanently" touches the base config.
Anything unclear goes to questions.md; hours are never guessed.
- Replan. Free windows = waking hours minus fixed anchors. Fill at most 80% of any window
with ordered blocks, deadline tasks first, then activities by priority. Durations, never clock times.
- Validate. check_plan.py audits the arithmetic: every quota accounted for,
every constraint honored, every miss declared. A failing plan is never committed.
- Digest. One plain Telegram message back: what was understood, what changed,
today's remaining blocks, where the week is at risk.
- Commit. The repo is the memory. Every run is a diff you can read.
The whole thing
| CLAUDE.md | the brain: standing instructions the agent follows each run | 65 lines |
| config.yaml | your life: waking span, anchors, weekly quotas, priorities | 78 lines |
| overrides.yaml | this week's deviations; they expire with the week | a few |
| scripts/check_plan.py | the auditor: deterministic checks the agent cannot argue with | 212 lines |
| schema/plan.schema.json | the frozen contract between agent and page | 93 lines |
| .github/workflows/plan.yml | the heartbeat: cron, agent, commit | 49 lines |
| index.html | the board: renders plan.json, no build step | 200 lines |
The rules that make it work
- Logs are append-only. Mistakes are corrected with negative entries, never edits. The ledger is trustworthy because it cannot be rewritten.
- Shortfalls are declared, not hidden. If the week does not fit, the plan says so, with a reason. Honest defeat beats a cramming fantasy.
- The newest message wins. Contradictions resolve forward, and the digest says so.
- The schema is frozen. The agent proposes changes in questions.md; it does not silently reshape its own contract.
- Silence is forbidden. Every run that changed anything reports back.
Copy it
This is a concept, not a service. Nothing on this page runs for you.
You copy the template, wire it to your own bot and your own repo, and it becomes yours.
gh repo create my-sennight --private \
--template agentlab-in/sennight
# then, in your copy:
# 1. move template/* to the repo root, delete the rest
# 2. rewrite config.yaml with your real week
# 3. add secrets: CLAUDE_CODE_OAUTH_TOKEN,
# TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID
# 4. enable Actions, enable Pages, text your bot
Read the code on GitHub