Imperal Docs
Built-in Extensions

Thoughts

Your hub-chat history with Webbee. Read any past thread, return to an older one, rename it or erase it — all from chat, on any surface.

Thoughts is one of the core Workspaces (Rooms) in Imperal Cloud. While packaged under the hood as the thoughts extension, in practice it is the dedicated Thoughts Room (/workspace/thoughts) — the unified conversational workspace and running record of your dialogs with Webbee 🐝 across every surface.

The room lives permanently at /workspace/thoughts in the Imperal Panel, selectable via the top-bar Workspaces: menu. The extension provides the tools that let Webbee reach that same history herself. That is the difference that matters day to day — you can ask "what were we saying about the Ceph migration last Tuesday?" in Telegram or Webbee Code, and she can look it up in the Thoughts room, instead of guessing or answering only from what is currently in working memory.

Each tool is marked read (safe, returns information), write (changes state), or destructive (irreversible — Webbee always asks you to confirm first).

One history, reachable from every surface

Thoughts holds one specific record: your hub chat — the conversation the panel reads and writes. It is not per-device. Whatever surface you ask from, you are reading and acting on that same record, rather than a separate transcript per device.

Messages in it carry the surface they were said on, stamped at write time by whichever surface wrote it — never inferred afterwards. Messages archived before the platform began recording that show no origin at all, and are deliberately left that way: the only thing available to backfill them with is where you are now, which for an old message is a confident wrong answer.

Telegram is delivered on its own channel and is deliberately kept out of this record, so those turns will not appear in a thread listing. What was said there is not lost — it goes to Webbee's unified memory, which is what she recalls from; it simply is not part of the hub-chat transcript Thoughts reads.

At any moment exactly one thread is live: the one every surface is reading and writing right now. Switching threads is therefore a real action with a visible effect everywhere, which is why it counts as a write and not a read.

Finding a conversation

Prop

Type

The two go together in practice. list_conversations is the inventory — cheap, and the right first move whenever you refer to something from before. read_conversation is the transcript, once you know which thread you mean.

Leaving the id out of read_conversation is deliberate: "what were we just saying?" is the most natural way to ask, and it resolves to the live thread instead of refusing.

You: what did we decide about the BGP session with StarNet?
     → list_conversations(query: "BGP")
     → read_conversation(conversation_id: "conv_9f31…")

Steering the conversation

Prop

Type

Renaming deserves one extra sentence, because its side effect is the useful kind of surprising: threads normally name themselves from their opening messages, but the moment you name one, the automatic namer leaves it alone permanently. A thread you care about keeps the name you gave it.

Switching never destroys anything. Both continue_conversation and new_conversation archive the thread you are leaving before they move, so "go back to what we were doing" always has something to go back to.

You: go back to the conversation about the Galera migration
     → continue_conversation(conversation_id: "conv_9f31…")

You: let's start fresh
     → new_conversation()

You: call this one "Ceph SSD rollout"
     → rename_conversation(conversation_id: "conv_9f31…", title: "Ceph SSD rollout")

Erasing a conversation

Prop

Type

This is the one tool here that cannot be undone, and it behaves accordingly. It is declared destructive, which means the platform itself raises the confirmation — Webbee cannot skip that step, even if asked to. It also refuses to guess: with no explicit thread id it will not pick one for you.

Deleting the live thread is handled rather than forbidden. The running chat record is cleared and a fresh conversation opens in its place, so no surface is ever left pointing at something that no longer exists. Deleting any other thread leaves your current conversation untouched.

Whose history you can reach

Your own — and there is no way to express the alternative.

Every call is bound to the acting user by the platform, and the routes behind these tools accept no user parameter at all. There is no shape of request, from any surface, that could ask for somebody else's conversations. This is not a permission check that might be forgotten or misconfigured; it is the absence of a way to ask the question.

For extension developers

The same history is available to your own extension through the SDK, as ctx.conversations — see the ctx.conversations reference. It is owner-scoped in exactly the way described above, so an extension cannot reach further than the user running it.

On this page