Mila for your industry and team
Your own Mila — 3 days for $5Recommended budget →
By size
Catalogue: turnkey businesses →“I’ll send it by six” becomes a ledger entry with a chat and a deadline. “Done” closes only with evidence the script checks itself: a delivered message, a page, a command, a commit. Every line below links to the code.
Two tools: the mila-tasks skill with its commitments ledger, and chat cards with the mila owe command.
Work, a promise to a person and a question for the owner run on different clocks and close in different ways. skills/mila-tasks:10-16
A move of up to two hours, or a build. How it will be checked is written when the entry is made: without that the script refuses to create it. It closes with done and evidence.
The deadline is someone else’s time, an absolute moment. The promise is recorded before the reply goes out. It closes only with a message delivered to the same chat.
skills/mila-tasks:18task.py:765-776Options A and B, a default, a way back and a deadline; without any of the five the script will not take the question. At most three are open; the fourth is refused and the refusal goes into the ledger.
task.py:796-807The ledger is append-only: lines are never edited or deleted, even a broken line stays as it is. OPEN.md is generated from it and is not edited by hand. skills/mila-tasks:22-28 task.py:102-121
done without --proof writes nothing and exits with code 2. There are six kinds of evidence: a command, a probe, an address, a message, a commit, a person’s words. task.py:684-685 task.py:63--force closes it, and the mark stays in the line for good; OPEN.md counts how many entries were closed without a machine check. task.py:701-704 skills/mila-tasks:52 task.py:1117-1124After every reply in Telegram a hook writes the message into the outbound log and looks for a promise in it. When it finds one, it creates an entry with the chat and the deadline. An extra entry costs less than a missed promise.
keep marks a late delivery; broken writes the miss into the ledger and reminds her to tell the person before they notice. task.py:777-779 task.py:785-792task.py next builds the queue by the same rules every time. skills/mila-tasks:55
Due in less than an hour, already missed, or without a deadline: to the top.
task.py:441-446Money taken, something bleeding, or due today. Then whatever the owner asked for today.
task.py:450-454Three tasks at a time, one of them a build, and one build slot a day. A task untouched for 24 hours goes back to the queue.
task.py:652-661task.py:856-866Starting estimates by kind of work; from three facts on, the estimate is the median of real minutes and tokens. An entry untouched for 10 days rises by itself.
task.py:419-431task.py:455-457Each chat has its own card: purpose, participants, agreements. mila note <id> --promise "…" --due "27.08" records a promise in one command; --done closes it by matching the text, so “I did it” without an entry closes nothing. chat_note.py:13-22 chat_note.py:285-304
mila owe collects open promises from every card: overdue and due today first, then tomorrow, then by date. A deadline written in words that cannot be checked gets a “?” and advice to rewrite it as a date. chat_note.py:221-257 chat_note.py:258-260
The inbox hook prints promises due today or overdue on every turn, even when there are no new messages. The installer puts both the hook and chat_note.py in place. telegram-inbox-feed.py:131-135 telegram-inbox-feed.py:257-262 install/install.sh:111-119
$ mila owe
Открытые обещания · 8
Acme · working chat
· visual prototype: desktop + mobile
due before rollout
Northside Studio · client chat
· stories poll · due tonight
The example is taken from the kit’s docs; the header is printed in Russian. docs/REFERENCE.md:307-318
The proverka skill checks a result before it is handed over. CHANGELOG.md:29
The check takes the “Done if” section of that skill’s SKILL.md and adds nothing. The source is the finished result, not the conversation before it.
An item passes only with a verbatim quote from the result; a paraphrase does not count. For actions (“file saved”, “letter sent”) the evidence is a tool’s output. An item with nothing checkable in it is “can’t check”, and does not pass either.
skills/proverka:23-28If the engine can run a subagent, the subagent checks and sees only the result and the checklist. The verdict is DONE or HOLD with item numbers; two HOLDs in a row and she tells the owner which item does not fit.
skills/proverka:19-21skills/proverka:34-43tasks/ledger.jsonl) and the agreements in chat cards are kept apart; mila owe and the inbox hook read only the cards. skills/mila-tasks:23 chat_note.py:223-232scan-sent for the rest. settings.json:6-38 install/install.sh:261-275 skills/mila-tasks:70msg: checks that the message reached the right chat, not that the price list in it is right. human: is taken on a person’s word. --force exists, and it stays in the line. task.py:594-597task_new, task_done and a reminder 15 minutes before the deadline; that mechanism is not in the open code. Deadlines show up in the inbox hook and in the queue. skills/tasks-discipline:14 skills/tasks-discipline:45| File | What it does |
|---|---|
| skills/mila-tasks | three kinds of records, the rules, the hooks (in Russian) |
| task.py | the ledger, evidence, the queue, estimates |
| hooks/task-sent.py | the outbound log and catching promises |
| hooks/task-open.py | open commitments at the start of a session |
| install/chat_note.py | chat cards, mila note, mila owe |
| install/telegram-inbox-feed.py | deadlines due today on every turn |
| skills/proverka | checking a result against “Done if” (in Russian) |
| docs/REFERENCE.md | mila owe and deadlines written in words |
The kit is open: skills, hooks, tools and templates. Every pull request is read by a person and by Mila Quality.
Facts on this page: github.com/shakhruz/mila-companion (main, v1.3.0), checked 18 Oct 2026. The mila owe output comes from docs/REFERENCE.md; the chat and the number P-0007 are an illustration. “Mila”, “MILAGPT” and the logo are trademarks of MILAGPT.