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 · Decision cards

When she needs your call, a card with buttons, not a long message

A question, two or three options with what happens after each, her pick marked ★. You tap, she acts. No tap, and nothing goes out. Every line below links to the code.

Cards come from the kartochki skill; the buttons are part of the open Telegram plugin, shakhruz/mila-telegram.

The card

What is on a card

The format is set by a script, not by mood: kartochki.py checks a card before writing it and refuses a bad one with the reason. Then she rewrites it instead of going around. skills/kartochki:17

01 · QUESTION

One decision, as a question

The first line is the decision itself, up to twelve words. Under it, a line or two on why now. Two decisions mean two cards.

kartochki.py:161-168skills/yasno:21-29
02 · OPTIONS

Two or three options

Each option says what will happen after it. Fewer than two or more than three, and the script does not write the card.

kartochki.py:169-174
03 · HER PICK

Her recommendation, marked ★

Her pick is the green button with ★ and a line “I suggest: A”. A pick that is not one of the options is refused.

kartochki.py:135-145
04 · DEADLINE

A deadline when there is one

“Needed by” with a date and time in your time zone. 🔴 Urgent only when tomorrow would be too late.

kartochki.py:137-138skills/kartochki:14-16
Buttons

Tap, or just say it

Your tap comes back to her as “[button] …” with the label, and the script matches it to the card she showed. A voice note or a text instead of a tap is an answer too.

receiver.ts:1387-1391 · skills/kartochki:25-30

Under a question card
Once

A card works once

  • Marked before it is delivered. The plugin first writes “used” to its file and only then passes the tap to her, so two quick taps cannot make two decisions. receiver.ts:1378-1384
  • The buttons go dead. After the tap they are switched off and the chosen one gets ✅, so the chat history shows what was picked. A second tap gets “Already handled.” receiver.ts:1331-1345 receiver.ts:1374-1377
  • Only for the person it was sent to. A card in your DM can be tapped only by you. Anyone else gets a short refusal, a trace goes to a separate file, and nothing reaches her. receiver.ts:788-798 receiver.ts:1363-1372
  • An answer is not overwritten. The deck refuses a second answer to a card that is already closed, and a test checks exactly that. kartochki.py:233-237 test_kartochki.py:62-63
Nothing by itself

Without a tap, nothing goes out

01 · TEXT

Goes out only after a tap on that text

Nothing leaves on your behalf automatically. A tap from yesterday does not cover today’s text: a new text needs a new tap. It is law 3 of her constitution.

CONSTITUTION.md:17
02 · MAILINGS

A mailing shows who and what

“Mailing: N people”, the whole text and two buttons, ✅ Send N and Cancel. Without ✅ she does not even file the request, and a repeat needs a new ✅.

Runs on Milas hosted by MILAGPT: the sending service lives on the host.

skills/bot-send:13-19skills/bot-send:31
03 · TOOLS

Rules first, a card only when needed

Routine tool runs pass by rule and are logged; refused ones are refused without waking you; the rest come as a card with a deadline. No tap by then means no, and she says out loud that she did not do it.

install/permission_policy.ts:8-15receiver.ts:618-633
04 · FAIL-SAFE

A broken rules file asks, it does not open

If the rules file cannot be read, every tool run becomes a card. When a runaway loop fires a flood of requests, cards stop and the requests are refused.

install/permission_policy.ts:114-117receiver.ts:600-611
Journal

What is written down, and where

Only what is in the code today. Each one is a file with a line per event.

Files where cards, taps and decisions are recorded
FileWhat is recorded
inbox.jsonlHer questions to you. A new line for every change; old lines are not edited; the current state of a card is its last line. kartochki.py:5-6 kartochki.py:66-71 kartochki.py:74-88
inbox.jsonl · answerWhich option, who answered (you or Mila), how (chat, voice, mini app) and when. kartochki.py:244-246
proposals.jsonlTask cards for the team, kept the same way: accepted, rejected, edited, handed to another Mila. kartochki.py:5-6
cards.jsonlThe plugin’s list of cards with buttons: chat, who may tap, text, buttons; then a “used” line with who tapped and when. Only the owner of the process can read it. receiver.ts:1285-1292 receiver.ts:818
permission-log.jsonlEvery tool decision: passed or refused by rule, sent as a card, refused at the deadline or by the flood cap. mila doctor checks the file mode. install/permission_policy.ts:143-164 receiver.ts:586-590 install/doctor.py:248-256
auth-log.jsonlEvery decision on connecting a group, rejections included. mila-telegram · README:15
suspicious.jsonlTaps on a card by someone it was not sent to. receiver.ts:1309-1313
tasks/sent.jsonlEvery outgoing message, written by a hook. skills/mila-tasks:27
Honestly

What this page does not claim

In the repository

Read every line yourself

Files behind decision cards in the mila-companion and mila-telegram repositories
FileWhat it does
skills/kartochkihow a card is written and answered
kartochki.pychecks, writes and shows cards; takes the tap
test_kartochki.pytests, including “no second answer”
skills/yasnoplain-language rules for cards and buttons
skills/bot-sendmailings from your public bot after ✅
install/permission_policy.tsrules for tools: allow, deny, ask
permissions.example.jsonstarting rules, each with a reason
CONSTITUTION.mdlaw 3: nothing goes out on your behalf automatically
mila-telegram · receiver.tsbuttons: register, gate, switch off, deliver
Open source · Apache-2.0

Fork it, teach it, send a PR

Both repositories are open: the kit with its skills, hooks, tools and templates, and the Telegram plugin. 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) and github.com/shakhruz/mila-telegram (main), checked 18 Oct 2026. “Mila”, “MILAGPT” and the logo are trademarks of MILAGPT.