MILAGPT
What do you need? Pick an island — I’ll show you where to go.Ask Mila
Talk to MilaYour own Mila — 3 days for $5 · talking to Mila Tashkent is free
RU·EN
Docs · Promises and tasks

A promise is a record with a deadline, not a line in a chat

“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.

Three kinds of records

Not one list, but three

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

M · COMMITMENT

Work with acceptance

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.

task.py:621-625
P · PROMISE

“I’ll send it tonight”

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-776
A · OPEN QUESTION

Waits for your word

Options 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-807

The 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

Evidence

“Done” only with evidence

  • No evidence, no closing. 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
  • The script runs the evidence, right now. A command has to finish without an error. An address needs code 200 and a fingerprint in the page text: code 200 alone proves nothing. A message has to be in the outbound log, sent to the same chat and not sitting among the failed ones. A commit has to be in origin already. task.py:567-581 task.py:540-553 task.py:583-593
  • Evidence fails, the entry stays open. The script writes the refusal into the ledger and exits with code 3. “Could not check” is a third outcome: only --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-1124
  • A client’s task is closed from the client’s side. Only by a message delivered to them or by their words with a quote and the message number. A task from the owner or a client cannot simply be dropped: only through an open question. task.py:690-691 task.py:733-734
Catching promises

She wrote “I’ll send it”, the entry is already there

After 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.

hooks/task-sent.py:1-10

How the hook reads the text
  • A verb of commitment. “I’ll send”, “I’ll do”, “in an hour”, “within the day”. A bare “today” or “by 18:00” without such a verb is not a promise. task.py:267-279
  • A report is not a promise. “Sent”, “ready”, a sentence ending in a question mark, “I can…”, “would you like…” are skipped. task.py:281-292
  • The deadline comes from the same sentence. “By evening” becomes 19:00, “by the end of the day” 20:00, “in an hour” an hour from now. A deadline in the past (a date from a quote) is dropped and marked “clarify”. task.py:238-249 task.py:311-327
  • No deadline means it burns. A promise without a deadline goes to the top of the queue: the clock is someone else’s and nobody knows it. task.py:441-446
  • No duplicates. The key is the chat and the message number; running the hook again does not add a second entry. hooks/task-sent.py:80-84
  • Kept or broken, for good. 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-792
The queue

What comes next is decided by order, not by mood

task.py next builds the queue by the same rules every time. skills/mila-tasks:55

01 · BURNING

Promises to people

Due in less than an hour, already missed, or without a deadline: to the top.

task.py:441-446
02 · TODAY

Money and deadlines

Money taken, something bleeding, or due today. Then whatever the owner asked for today.

task.py:450-454
03 · IN WORK

No more than three

Three 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-866
04 · ESTIMATE

How long it takes

Starting 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-457
Chat cards

Every promise in one list

Each 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

Checking the result

Ready means by the checklist, with a quote

The proverka skill checks a result before it is handed over. CHANGELOG.md:29

01

The checklist comes from the skill

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.

skills/proverka:11-16
02

A quote for every item

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-28
03

A separate checker

If 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-43
Honestly

What this page does not claim

In the repository

Read every line yourself

Files behind promises and tasks in the mila-companion repository
FileWhat it does
skills/mila-tasksthree kinds of records, the rules, the hooks (in Russian)
task.pythe ledger, evidence, the queue, estimates
hooks/task-sent.pythe outbound log and catching promises
hooks/task-open.pyopen commitments at the start of a session
install/chat_note.pychat cards, mila note, mila owe
install/telegram-inbox-feed.pydeadlines due today on every turn
skills/proverkachecking a result against “Done if” (in Russian)
docs/REFERENCE.mdmila owe and deadlines written in words
Open source · Apache-2.0

Fork it, teach it, send a PR

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.