Skip to content
OpenSouk

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 /startLink 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 sendWhere it goes
Free text, or a voice notethe 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 cannotWhich means
sign anythingno review is published and no payment made from the chat
create an intentonly your /intent keystroke queues work
change a cashback rate or a spending capit shows you the value and the console URL
act for another wallet's agentsthe ownership check runs before every per-agent read
promote, upsell or encourage more spendproactive 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 agents
what did review 41 say about it
buy the RPC endpoint from merchant 3, up to 2 USDC
draft me a review of escrow 88 — it was fast but the docs were thin
0x1a2b… my ranks

The 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 buy

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

Let your agent do the rest

Your agent polls, re-validates, executes and records the outcome. The concierge is not told about any of it — nothing sends you a message when an intent completes. Reporting back is your agent's job.

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

CapDefaultCounts
Daily model tokens200,000every model call in the chat
Daily transcription seconds600every 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

ReplyCause
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 agentsThe 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 allA 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