Xuda AI Agentic Workspace

An agent is a document with a list of tools, and the list is the product.

An agent is one stored record: a name, a model code, an instruction block, an optional user guide, and an ordered list of tools. At run time that list is walked in order and each entry is compiled into a real tool the model can call. What an agent is able to do is something you read, not something you have to trust.

Nine tool types, named and finite
Write tools are withheld unless you asked
No scheduler: nothing runs on a clock
An agent is a document with a list of tools, and the list is the product.
9

Tool types you can attach to an agent, from a web search to a whole Full Stack VPS

4

Situations that hand an agent its write capable tools. Agent Mode left on auto is not one of them

96

Platform methods the project assistant can carry as tools in a single turn

5

Channels an unattended auto response covers: chat, widget, email, contact form, phone

What an agent reaches

Nine tool types, and what each one actually becomes.

The picker is a finite list, and every entry is compiled by one switch into a specific object at run time. Nothing is implicit and nothing is on by default: whatever an agent can reach, its author attached by hand.

Both gaps are named above rather than hidden.
The gate

A plain chat gets a defanged agent, on purpose.

One line decides whether this run gets the agent real tools. When it is false, every write capable tool is skipped and the agent is dropped from the run list entirely. Web search, file search and table bind either way, which is the read only exception.

  • Turning Agent Mode on with no agent named means consider all of them. The code does not read that as choosing, so it stays gated.
  • Naming agents in the composer counts as choosing. It was added because it did not: an agent whose tools were all plugins was marked ineligible, dropped from the handoff list, and the router answered alone with no tools at all.
  • The read only three are the exception list rather than a declared policy. It is which cases lack the guard, and it is worth knowing that is the shape of it.
  • Once the gate opens, everything on that agent binds. A hosted MCP tool is opened with approval set to never, so there is no second prompt at call time.
The four situations that open it
You are in the agent own chat thread
You named agents in the composer
A prompt suggestion fired
You clicked a suggestion card
Cross tenant consent

An installed agent runs its publisher code against your data, so it has to ask.

Install an agent from the marketplace and its plugin package still loads from the publisher project, because that is the only project the package is installed into. What it acts on is you: the sandbox is handed your project and your id, so anything it produces lands where you can find it. Foreign code against your own data is the thing being consented to, and the check runs before the tool is ever handed to the model.

Approval is keyed to you and that one agent, so installing a second agent from the same publisher is a separate decision. Withholding the tool rather than the whole agent is deliberate: the agent survives the turn and explains the gap, instead of answering with a confident paragraph describing work it never did.
How an agent runs

An agent runs when something asks it to. Nothing runs one on a clock.

Name exactly one agent in the composer and it runs directly. Leave it open and a triage agent that holds no tools of its own routes the turn by handing off to the agents that do.

  • The runtime turns each handoff into a transfer tool named after the agent, which is why a display name is reduced to letters, digits, underscore and hyphen and clipped to 55 characters. Naming agents after document ids gave the router nothing to route on, so it answered everything itself.
  • Naming exactly one agent skips the router, because a router over a list of one is not a routing decision. It used to build one anyway, and offered to route a request instead of doing it.
  • There is no scheduler. The one unattended path is auto response, and it fires on an inbound message rather than on a timer, across chat, the chat widget, email, contact forms and phone. It answers nothing until a plan is switched on.
  • An agent stores its own model code, and that code applies when the thread is the agent own thread or you clicked a suggestion. An agent you name in a plain chat runs on the chat model instead.
One agent turn
  1. You ask
    Its own thread, or you name it in the composer
  2. Its tools bind
    Naming it is a choice, so the full set is allowed
  3. One agent, or a router
    Exactly one runs directly, otherwise a triage agent hands off
  4. The phases stream
    Preparing tools, then Running and Finished per tool, then Streaming results
Which model answers

One rule picks a model for you, and it never reaches the expensive ones.

In a chat and in an agent thread the model is the one the request names, defaulting to the cheapest in the catalogue. Exactly one function anywhere chooses automatically. It runs on the project assistant only, it runs only when you picked nothing yourself, and it has two outcomes.

The rule reads the prompt and never the tab you are on, so a tab named after an action cannot force every question asked on it into the stronger tier. There is also no fallback to a different model anywhere: on a timeout the request is re-asked against the same model, and if it still fails the turn fails and says so.
The catalogue

Nine models, and what an agent stores is the code on the left.

A profile or an agent never stores a provider model id. It stores a short catalogue code, and the code becomes a real model id only at the moment the request leaves, which is how the catalogue was renumbered with no data migration and why eight legacy keys still alias forward. Billing and validation stay on the code. The rates below are the catalogue rates a usage record is priced at, per million tokens. What one credit is worth is deliberately not stated here, because the conversion the ledger reports is computed outside the application.

Sent to the provider
Input per 1M tokens
Output per 1M tokens
Chosen by the one automatic rule
gpt-1, GPT-5 Nano (the default)gpt-5-nano$0.05$0.40
gpt-2, GPT-5.4 Nanogpt-5.4-nano$0.20$1.25
gpt-3, GPT-5.6 Lunagpt-5.6-luna$0.20$1.20
gpt-4, GPT-5.6 Terragpt-5.6-terra$2$12
gpt-5, GPT-5.6 Solgpt-5.6-sol$5$30
img-1, GPT Image Minigpt-image-1-mini$2.50$8
img-2, ChatGPT Image Progpt-image-2$8$32
voice-1, Whisper Speech AIwhisper-1$1$1
voice-2, GPT Realtime Voicegpt-realtime-2.1$32$64
Where an agent lives

Five collections, one shell, and one rule about deleting.

AI Chats, Apps, Contacts, AI Agents and Profiles are five tabs on a single route, each answered by one method named after its own tab. An agent is a record in one of those five, so the verbs you learn on one collection you already know on the other four.

  • Sharing an agent hands over a pointer rather than a copy. The recipient gets a document carrying the same id and the owner id, and the runtime reads through to the original, so a shared agent keeps up as its owner edits it.
  • A per agent trail records which fields moved rather than that something changed. An instructions edit travels as a character count, a tool change as a count, and an edit made directly in Studio is caught by comparing against the previous revision.
  • Expert mode opens the same agent document in Studio. It is one object with two editors, not an export.
  • Creating an agent returns as soon as the document exists and the rest runs detached, in three named steps: Setting up, Reading files, Making picture. A step that fails is recorded and the run continues rather than stranding the agent in preparing.
Deletion is refused until you archive
A chat
A mini app
A contact
An agent
A profile
Before you commit

The questions you are forming right now

Four of these six answers are a limit. They are here because you would hit them in week one anyway.

Watch

Watch an agent pick up a tool and use it.

Give one agent one tool and watch what it reaches.

Attach a web search and it works in any chat. Attach a plugin or a Full Stack VPS and it works the moment you name the agent. What it can do stays a list you can read.