diff --git a/agent/README.md b/agent/README.md
index 052f4ab2..87bcf1db 100644
--- a/agent/README.md
+++ b/agent/README.md
@@ -23,7 +23,7 @@ describe that call; they do not perform I/O or run the durable agent loop.
`provider/model` spelling.
- To select an OpenAI-native model that can use a project Codex subscription,
use an explicit provider: `useModel({ provider: "openai", model: "gpt-5" })`.
-- `useTool()` and `useSubagent()` select declared capabilities.
+- `useTool()` selects declared capabilities.
- `useSessionData()` reads the current durable session-data snapshot.
- `useMcpServer()` conditionally selects a declared MCP server.
- `useMemory()` reads the projection of a memory resource bound to the
diff --git a/agent/package-lock.json b/agent/package-lock.json
index e995583c..a2fce3a6 100644
--- a/agent/package-lock.json
+++ b/agent/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@opencomputer/agent",
- "version": "0.8.0",
+ "version": "0.9.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@opencomputer/agent",
- "version": "0.8.0",
+ "version": "0.9.0",
"dependencies": {
"croner": "^9.1.0"
},
diff --git a/agent/package.json b/agent/package.json
index abadb8d6..21fa233e 100644
--- a/agent/package.json
+++ b/agent/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencomputer/agent",
- "version": "0.8.0",
+ "version": "0.9.0",
"description": "Reactive agent authoring API for OpenComputer.",
"type": "module",
"main": "./dist/index.js",
diff --git a/agent/src/index.ts b/agent/src/index.ts
index 12bf3af9..6d399105 100644
--- a/agent/src/index.ts
+++ b/agent/src/index.ts
@@ -729,7 +729,6 @@ interface AgentHooks {
useModel(model: ModelSelection): void;
useTool(tool: string | ResourceReference): void;
useConnection(connection: string | ResourceReference): void;
- useSubagent(agent: string | ResourceReference): void;
useSessionData(key: string): T | undefined;
useMcpServer(server: string | ResourceReference): void;
/** Optional: the declaration is extracted at build time, so a host
@@ -1742,8 +1741,6 @@ export const useConnection = (connection: string | ResourceReference): void =>
*/
export const useService = (service: string): void =>
hooks().useService?.(service);
-export const useSubagent = (agent: string | ResourceReference): void =>
- hooks().useSubagent(agent);
export const useMcpServer = (server: string | ResourceReference): void =>
hooks().useMcpServer(server);
export function useSessionData(
diff --git a/cli/package-lock.json b/cli/package-lock.json
index 46de67f9..fc20d836 100644
--- a/cli/package-lock.json
+++ b/cli/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@opencomputer/cli",
- "version": "0.7.15",
+ "version": "0.7.16",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@opencomputer/cli",
- "version": "0.7.15",
+ "version": "0.7.16",
"dependencies": {
"@opencode-ai/sdk": "1.18.4",
"ai": "^7.0.45",
diff --git a/cli/package.json b/cli/package.json
index 55118789..e23a5dc5 100644
--- a/cli/package.json
+++ b/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencomputer/cli",
- "version": "0.7.15",
+ "version": "0.7.16",
"description": "Build, test, deploy, and share OpenComputer agents as code.",
"type": "module",
"bin": {
diff --git a/cli/src/project.test.ts b/cli/src/project.test.ts
index 21ef4b6f..aae7be2e 100644
--- a/cli/src/project.test.ts
+++ b/cli/src/project.test.ts
@@ -327,7 +327,6 @@ test("the code-first compiler records hook resources without config files", asyn
useInput,
useMcpServer,
useModel,
- useSubagent,
useTool,
} from "@opencomputer/agent";
@@ -340,7 +339,6 @@ export default function Agent() {
const input = useInput();
useModel("anthropic/claude-sonnet-4.6");
useTool("search-docs");
- useSubagent("researcher");
if (input.text?.includes("docs")) useMcpServer(docs);
return "Help with the request.";
}
@@ -357,7 +355,6 @@ export default function Agent() {
version: number;
tools: string[];
toolModules: string[];
- subagents: string[];
connections: string[];
httpConnections: unknown[];
githubConnections: unknown[];
@@ -376,7 +373,6 @@ export default function Agent() {
tools: ["search-docs"],
gatedTools: [],
toolModules: [],
- subagents: ["researcher"],
connections: [],
httpConnections: [],
githubConnections: [],
diff --git a/cli/src/project.ts b/cli/src/project.ts
index d0a4c801..67b34d1a 100644
--- a/cli/src/project.ts
+++ b/cli/src/project.ts
@@ -3403,7 +3403,6 @@ export const useModel = (model) => hooks().useModel(model);
export const useTool = (tool) => hooks().useTool(tool);
export const useConnection = (connection) => hooks().useConnection(connection);
export const useService = (service) => hooks().useService?.(service);
-export const useSubagent = (agent) => hooks().useSubagent(agent);
export const useMcpServer = (server) => hooks().useMcpServer(server);
export const useSessionData = (key) => hooks().useSessionData(key);
`;
@@ -3823,7 +3822,6 @@ the product or support surface presented to users.
// The result tool and the schema the host validates its output
// against before committing it as the session's result.
...(resultTool ? { resultTool } : {}),
- subagents: literalHookIds(agentSource, "useSubagent"),
// Declared HTTP connections AND managed-service grants: the platform
// reads one list, and a provider grant absent from it makes every
// connected mailbox invisible to listServices().
diff --git a/create-start/package.json b/create-start/package.json
index aa1a2c45..7ad0baa3 100644
--- a/create-start/package.json
+++ b/create-start/package.json
@@ -1,6 +1,6 @@
{
"name": "@opencomputer/create-start",
- "version": "0.7.15",
+ "version": "0.7.16",
"description": "Create a hello-world OpenComputer agent application.",
"type": "module",
"bin": {
@@ -18,7 +18,7 @@
"node": ">=22.0.0"
},
"dependencies": {
- "@opencomputer/cli": "0.7.15"
+ "@opencomputer/cli": "0.7.16"
},
"publishConfig": {
"access": "public"
diff --git a/docs/agents/capabilities.mdx b/docs/agents/capabilities.mdx
index 7a93bc05..7c2de834 100644
--- a/docs/agents/capabilities.mdx
+++ b/docs/agents/capabilities.mdx
@@ -1,6 +1,6 @@
---
title: "Agent capabilities"
-description: "Choose tools, MCP servers, skills, subagents, memory and outbound connections"
+description: "Choose tools, MCP servers, skills, memory and outbound connections"
---
Capabilities give an agent something beyond its instructions and model. Choose
@@ -13,7 +13,6 @@ the narrowest capability that fits the job.
| Connected service | Google services, GitHub, or Linear, on someone's connected account | OpenComputer attaches and refreshes the credential | `useService("gmail")`, then `callService()` in a tool |
| MCP server | A service that already publishes a collection of tools | The remote MCP server | `useMcpServer(server)` |
| Skill | A reusable procedure, checklist, or supporting files | The agent follows the loaded instructions | Place it under `skills/` |
-| Subagent | Delegating a focused task to another project agent | The delegated agent | `useSubagent(agentId)` |
| HTTP connection | A constrained authenticated outbound request | OpenComputer sends the declared request | Call `defineConnection().fetch()` inside a tool |
| GitHub App connection | Direct Git and GitHub API access to an installation | The agent sandbox uses a short-lived installation token | `useConnection(github)` |
| Memory | Notes shared across sessions | OpenComputer stores documents; the agent reads and saves through memory tools | `useMemory(memory)` |
@@ -37,12 +36,6 @@ A tool performs an operation and returns structured data. A
Many agents use both: the skill describes the workflow while tools perform the
individual actions.
-## Tool or subagent?
-
-Use a tool for a bounded operation such as fetching an order. Use a
-[subagent](/agents/subagents) when the task benefits from its own instructions,
-model selection, capabilities, and working context.
-
## Session data or memory?
[Session data](/agents/session-data) describes the current session and is set
diff --git a/docs/agents/events.mdx b/docs/agents/events.mdx
index dbdd07bd..be3a0553 100644
--- a/docs/agents/events.mdx
+++ b/docs/agents/events.mdx
@@ -233,7 +233,7 @@ work continued or failed; see [Durability and recovery](/agents/sessions#durabil
| Type | When | `data` |
| --- | --- | --- |
-| `agent.rendered` | Your agent function was rendered for a model step | `renderId`, `instructions`, `model`, `enabledTools`, `enabledSubagents`, `enabledMcpServers`, `requiredConnections`, `input`, `tools`, `renderedAt` |
+| `agent.rendered` | Your agent function was rendered for a model step | `renderId`, `instructions`, `model`, `enabledTools`, `enabledMcpServers`, `requiredConnections`, `input`, `tools`, `renderedAt` |
One turn can carry several renders, one per model step. The debug inspector
in the [playground](/agents/playground) shows the same data.
diff --git a/docs/agents/hooks.mdx b/docs/agents/hooks.mdx
index 34db17e2..378238d6 100644
--- a/docs/agents/hooks.mdx
+++ b/docs/agents/hooks.mdx
@@ -44,7 +44,6 @@ agent function.
| `useModel(model)` | Selects the model used for the next step | [Models](/agents/models) |
| `useTool(tool)` | Exposes a named or code-defined tool | [Tools](/agents/tools) |
| `useMcpServer(server)` | Exposes tools from a managed HTTPS MCP server | [MCP servers](/agents/mcp) |
-| `useSubagent(agent)` | Makes another project agent available for delegation | [Subagents](/agents/subagents) |
| `useSessionData(key)` | Reads a durable value associated with the session | [Session data](/agents/session-data) |
| `useMemory(memory)` | Reads bound memory and selects its permitted tools for this model request | [Memory](/agents/memory) |
diff --git a/docs/agents/mental-model.mdx b/docs/agents/mental-model.mdx
index ba10764e..73e0e1dd 100644
--- a/docs/agents/mental-model.mdx
+++ b/docs/agents/mental-model.mdx
@@ -117,7 +117,6 @@ Use the narrowest capability that fits the work:
| --- | --- |
| `useTool(tool)` | One typed operation implemented by your project |
| `useMcpServer(server)` | A collection of tools advertised by a remote MCP server |
-| `useSubagent(agent)` | Another project agent available for delegation |
| A skill under `skills/` | Reusable instructions and supporting resources |
| `useMemory(memory)` | The bound documents' text and the tools that save to them |
@@ -169,7 +168,7 @@ Read
Understand durable conversations and runtime events.
- Choose between tools, MCP servers, skills, and subagents.
+ Choose between tools, MCP servers, and skills.
Start recurring sessions from code-defined cron schedules.
diff --git a/docs/agents/overview.mdx b/docs/agents/overview.mdx
index 0ccd73bf..c2b90852 100644
--- a/docs/agents/overview.mdx
+++ b/docs/agents/overview.mdx
@@ -22,8 +22,8 @@ export default function Agent() {
The exported function is a reactive description of the agent. OpenComputer
renders it for the current input and uses its return value as instructions for
-the managed agent loop. Hooks attach the model, tools, MCP servers, and
-subagents needed for that render. [Memory](/agents/memory) gives an agent
+the managed agent loop. Hooks attach the model, tools, and MCP servers
+needed for that render. [Memory](/agents/memory) gives an agent
notes that outlive a session: project-scoped documents read at render, saved
by the model through memory tools, and owned by you.
@@ -44,7 +44,7 @@ by the model through memory tools, and owned by you.
Create sessions on your server and attach a React interface.
- Choose between tools, MCP servers, skills, and subagents.
+ Choose between tools, MCP servers, and skills.
Declare secret-backed connections without exposing credentials to agents.
@@ -78,7 +78,7 @@ configured agent to `development`.
## What is available today
- TypeScript projects containing one or more agents
-- reactive instructions, model selection, tools, subagents, MCP
+- reactive instructions, model selection, tools, MCP
servers, input metadata, session data reads, and document memory
- cloud development with file watching and automatic synchronization
- dashboard and CLI playground sessions
diff --git a/docs/agents/quickstart.mdx b/docs/agents/quickstart.mdx
index 63fb489f..ced90c2e 100644
--- a/docs/agents/quickstart.mdx
+++ b/docs/agents/quickstart.mdx
@@ -105,6 +105,6 @@ version history.
Add more agents and understand project bindings.
- Add models, tools, MCP servers, and subagents.
+ Add models, tools, and MCP servers.
diff --git a/docs/agents/reactive-agents.mdx b/docs/agents/reactive-agents.mdx
index 0bcff557..cbdc754c 100644
--- a/docs/agents/reactive-agents.mdx
+++ b/docs/agents/reactive-agents.mdx
@@ -26,7 +26,6 @@ needs it.
| `useCurrentInput()` | Alias for `useInput()` |
| `useModel(model)` | Selects a model using `provider/model` notation |
| `useTool(tool)` | Makes a named or code-defined tool available |
-| `useSubagent(agent)` | Makes another project agent available as a subagent |
| `useMcpServer(server)` | Attaches a managed HTTPS MCP server |
| `useSessionData(key)` | Reads a value previously stored in the current session |
| `useMemory(memory)` | Reads bound memory and selects its permitted tools |
@@ -41,7 +40,6 @@ and source metadata.
import {
useInput,
useModel,
- useSubagent,
useTool,
} from "@opencomputer/agent";
@@ -51,7 +49,6 @@ export default function Agent() {
if (input.text?.includes("research")) {
useTool("web-search");
- useSubagent("researcher");
}
return "Answer directly. Research and verify when those capabilities exist.";
@@ -137,5 +134,5 @@ source or the React application.
Continue with [Agent hooks](/agents/hooks), then use the focused guides for
[inputs](/agents/inputs), [models](/agents/models), [tools](/agents/tools),
-[MCP servers](/agents/mcp), [skills](/agents/skills),
-[subagents](/agents/subagents), and [session data](/agents/session-data).
+[MCP servers](/agents/mcp), [skills](/agents/skills), and
+[session data](/agents/session-data).
diff --git a/docs/agents/subagents.mdx b/docs/agents/subagents.mdx
deleted file mode 100644
index cab0e09e..00000000
--- a/docs/agents/subagents.mdx
+++ /dev/null
@@ -1,79 +0,0 @@
----
-title: "Subagents"
-description: "Let an agent delegate focused work with useSubagent"
----
-
-A subagent is another agent in the same project that can take a focused task.
-Use `useSubagent()` to make that agent available to the current render.
-
-## Add the specialist
-
-Create a second agent:
-
-```tsx
-// opencomputer/agents/researcher/agent.ts
-import { useModel, useTool } from "@opencomputer/agent";
-
-export default function Agent() {
- useModel("anthropic/claude-sonnet-4.6");
- useTool("web-search");
- return "Research the delegated question. Return sourced findings only.";
-}
-```
-
-Register both agents in the project:
-
-```tsx
-// opencomputer/project.ts
-export default {
- name: "Campaign workspace",
- agents: ["campaign-planner", "researcher"],
-};
-```
-
-## Expose it with `useSubagent`
-
-```tsx
-// opencomputer/agents/campaign-planner/agent.ts
-import { useModel, useSubagent } from "@opencomputer/agent";
-
-export default function Agent() {
- useModel("anthropic/claude-sonnet-4.6");
- useSubagent("researcher");
- return [
- "Plan the campaign from evidence.",
- "Delegate audience and competitor research to the researcher.",
- ].join(" ");
-}
-```
-
-The value passed to `useSubagent()` is the agent ID from
-`opencomputer/project.ts`. Give the parent clear instructions about what it
-should delegate and what result it expects.
-
-Inputs created by delegation have `useInput().source === "subagent"`, so the
-specialist can adapt its response:
-
-```tsx
-import { useInput } from "@opencomputer/agent";
-
-export default function Agent() {
- const input = useInput();
- return input.source === "subagent"
- ? "Complete only the delegated research task and return concise findings."
- : "Help the user research their question.";
-}
-```
-
-## Attach conditionally
-
-Like other resource hooks, `useSubagent()` can be conditional:
-
-```tsx
-const input = useInput();
-if (input.text?.includes("research")) {
- useSubagent("researcher");
-}
-```
-
-This keeps the delegate unavailable for requests where it adds no value.
diff --git a/docs/docs.json b/docs/docs.json
index c84ee6eb..cb2ae620 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -72,7 +72,6 @@
"agents/tools",
"agents/mcp",
"agents/skills",
- "agents/subagents",
"agents/session-data",
"agents/document-memory",
"agents/memory-providers"
diff --git a/web/src/managed-agents/DebugInspector.tsx b/web/src/managed-agents/DebugInspector.tsx
index b5f12237..37026638 100644
--- a/web/src/managed-agents/DebugInspector.tsx
+++ b/web/src/managed-agents/DebugInspector.tsx
@@ -396,12 +396,6 @@ export function DebugInspector({
-
Skills
diff --git a/web/src/managed-agents/api.ts b/web/src/managed-agents/api.ts
index 721ae8fa..ff0c7793 100644
--- a/web/src/managed-agents/api.ts
+++ b/web/src/managed-agents/api.ts
@@ -636,7 +636,7 @@ const renderDebugSchema = z.object({
instructionsHash: z.string(),
instructions: z.string(),
enabledTools: z.array(z.string()),
- enabledSubagents: z.array(z.string()),
+ enabledSubagents: z.array(z.string()).optional(),
requiredConnections: z.array(z.string()),
enabledMcpServers: z.array(z.string()),
input: z.object({ source: z.string(), text: z.string().optional() }),