Commands
How much you can ask for through a chat box — and the two that changed how it feels.
How much you can ask for through a chat box. Eleven capabilities, and two of them changed how the thing feels to use.
What it can do
| What | It does |
|---|---|
| Conversation | Talk to it and it answers |
| Long jobs | Kick off an hours-long job and progress flows into the thread |
| Scheduling | Daily, weekly, once. Survives a reboot without forgetting |
| Goal nudges | Prompts you first about stale goals |
| Swap the AI | Change which AI answers |
| Checklists | Tick one and everyone sees it |
| Org settings | Who can use what |
| Auto-listen | In designated places it answers without being named |
| Add a capability | One file, one command |
| Self-watch | Revives itself within five minutes if it dies |
| Usage | 90 days of statistics |
The first thing that changed the feel — “carry on today’s conversation from yesterday”
Something was odd at first. Threaded replies continued fine, and direct messages started fresh every time.
Tracing it: the key identifying a conversation was the unique ID of a single message.
Replies share the original message’s ID, so they continue. A new direct message gets a new ID every time. Hence a new conversation, every time.
Not being able to carry yesterday’s conversation into today is a bigger inconvenience than it sounds — the background has to be re-explained each time.
The key changed, and direct messages now continue.
The second — “why the checklist is hand-built”
Slack already has checkboxes. I built my own anyway.
One reason:
Slack’s native checkbox is per-viewer, so nobody else can see what I ticked.
Fine alone. Working through one list with several people it is fatal — nobody knows how far anyone has got, so the list means nothing.
So I built one where ticking is reflected for everyone looking.
→ A built-in feature existing does not mean you can use it. The question is not does it exist but does it hold up in my situation.
The nudge feature uses one noun in two directions
The goal-minding feature performs two different actions under one name.
| Direction | What | Side effects |
|---|---|---|
| Pull | I ask, and it produces a suggestion | None |
| Push | It messages me first | Yes — so it has a cooldown |
The cooldown exists for a reason. A feature that speaks first becomes nagging if built badly. And once it is nagging, people switch it off.
So once it prompts, it stays quiet for a while.
And what it does not record
Usage records are kept for 90 days, and conversation content is not written down.
What is kept: when, who, how long.
That matters because records are hard to delete later. Keep everything now and tidy it up later mostly never gets tidied. Not recording it in the first place is the only reliable method.
The detailed record starts here
| What | Command | What it does |
|---|---|---|
| Conversation | — | DMs carry over; threads are separate from each other. A channel top-level message gets no session |
| Long jobs | !jobs !cancel !stop |
Two at once, same thread in order. A pipeline running for hours streams progress into the thread |
| Scheduling | !schedule |
Daily, weekly, or once. After a reboot, recurring rolls forward and one-shots fire immediately |
| Goals · nudges | !goal !nudge |
Stale goals (72h), three consecutive failures for the same reason, chosen brain unreachable |
| Swap the brain | !provider |
Spawns a CLI that’s already logged in on this PC |
| Checklists | !check |
Click to check; it syncs for everyone looking at it |
| Orgs | !org |
One file, one org — members, channels, readable folders, permitted commands, hourly cap |
| Auto-listen | !listen !exit |
Inside a designated zone it answers without being mentioned |
| Plugins | — | One file in plugins/ is one command |
| Watchdog | doctor |
Revives it within five minutes. A stopped heartbeat counts as death too |
| Usage | !usage |
90 days of it. Metadata only — conversation bodies are never written down |
Where a session is anchored
Originally the session key was the message’s own identifier. So threads worked while a top-level DM started a fresh conversation every time — meaning you couldn’t pick up yesterday’s thread today.
Now it splits three ways.
- DM — carries over, expiring after an idle period
- Thread — its own, never mixed with another thread
- Channel top-level — no session
The last one isn’t a feature, it’s a defence. Several people use a channel, and attaching a session there means somebody else’s conversation joins my context. One convenience given up to close that path entirely.
There was a trap attached. Unless the job queue’s serialisation key also becomes the session key, two DMs arriving back to back resume the same session concurrently. The moment you make sessions continuous, the queue has to be fixed alongside.
Why the checklist is hand-built
Slack has checkboxes natively, and I built my own anyway. One reason: native checkboxes are per-user input, so they don’t sync. What I check nobody else can see.
So it works by re-rendering the button labels wholesale. When anyone clicks, the message itself updates, so everyone looking at it sees the same state.
It toggles by text too, for situations where clicking isn’t possible.
Watching a goal versus telling you about it
Nudges use one concept in two directions. Pull builds suggested prompts with no side effects; push waits out a cooldown and DMs you.
The three watchers were chosen on one criterion — they must need to understand nothing.
- A goal hasn’t moved in 72 hours
- Three consecutive failures for the same reason
- The selected brain can’t respond
All three are decided by counting. The approach of reading the conversation and judging “this is going in circles” was rejected.
Usage keeps metadata only
Ninety days of records, and no conversation bodies. When, who, how long.
Good for privacy and bad for audit. It cannot answer “what instruction was given then.” That’s a trade-off, and being a personal tool, I took the first one. Deploying to a team would mean reversing it.