@agent-native/core 0.60.0 → 0.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/engine/translate-anthropic.d.ts.map +1 -1
- package/dist/agent/engine/translate-anthropic.js +47 -1
- package/dist/agent/engine/translate-anthropic.js.map +1 -1
- package/dist/agent-native/index.d.ts +40 -0
- package/dist/agent-native/index.d.ts.map +1 -0
- package/dist/agent-native/index.js +100 -0
- package/dist/agent-native/index.js.map +1 -0
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +1 -0
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +30 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +10 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/db/client.d.ts +3 -3
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +8 -4
- package/dist/db/client.js.map +1 -1
- package/dist/server/builder-browser.d.ts +11 -0
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/builder-space.d.ts +47 -0
- package/dist/server/builder-space.d.ts.map +1 -0
- package/dist/server/builder-space.js +142 -0
- package/dist/server/builder-space.js.map +1 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +21 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +29 -6
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +26 -0
- package/docs/content/a2a-protocol.md +28 -0
- package/docs/content/agent-surfaces.md +12 -4
- package/docs/content/getting-started.md +136 -37
- package/docs/content/pure-agent-apps.md +25 -9
- package/docs/content/template-dispatch.md +4 -0
- package/package.json +5 -1
- package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +26 -0
|
@@ -1,30 +1,42 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Getting Started"
|
|
3
|
-
description: "
|
|
3
|
+
description: "Start with one headless action, or start with Chat when the conversation UI is the product."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Getting Started
|
|
7
7
|
|
|
8
|
-
Agent-Native is for apps where an AI agent and any UI around it share the same
|
|
8
|
+
Agent-Native is for apps where an AI agent and any UI around it share the same
|
|
9
|
+
actions, data, and state. The smallest useful app can be just one action. The
|
|
10
|
+
first useful UI can be Chat. Both paths use the same runtime, so you can move
|
|
11
|
+
between them without rewriting the operation the agent calls.
|
|
9
12
|
|
|
10
|
-
|
|
13
|
+
Choose the first path that matches what you want to prove:
|
|
11
14
|
|
|
12
|
-
|
|
15
|
+
| Path | Pick it when | Creates |
|
|
16
|
+
| ------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
|
|
17
|
+
| **Headless action** | You want the primitive first: one local action, the app-agent loop, CLI/HTTP/MCP/A2A, and no custom screen yet. | `actions/`, `.agents/`, runtime config, local SQLite state |
|
|
18
|
+
| **Chat app** | You want a browser app users can talk to immediately, with durable threads and tool-call UI. | Everything above, plus the Chat route, sidebar, auth, and live sync |
|
|
13
19
|
|
|
14
|
-
|
|
20
|
+
If you already know you want a finished domain app, go to
|
|
21
|
+
[Templates](/docs/cloneable-saas). If you are choosing between headless, chat,
|
|
22
|
+
embedded, or full app surfaces, go to [Agent Surfaces](/docs/agent-surfaces).
|
|
15
23
|
|
|
16
|
-
|
|
24
|
+
## Path 1: One headless action {#headless-action}
|
|
25
|
+
|
|
26
|
+
You'll need [Node.js 22 or newer](https://nodejs.org) and
|
|
27
|
+
[pnpm](https://pnpm.io) installed. Then run:
|
|
17
28
|
|
|
18
29
|
```bash
|
|
19
|
-
npx @agent-native/core@latest create my-
|
|
20
|
-
cd my-
|
|
30
|
+
npx @agent-native/core@latest create my-agent --headless
|
|
31
|
+
cd my-agent
|
|
21
32
|
pnpm install
|
|
22
|
-
pnpm
|
|
33
|
+
pnpm action hello --name Steve
|
|
34
|
+
pnpm agent "Call the hello action for Steve and explain what happened."
|
|
23
35
|
```
|
|
24
36
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
37
|
+
That is the primitive-first on-ramp: one action, no app screen, and the same
|
|
38
|
+
production app-agent loop used by chat, jobs, webhooks, and hosted runtimes.
|
|
39
|
+
The scaffold includes one example action:
|
|
28
40
|
|
|
29
41
|
```ts
|
|
30
42
|
// actions/hello.ts
|
|
@@ -44,7 +56,33 @@ export default defineAction({
|
|
|
44
56
|
});
|
|
45
57
|
```
|
|
46
58
|
|
|
47
|
-
|
|
59
|
+
Replace `hello` with the smallest real operation in your domain. That one
|
|
60
|
+
operation is then callable through the CLI, HTTP, MCP, A2A, scheduled jobs,
|
|
61
|
+
integration webhooks, and any future UI.
|
|
62
|
+
|
|
63
|
+
Headless does not mean stateless. Actions, auth/session data, application
|
|
64
|
+
state, threads, run history, credentials, and share records use SQL. Locally
|
|
65
|
+
that defaults to SQLite at `data/app.db`; in production you will usually set
|
|
66
|
+
`DATABASE_URL`. See [Deployment](/docs/deployment).
|
|
67
|
+
|
|
68
|
+
## Path 2: Chat app {#chat-app}
|
|
69
|
+
|
|
70
|
+
Use Chat when the first thing users need is a conversation UI with durable
|
|
71
|
+
threads and visible tool calls:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npx @agent-native/core@latest create my-chat-app --template chat
|
|
75
|
+
cd my-chat-app
|
|
76
|
+
pnpm install
|
|
77
|
+
pnpm dev
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Open the local URL, then ask the chat what actions are available. The Chat
|
|
81
|
+
template includes the same `actions/hello.ts` shape as the headless scaffold,
|
|
82
|
+
plus a full-page chat route, the standard left sidebar, auth, live sync, and a
|
|
83
|
+
SQLite database at `data/app.db` unless you set `DATABASE_URL`.
|
|
84
|
+
|
|
85
|
+
Run the example action directly:
|
|
48
86
|
|
|
49
87
|
```bash
|
|
50
88
|
pnpm action hello --name Steve
|
|
@@ -56,35 +94,83 @@ Then run the same app-agent loop from the terminal:
|
|
|
56
94
|
pnpm agent "Call the hello action for Steve and explain what happened."
|
|
57
95
|
```
|
|
58
96
|
|
|
59
|
-
|
|
97
|
+
The chat UI, CLI, HTTP, MCP, A2A, jobs, and future screens all call the same
|
|
98
|
+
action surface.
|
|
99
|
+
|
|
100
|
+
## Move between paths {#move-between-paths}
|
|
101
|
+
|
|
102
|
+
Headless and Chat are not separate products. Start headless when you want the
|
|
103
|
+
operation first. Add Chat when a durable conversation UI helps users inspect,
|
|
104
|
+
approve, or continue the work. Start with Chat when the conversation itself is
|
|
105
|
+
the main workflow, then add screens only where structured UI clarifies the job.
|
|
106
|
+
|
|
107
|
+
For a deeper comparison, see [Agent Surfaces](/docs/agent-surfaces). For the
|
|
108
|
+
Chat template reference, see [Chat template](/docs/template-chat).
|
|
109
|
+
|
|
110
|
+
## Run against a connected repo {#connected-repo}
|
|
60
111
|
|
|
61
|
-
|
|
112
|
+
For a cloud headless app that works on repository files, connect GitHub through
|
|
113
|
+
the connector/token model rather than cloning a long-lived sandbox checkout.
|
|
114
|
+
The agent can list, search, read, create, update, and delete repository files
|
|
115
|
+
through provider-scoped credentials.
|
|
62
116
|
|
|
63
|
-
|
|
117
|
+
In local development, use the same shape with explicit environment variables:
|
|
64
118
|
|
|
65
119
|
```bash
|
|
66
|
-
|
|
67
|
-
cd my-agent
|
|
68
|
-
pnpm install
|
|
69
|
-
pnpm action hello --name Steve
|
|
70
|
-
pnpm agent "Call the hello action for Steve and explain what happened."
|
|
120
|
+
GITHUB_REPOSITORY=owner/repo pnpm agent "Read README.md and suggest the next action."
|
|
71
121
|
```
|
|
72
122
|
|
|
73
|
-
|
|
123
|
+
The repo becomes context for the app-agent loop and `agent-native invoke`
|
|
124
|
+
calls. This path is for repository CRUD over the GitHub API. Use a sandbox or
|
|
125
|
+
Fusion-style code runtime only when you need true isolated code execution.
|
|
126
|
+
|
|
127
|
+
## Compose mini-apps {#compose-mini-apps}
|
|
128
|
+
|
|
129
|
+
Workspaces often become easier to reason about as several focused apps instead
|
|
130
|
+
of one giant app. A `hubspot-pipeline` app can own CRM access, a
|
|
131
|
+
`gong-evidence` app can own transcripts, and a `deal-brief` app can call both
|
|
132
|
+
through A2A.
|
|
133
|
+
|
|
134
|
+
From the CLI:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
pnpm agent-native agents list
|
|
138
|
+
pnpm agent-native invoke gong-evidence "Find transcript evidence for deal_123."
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
From TypeScript:
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
import { agentNative } from "@agent-native/core/agent-native";
|
|
145
|
+
|
|
146
|
+
const agents = await agentNative.listAgents();
|
|
147
|
+
const result = await agentNative.invoke(
|
|
148
|
+
"gong-evidence",
|
|
149
|
+
"Find transcript evidence for deal_123.",
|
|
150
|
+
{ userEmail: "steve@example.com" },
|
|
151
|
+
);
|
|
152
|
+
```
|
|
74
153
|
|
|
75
|
-
|
|
154
|
+
For production agent-native apps, set `A2A_SECRET` in each app environment and
|
|
155
|
+
pass the caller identity (`userEmail`) so outbound calls are signed. Use
|
|
156
|
+
`apiKeyEnv` only for legacy external peers that expect a static bearer token.
|
|
76
157
|
|
|
77
|
-
|
|
158
|
+
See [A2A Protocol](/docs/a2a-protocol) and
|
|
159
|
+
[Pure Agent Apps](/docs/pure-agent-apps) for the full pattern.
|
|
78
160
|
|
|
79
161
|
## What just happened? {#what-just-happened}
|
|
80
162
|
|
|
81
163
|
You now have a real app-agent loop:
|
|
82
164
|
|
|
83
|
-
- `hello` is one action definition, available to the agent, CLI, HTTP, MCP,
|
|
84
|
-
|
|
85
|
-
-
|
|
165
|
+
- `hello` is one action definition, available to the agent, CLI, HTTP, MCP,
|
|
166
|
+
A2A, and any future UI.
|
|
167
|
+
- `pnpm agent` calls the production app-agent loop, not an external coding
|
|
168
|
+
harness.
|
|
169
|
+
- Changes and history stay in sync because the runtime uses SQL-backed state,
|
|
170
|
+
even when you have no custom UI yet.
|
|
86
171
|
|
|
87
|
-
That parity between agent and UI is the whole point. See
|
|
172
|
+
That parity between agent and UI is the whole point. See
|
|
173
|
+
[What Is Agent-Native?](/docs/what-is-agent-native) for the bigger picture.
|
|
88
174
|
|
|
89
175
|
## Project structure {#project-structure}
|
|
90
176
|
|
|
@@ -99,21 +185,34 @@ my-app/
|
|
|
99
185
|
data/app.db # Local SQLite runtime state when DATABASE_URL is unset
|
|
100
186
|
```
|
|
101
187
|
|
|
102
|
-
Templates add domain-specific code on top: database schemas in `server/db/`,
|
|
188
|
+
Templates add domain-specific code on top: database schemas in `server/db/`,
|
|
189
|
+
API routes in `server/routes/api/`, and actions in `actions/`. See
|
|
190
|
+
[Creating Templates](/docs/creating-templates) when you are ready to build or
|
|
191
|
+
publish a reusable template.
|
|
103
192
|
|
|
104
193
|
## Common next moves {#next-docs}
|
|
105
194
|
|
|
106
195
|
Once your agent is running, the usual next step is small and concrete:
|
|
107
196
|
|
|
108
|
-
- **
|
|
109
|
-
|
|
110
|
-
- **
|
|
111
|
-
|
|
197
|
+
- **Add one real action** - replace `hello` with the smallest useful operation
|
|
198
|
+
in your domain.
|
|
199
|
+
- **Open Chat when conversation helps** - ask "what actions do you have, and
|
|
200
|
+
what can you do here?"
|
|
201
|
+
- **Connect a repo** - give the app-agent loop explicit GitHub repository
|
|
202
|
+
context when file CRUD is the job.
|
|
203
|
+
- **Compose siblings** - split provider-heavy workflows into focused mini-apps
|
|
204
|
+
and invoke them over A2A.
|
|
205
|
+
- **Deploy it** - see [Deployment](/docs/deployment) when you're ready to put
|
|
206
|
+
the app on your own domain.
|
|
112
207
|
|
|
113
208
|
Useful follow-up docs:
|
|
114
209
|
|
|
115
|
-
- [Key Concepts](/docs/key-concepts) for the architecture: SQL, actions,
|
|
116
|
-
|
|
117
|
-
- [
|
|
118
|
-
|
|
210
|
+
- [Key Concepts](/docs/key-concepts) for the architecture: SQL, actions,
|
|
211
|
+
polling sync, and context awareness
|
|
212
|
+
- [Agent Surfaces](/docs/agent-surfaces) for choosing headless, rich chat,
|
|
213
|
+
embedded, and full-app surfaces
|
|
214
|
+
- [Workspace](/docs/workspace) for instructions, skills, memory, and per-user
|
|
215
|
+
MCP connections
|
|
216
|
+
- [Messaging](/docs/messaging) for Slack, email, Telegram, and other ways to
|
|
217
|
+
reach the agent
|
|
119
218
|
- [FAQ](/docs/faq) for setup and product questions
|
|
@@ -5,9 +5,19 @@ description: "Apps where the first product surface is the app-agent loop: define
|
|
|
5
5
|
|
|
6
6
|
# Pure-Agent Apps
|
|
7
7
|
|
|
8
|
-
This is the minimal end of agent-native: an app whose first
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
This is the minimal end of agent-native: an app whose first product surface is
|
|
9
|
+
the agent loop, not a dashboard. That loop can start headlessly from CLI, jobs,
|
|
10
|
+
webhooks, Slack, email, or A2A. Add Chat when a human-facing conversation UI is
|
|
11
|
+
the right way to inspect and steer the work. For the full-UI end, start from a
|
|
12
|
+
[template](/docs/cloneable-saas). If you are choosing between headless, chat,
|
|
13
|
+
embedded, and full-app shapes, start with [Agent Surfaces](/docs/agent-surfaces).
|
|
14
|
+
|
|
15
|
+
Imagine starting with one action and the app-agent loop. No dashboard. No
|
|
16
|
+
sidebar full of menus. No forms. You ask for what you want from the terminal,
|
|
17
|
+
from Slack, from email, from a scheduled job, from another agent, or from Chat -
|
|
18
|
+
"summarize my unread emails," "post the daily metrics to Slack," "find the
|
|
19
|
+
candidates who replied last week" - and the agent goes off and does it. The
|
|
20
|
+
output shows up in the channel that asked, wherever it belongs.
|
|
11
21
|
|
|
12
22
|
That's a pure-agent app. The agent _is_ the product.
|
|
13
23
|
|
|
@@ -17,7 +27,12 @@ It is still an app, not a stateless prompt. Actions, auth sessions, app state, t
|
|
|
17
27
|
|
|
18
28
|
Most apps are built around a UI: a database table you browse, a form you fill, a chart you read. The agent is a sidekick.
|
|
19
29
|
|
|
20
|
-
In a pure-agent app, that's flipped. The
|
|
30
|
+
In a pure-agent app, that's flipped. The agent loop is the front door. You type
|
|
31
|
+
or send a request; the agent takes action; you see the result. Chat can be the
|
|
32
|
+
browser front door, but headless apps can also start from CLI, jobs, webhooks,
|
|
33
|
+
or A2A. Everything else - settings, history, what's currently running - is
|
|
34
|
+
available when you need it, but most of the time you do not need a custom
|
|
35
|
+
dashboard.
|
|
21
36
|
|
|
22
37
|
Examples of where this works really well:
|
|
23
38
|
|
|
@@ -39,9 +54,10 @@ Pick the pure-agent pattern when:
|
|
|
39
54
|
|
|
40
55
|
If your product is built around persistent objects users browse, pivot, and share - emails, events, documents, charts - pick a [template](/docs/cloneable-saas) instead. Those have full UIs _plus_ the agent.
|
|
41
56
|
|
|
42
|
-
## What ships in the box {#minimum-ui}
|
|
57
|
+
## What ships in the box when you add Chat {#minimum-ui}
|
|
43
58
|
|
|
44
|
-
|
|
59
|
+
When you add the built-in Chat shell, a pure-agent app gets five built-in
|
|
60
|
+
surfaces, all provided by the framework - you don't build them:
|
|
45
61
|
|
|
46
62
|
1. **Chat** — the main input. Users talk to the agent, steer it, queue tasks.
|
|
47
63
|
2. **Workspace** — skills, memory, instructions, custom sub-agents, connected MCP servers, scheduled jobs. Customize the agent's behavior without shipping code.
|
|
@@ -96,9 +112,9 @@ Future UI-grafting tooling should use a distinct verb or namespace. `agent-nativ
|
|
|
96
112
|
## Repo access for cloud headless {#repo-access}
|
|
97
113
|
|
|
98
114
|
Local headless apps run against the folder on your machine. For cloud headless
|
|
99
|
-
apps that need repository access,
|
|
100
|
-
|
|
101
|
-
|
|
115
|
+
apps that need repository access, use connector-scoped access: a GitHub
|
|
116
|
+
connector and token CRUD that can list repositories, search files, read files,
|
|
117
|
+
create or edit files, and delete files with the user's permission.
|
|
102
118
|
|
|
103
119
|
Do not design this as "clone the user's repo into our VM" or "give the agent a long-lived sandbox copy of the repo" as the primary model. Sandboxes are useful for isolated code execution, but repo access should be a provider integration with explicit tokens, scoped permissions, auditability, and revocation.
|
|
104
120
|
|
|
@@ -25,6 +25,7 @@ If you're running an [multi-app workspace](/docs/multi-app-workspace) with many
|
|
|
25
25
|
|
|
26
26
|
- **Central inbox.** Slack DMs, Telegram messages, email notifications, A2A requests from other agents — all land in one place. The Dispatch agent triages and either handles them itself or delegates. See [Messaging](/docs/messaging) for how to wire Slack, email, and Telegram into your workspace.
|
|
27
27
|
- **Orchestrator, not specialist.** Dispatch does _not_ try to be the email app or the analytics app. When someone asks "summarize last week's signups," Dispatch calls the analytics agent over A2A and returns the answer. When someone asks "draft a reply to Alice," Dispatch calls the mail agent.
|
|
28
|
+
- **Control-plane shell.** Chats, projects, runs, workspace apps, agents, and automations live in one operational shell, with status-first lists and drill-downs instead of one-off dashboards.
|
|
28
29
|
- **Secrets vault.** A central store for API keys, OAuth tokens, and shared credentials. Apps in the workspace resolve secrets from Dispatch instead of duplicating them in every `.env`. Requests + approvals for sensitive access.
|
|
29
30
|
- **Workspace resources.** Global skills, guardrail instructions, custom agent profiles, reference resources, and HTTP MCP servers can be created once in Dispatch. All-app resources are inherited at runtime by every app with no copy or manual sync step; selected grants are for app-specific exceptions.
|
|
30
31
|
- **Reusable integrations.** One place to connect provider accounts, track
|
|
@@ -63,6 +64,9 @@ Day-to-day, Dispatch is the place admins and ops folks open to keep the workspac
|
|
|
63
64
|
Codex, Cursor, or another MCP host, then choose which workspace apps the
|
|
64
65
|
connector can reach from Dispatch's **Agents** page. Use a direct app URL
|
|
65
66
|
only when that host should be isolated to one app.
|
|
67
|
+
- **Manage automations.** The Automations view shows enabled state, last run,
|
|
68
|
+
next run, and last error from the underlying `jobs/*.md` schedules, and lets
|
|
69
|
+
you enable or disable a job without editing files by hand.
|
|
66
70
|
- **Keep company context global.** Put personas, positioning, messaging, company facts, brand guidelines, and guardrails in Dispatch Resources once, then preview the effective workspace -> app/org -> personal stack for any app/user or inspect the stack from an app card's Context view.
|
|
67
71
|
- **Set up recurring jobs.** "Every Monday at 7am, ask the analytics agent for last week's signups and email me a summary." See [Recurring Jobs](/docs/recurring-jobs).
|
|
68
72
|
- **Review dream proposals.** Dispatch Dreams inspect prior agent runs and create source-backed proposals for what the workspace should remember, which stale notes should be cleaned up, and which repeated lessons should become skills or jobs.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.62.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=22"
|
|
@@ -46,6 +46,10 @@
|
|
|
46
46
|
"types": "./dist/action-ui.d.ts",
|
|
47
47
|
"default": "./dist/action-ui.js"
|
|
48
48
|
},
|
|
49
|
+
"./agent-native": {
|
|
50
|
+
"types": "./dist/agent-native/index.d.ts",
|
|
51
|
+
"default": "./dist/agent-native/index.js"
|
|
52
|
+
},
|
|
49
53
|
"./agent-web": "./dist/agent-web/index.js",
|
|
50
54
|
"./db": "./dist/db/index.js",
|
|
51
55
|
"./db/schema": "./dist/db/schema.js",
|
|
@@ -45,6 +45,32 @@ The main agent should discover available siblings before assuming capability:
|
|
|
45
45
|
Send narrow prompts to siblings: name the exact question, relevant ids, date
|
|
46
46
|
ranges, and expected output shape. Preserve returned ids and URLs verbatim.
|
|
47
47
|
|
|
48
|
+
## Artifact Handoff
|
|
49
|
+
|
|
50
|
+
Mini-apps should hand off compact artifacts, not giant pasted transcripts or
|
|
51
|
+
provider dumps. When a mini-app creates something another app may use, return
|
|
52
|
+
or store an artifact with:
|
|
53
|
+
|
|
54
|
+
- `artifactType` - what kind of output this is, such as `deal-set`,
|
|
55
|
+
`call-evidence`, `brief`, `dashboard`, or `report`.
|
|
56
|
+
- `artifactId` - the stable app-owned id, file path, or resource id.
|
|
57
|
+
- `createdAt` - an ISO timestamp.
|
|
58
|
+
- `source` - provider/app/source ids used to create it.
|
|
59
|
+
- `summary` - a short human-readable explanation.
|
|
60
|
+
- `items` or `records` - the bounded structured data downstream apps need.
|
|
61
|
+
- `links` - fully qualified URLs for user-visible artifacts.
|
|
62
|
+
|
|
63
|
+
Downstream apps should receive artifact ids, URLs, and narrow follow-up
|
|
64
|
+
questions. If a downstream app needs more detail, it should call back to the
|
|
65
|
+
artifact-owning app instead of asking the orchestrator to paste the whole
|
|
66
|
+
corpus into a prompt.
|
|
67
|
+
|
|
68
|
+
Example: `hubspot-pipeline` returns `{ artifactType: "deal-set",
|
|
69
|
+
artifactId: "hubspot-pipeline:deal-set:2026-06-18" }`. `deal-brief` passes
|
|
70
|
+
that id to `gong-evidence`, which returns a `call-evidence` artifact id and
|
|
71
|
+
URLs. `deal-brief` then synthesizes the final brief from the artifact ids and
|
|
72
|
+
bounded summaries.
|
|
73
|
+
|
|
48
74
|
## Provider APIs
|
|
49
75
|
|
|
50
76
|
Provider-specific actions are shortcuts, not limits. When the upstream API can
|