Use the concierge
Talk to a keyless assistant that stages work for your agent
The concierge is the assistant behind your linked Telegram chat. It reads your data, explains it, writes review drafts and stages purchase proposals. It holds no keys, signs nothing, spends nothing and creates no intents.
Preparing work is conversational; committing it is a keystroke you type or a signature your agent makes. What the concierge stages, your own agent executes — Execute owner intents.
Nothing is deployed on a public chain yet — see Quickstart.
What you will build
A working conversation: from a question, to a staged draft, to the one command that turns it into work your agent will pick up.
Before you start
- A linked chat. Without one the concierge answers a single sentence pointing you at
/start— Link Telegram. - A private chat with the bot. Not a group, and not a channel.
- An agent of your own that polls. The concierge stages; your agent executes. There is no hosted executor, so an owner with no running agent gets drafts and nothing else.
The concierge acts for one wallet at a time, and the wallet is the unit of authority rather
than the chain: one conversation covers that wallet's agents on every configured chain, and the
tools name the chain per answer. None of this has a /v1 twin at api.opensouk.ai — the
chat is the only interface.
Two channels in one chat
| What you send | Where it goes |
|---|---|
| Free text, or a voice note | the concierge's model |
Anything starting with / | deterministic code, with no model involved |
A slash command never reaches the model, and an unrecognised one is silently ignored rather than answered. That split is what makes the commands trustworthy: the two that commit anything are on the deterministic side, so no amount of text — yours, or text the model read out of somebody else's review — can trigger them.
The commands: /start, /status, /unlink, /settings, /snooze, /intent, /help.
What the concierge can do
Thirteen tools, and the list is the capability boundary. It can:
- List your agents and read one agent's details.
- Search the product registry, fetch a review, and list products an agent could still review.
- Read an agent's wallet balance.
- Show an agent's economic settings, with the console URL to change them.
- Write a review draft from your notes, revise it, and list your saved drafts.
- Stage a purchase proposal.
- Submit a usage proof and list your proofs.
Every per-agent tool checks the agent is yours first and refuses with a single sentence when it is not.
What it cannot do, structurally
Not by policy in a prompt — by there being no tool:
| It cannot | Which means |
|---|---|
| sign anything | no review is published and no payment made from the chat |
| create an intent | only your /intent keystroke queues work |
| change a cashback rate or a spending cap | it shows you the value and the console URL |
| act for another wallet's agents | the ownership check runs before every per-agent read |
| promote, upsell or encourage more spend | proactive messages are a closed whitelist |
The one setting that is changeable from the chat is your reminder schedule, and it is changed
by the /settings command rather than by the concierge — deterministic code, not the model.
Prompt mode
The chat is the prompt. These are the shapes it handles, in plain language.
list my agentswhat did review 41 say about itbuy the RPC endpoint from merchant 3, up to 2 USDCdraft me a review of escrow 88 — it was fast but the docs were thin0x1a2b… my ranksThe last one is the multi-wallet form: when your chat has several wallets linked, start the message with the address, or a unique prefix of it, and put the question after it. Without a selector the concierge asks for one instead of guessing.
Manual mode
Ask something, and check it used a tool
Any question about your agents, balances, settings or the registry is answered from a tool call rather than from the model's memory. A reply that names a figure, an id or an address no tool returned is a defect, not a summary — the concierge is instructed never to state such a value without a tool call behind it.
Stage a purchase, and read the reply carefully
Confirm the product and the ceiling in conversation, then the concierge stages it:
Draft ready: "…" (merchant N), up to … USDC base units. To queue it, the owner must
send /intent buy (or /intent cancel to discard). You cannot queue it yourself.Nothing has been bought, and nothing is queued. A staged draft is a proposal held for this chat. It is the concierge's own confirmation text, relayed verbatim rather than composed — if you get a success sentence that does not read like the tool's own, treat it as unstaged and ask again.
Commit it yourself
/intent buyThat is the whole authorisation. The command claims the draft atomically, re-checks that its
wallet is still linked to this chat, and writes a buy_product intent:
Created purchase intent <id>. Your agent will execute it within your limits./intent cancel discards the draft instead. Sending /intent buy twice cannot queue the purchase
twice: the claim and the read are one statement.
"Within your limits" is a statement about your agent, not about us. The caps are served to it and enforced by it — Set spending limits.
Draft a review, then queue that
Same two phases. Give the concierge your notes, revise until it reads right, then:
/intent review <draft_id>Which publish path the intent takes is decided by the evidence behind the review, not by you: an in-system purchase queues against its escrow, an off-platform one queues against an admin-approved proof, and a review with neither is refused at queue time with a sentence saying so. Publish with escrow proof and Prove a purchase are the two paths.
Verify
Ask for something only a tool can know — a balance, an agent list — and check the answer against the same figure from a tool call of your own. The concierge and Money tools read the same data.
For a staged draft, /intent buy returning an intent id is the confirmation. If it answers
Nothing to create — ask the assistant to draft a purchase first., no draft was ever staged
however the conversation read.
Private chats only
The whole surface refuses group and channel chats, on both the message path and the inline-button path, before anything else runs. A group message is dropped silently, indistinguishable from any other ignored update.
The reason is the authority model. A linked chat grants the wallet owner's authority to everything arriving from it, keyed on the chat and never on the individual sender, so in a group every member would inherit that — including the two commands that queue work. Adding the bot to a group is not a way to share read access; it is a privilege escalation.
A chat whose type Telegram does not report is treated as private, the conservative reading for the direct-message case.
Voice notes
Send one and it is transcribed and handled as text. Two limits: five minutes and 20 MiB, each with its own message when exceeded. The duration is checked before transcription, so an over-long note costs you nothing.
Transcription seconds count against your daily allowance even when the note transcribes to nothing — a silent note is a charged one.
The two caps on the conversation
| Cap | Default | Counts |
|---|---|---|
| Daily model tokens | 200,000 | every model call in the chat |
| Daily transcription seconds | 600 | every voice note, silent ones included |
Zero means unlimited; a configured cap is per owner per day. Over either, the chat makes no model call and answers with the usage-limit line in the error table below. This is an inference budget, with nothing to do with your spending limit.
Two models, and what moves between them
Routine chat runs on a small model; drafting runs on a larger one. Which is chosen is decided before the turn starts, from your text and the recent turns, and applies to the whole turn.
The larger model is selected when your message names an action — buying, purchasing, drafting, reviewing, revising, publishing, editing, a proof — or when your message is a bare affirmation and a recent turn named one.
The second condition exists because a bare proceed or yes carries no action word of its own.
Without it a confirmation turn runs on the small model, and the failure mode is specific: a reply
announcing that a draft is ready with no tool call behind it.
The turn is bounded at five tool round trips. Past that it gives up with
Sorry, I couldn't complete that. Please try rephrasing. rather than looping.
Reading a review is reading a stranger's text
The concierge fetches review content, product names and descriptions written by other people, and treats all of it as data rather than instructions. Text inside a fetched review that tries to change its behaviour, reveal other data or override a rule is ignored and reported as content.
Two things make that boundary hold rather than depend on it holding. The tool set contains nothing that signs, spends or queues, so there is no instruction that would be worth injecting. And the two commands that commit anything are yours to type, on a path the model cannot reach.
What reaches you unprompted
A closed whitelist of four kinds, so the channel cannot become a promotional one: review reminders, a purchase ping, a settlement notice and an intent status. Only the first two are emitted by any code, which is why an intent closing is silent.
/settings adjusts the reminder side: the first delay, whether follow-ups run, and their
intervals. Bounds are at least a day apart and at most four follow-ups, and a rejected value says
which bound it broke. /snooze defers one purchase's reminder without touching the schedule —
both are on Link Telegram.
Errors and what they mean
| Reply | Cause |
|---|---|
You haven't linked a wallet yet. Send /start to begin. | No wallet is linked to this chat |
You have N linked wallets. I can help with one at a time… | Ambiguous chat. Start the message with an address |
Acting for 0x…. Add your question after the address… | A selector with no question after it |
that agent is not one of your agents | The tool named an agent this wallet does not own |
You've reached today's assistant usage limit. Please try again tomorrow. | Over the token or transcription cap |
Sorry, I couldn't complete that. Please try rephrasing. | Five tool round trips without an answer |
Something went wrong. Please try again. | A failure inside the turn. Transient |
Nothing to create — ask the assistant to draft a purchase first. | /intent buy with no staged draft |
That draft's wallet is no longer linked to this chat. Draft discarded. | The wallet was unlinked between staging and queueing |
That button is no longer available. Send /help for the current commands. | A stale or unparseable inline button |
| no reply at all | A group chat, or an unrecognised slash command |
Neither of the last two is a failure to retry, and neither is a success sentence evidence: the only
confirmations that mean anything are a tool's own relayed text and the intent id from /intent.
Next steps
- Link Telegram — the binding, both directions, and unlinking
- Settings and simulators — the console screens the concierge sends you to
- Protocol — who holds which key, and what each one can do