@preapexis/piexis 0.2.2 → 0.2.5

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.
Files changed (149) hide show
  1. package/README.md +85 -131
  2. package/apps/server/src/index.ts +97 -0
  3. package/apps/server/src/session-manager.ts +95 -0
  4. package/apps/server/src/workspace.ts +39 -0
  5. package/{tsconfig.json → apps/server/tsconfig.json} +3 -3
  6. package/apps/web/dist/assets/index-D4n3_lAw.js +10 -0
  7. package/apps/web/dist/assets/index-igiK0FPY.css +1 -0
  8. package/apps/web/dist/index.html +3 -0
  9. package/bin/piexis-web.mjs +24 -0
  10. package/extensions/agents.ts +205 -0
  11. package/extensions/ask-question.ts +54 -95
  12. package/extensions/recommended-tools.ts +62 -0
  13. package/extensions/ui.ts +204 -58
  14. package/extensions/webui.ts +45 -0
  15. package/lib/agent-config.ts +55 -0
  16. package/lib/agents.ts +208 -0
  17. package/lib/question-model.ts +98 -0
  18. package/lib/question-ui.ts +214 -0
  19. package/lib/recommended-tools.ts +119 -0
  20. package/lib/subagent-runner.ts +146 -0
  21. package/lib/ui-tips.json +41 -0
  22. package/package.json +41 -14
  23. package/packages/pi-integration/src/rpc-client.ts +99 -0
  24. package/packages/shared/src/index.ts +27 -0
  25. package/prompts/init.md +10 -2
  26. package/prompts/summary.md +7 -6
  27. package/schemas/agent.schema.json +48 -0
  28. package/skills/{claude-api/LICENSE.txt → caveman/LICENSE} +2 -2
  29. package/skills/caveman/LICENSE-MIT +21 -0
  30. package/skills/caveman/NOTICE +10 -0
  31. package/skills/caveman/SKILL.md +89 -0
  32. package/skills/find-skills/SKILL.md +141 -0
  33. package/skills/ponytail/LICENSE +21 -0
  34. package/skills/ponytail/NOTICE +9 -0
  35. package/skills/ponytail/SKILL.md +52 -0
  36. package/themes/midnight.json +81 -0
  37. package/.github/workflows/publish.yml +0 -35
  38. package/AGENTS.md +0 -58
  39. package/eval/README.md +0 -72
  40. package/eval/permission-cases.json +0 -28
  41. package/eval/permissions.mjs +0 -103
  42. package/extensions/background-tasks.ts +0 -433
  43. package/extensions/background-worker.ts +0 -50
  44. package/extensions/glob.ts +0 -32
  45. package/extensions/mode.ts +0 -397
  46. package/lib/bash-approvals.ts +0 -113
  47. package/lib/bash-policy.ts +0 -164
  48. package/lib/mode-policy.ts +0 -174
  49. package/lib/path-policy.ts +0 -182
  50. package/lib/permission-classifier.ts +0 -128
  51. package/lib/permission-config.ts +0 -91
  52. package/lib/permission-denials.ts +0 -32
  53. package/lib/permission-intent.ts +0 -128
  54. package/lib/permission-taxonomy.ts +0 -15
  55. package/lib/task-broker.ts +0 -65
  56. package/lib/task-checkout.ts +0 -39
  57. package/lib/task-git.ts +0 -44
  58. package/lib/task-patch.ts +0 -106
  59. package/lib/task-permissions.ts +0 -51
  60. package/lib/task-report.ts +0 -62
  61. package/lib/task-worktree-policy.ts +0 -56
  62. package/scripts/release.mjs +0 -32
  63. package/skills/claude-api/SKILL.md +0 -572
  64. package/skills/claude-api/csharp/claude-api/README.md +0 -362
  65. package/skills/claude-api/csharp/claude-api/batches.md +0 -14
  66. package/skills/claude-api/csharp/claude-api/files-api.md +0 -25
  67. package/skills/claude-api/csharp/claude-api/streaming.md +0 -28
  68. package/skills/claude-api/csharp/claude-api/tool-use.md +0 -164
  69. package/skills/claude-api/curl/examples.md +0 -256
  70. package/skills/claude-api/curl/managed-agents.md +0 -371
  71. package/skills/claude-api/go/claude-api/README.md +0 -188
  72. package/skills/claude-api/go/claude-api/files-api.md +0 -23
  73. package/skills/claude-api/go/claude-api/streaming.md +0 -43
  74. package/skills/claude-api/go/claude-api/tool-use.md +0 -220
  75. package/skills/claude-api/go/managed-agents/README.md +0 -564
  76. package/skills/claude-api/java/claude-api/README.md +0 -238
  77. package/skills/claude-api/java/claude-api/files-api.md +0 -27
  78. package/skills/claude-api/java/claude-api/streaming.md +0 -24
  79. package/skills/claude-api/java/claude-api/tool-use.md +0 -228
  80. package/skills/claude-api/java/managed-agents/README.md +0 -443
  81. package/skills/claude-api/php/claude-api/README.md +0 -174
  82. package/skills/claude-api/php/claude-api/batches.md +0 -15
  83. package/skills/claude-api/php/claude-api/files-api.md +0 -13
  84. package/skills/claude-api/php/claude-api/streaming.md +0 -27
  85. package/skills/claude-api/php/claude-api/tool-use.md +0 -253
  86. package/skills/claude-api/php/managed-agents/README.md +0 -443
  87. package/skills/claude-api/python/claude-api/README.md +0 -565
  88. package/skills/claude-api/python/claude-api/batches.md +0 -198
  89. package/skills/claude-api/python/claude-api/files-api.md +0 -170
  90. package/skills/claude-api/python/claude-api/sdk-upgrade.md +0 -286
  91. package/skills/claude-api/python/claude-api/streaming.md +0 -179
  92. package/skills/claude-api/python/claude-api/tool-use.md +0 -627
  93. package/skills/claude-api/python/managed-agents/README.md +0 -335
  94. package/skills/claude-api/ruby/claude-api/README.md +0 -134
  95. package/skills/claude-api/ruby/claude-api/streaming.md +0 -16
  96. package/skills/claude-api/ruby/claude-api/tool-use.md +0 -41
  97. package/skills/claude-api/ruby/managed-agents/README.md +0 -394
  98. package/skills/claude-api/shared/admin-api.md +0 -179
  99. package/skills/claude-api/shared/agent-design.md +0 -101
  100. package/skills/claude-api/shared/anthropic-cli.md +0 -269
  101. package/skills/claude-api/shared/claude-platform-on-aws.md +0 -59
  102. package/skills/claude-api/shared/cost-optimization.md +0 -233
  103. package/skills/claude-api/shared/error-codes.md +0 -262
  104. package/skills/claude-api/shared/live-sources.md +0 -166
  105. package/skills/claude-api/shared/managed-agents-api-reference.md +0 -455
  106. package/skills/claude-api/shared/managed-agents-client-patterns.md +0 -220
  107. package/skills/claude-api/shared/managed-agents-core.md +0 -359
  108. package/skills/claude-api/shared/managed-agents-environments.md +0 -226
  109. package/skills/claude-api/shared/managed-agents-events.md +0 -290
  110. package/skills/claude-api/shared/managed-agents-memory.md +0 -201
  111. package/skills/claude-api/shared/managed-agents-multiagent.md +0 -260
  112. package/skills/claude-api/shared/managed-agents-onboarding.md +0 -82
  113. package/skills/claude-api/shared/managed-agents-outcomes.md +0 -108
  114. package/skills/claude-api/shared/managed-agents-overview.md +0 -77
  115. package/skills/claude-api/shared/managed-agents-scheduled-deployments.md +0 -156
  116. package/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +0 -282
  117. package/skills/claude-api/shared/managed-agents-tools.md +0 -504
  118. package/skills/claude-api/shared/managed-agents-webhooks.md +0 -143
  119. package/skills/claude-api/shared/model-migration.md +0 -1872
  120. package/skills/claude-api/shared/models.md +0 -142
  121. package/skills/claude-api/shared/platform-availability.md +0 -53
  122. package/skills/claude-api/shared/prompt-audit.md +0 -223
  123. package/skills/claude-api/shared/prompt-caching.md +0 -292
  124. package/skills/claude-api/shared/token-counting.md +0 -56
  125. package/skills/claude-api/shared/tool-use-concepts.md +0 -526
  126. package/skills/claude-api/typescript/claude-api/README.md +0 -405
  127. package/skills/claude-api/typescript/claude-api/batches.md +0 -106
  128. package/skills/claude-api/typescript/claude-api/files-api.md +0 -98
  129. package/skills/claude-api/typescript/claude-api/streaming.md +0 -178
  130. package/skills/claude-api/typescript/claude-api/tool-use.md +0 -586
  131. package/skills/claude-api/typescript/managed-agents/README.md +0 -359
  132. package/skills-lock.json +0 -359
  133. package/tests/auto-permissions.test.mjs +0 -315
  134. package/tests/background-tasks.test.mjs +0 -27
  135. package/tests/background-worker.test.mjs +0 -60
  136. package/tests/bash-permissions.test.mjs +0 -276
  137. package/tests/glob.test.mjs +0 -31
  138. package/tests/mode.test.mjs +0 -62
  139. package/tests/permission-evaluation.test.mjs +0 -70
  140. package/tests/permission-foundation.test.mjs +0 -194
  141. package/tests/permission-policy.test.mjs +0 -158
  142. package/tests/runtime/README.md +0 -51
  143. package/tests/runtime/harness.mjs +0 -190
  144. package/tests/runtime/permissions.test.mjs +0 -192
  145. package/tests/runtime/tui.test.mjs +0 -60
  146. package/tests/skills-routing.test.mjs +0 -51
  147. package/tests/task-integration.test.mjs +0 -324
  148. package/tests/task-permissions.test.mjs +0 -178
  149. package/tests/task-worktree-policy.test.mjs +0 -53
@@ -1,564 +0,0 @@
1
- # Managed Agents - Go
2
-
3
- > **Bindings not shown here:** This README covers the most common managed-agents flows for Go. If you need a class, method, namespace, field, or behavior that isn't shown, WebFetch the Go SDK repo **or the relevant docs page** from `shared/live-sources.md` rather than guess. Do not extrapolate from cURL shapes or another language's SDK.
4
-
5
- > **Agents are persistent - create once, reference by ID.** Store the agent ID returned by `agents.New` and pass it to every subsequent `sessions.New`; do not call `agents.New` in the request path. **Recommended:** define agents and environments as version-controlled YAML applied with the `ant` CLI - see `shared/anthropic-cli.md` (its live-docs URL is in `shared/live-sources.md`). The CLI owns the control plane (create/update); your code owns the data plane (sessions with the stored ID). The examples below show in-code creation for when you must provision programmatically; in production the create call belongs in setup, not in the request path.
6
-
7
- ## Installation
8
-
9
- ```bash
10
- go get github.com/anthropics/anthropic-sdk-go
11
- ```
12
-
13
- ## Client Initialization
14
-
15
- ```go
16
- import (
17
- "context"
18
-
19
- "github.com/anthropics/anthropic-sdk-go"
20
- "github.com/anthropics/anthropic-sdk-go/option"
21
- )
22
-
23
- // Default (uses ANTHROPIC_API_KEY env var)
24
- client := anthropic.NewClient()
25
-
26
- // Explicit API key
27
- client := anthropic.NewClient(
28
- option.WithAPIKey("your-api-key"),
29
- )
30
-
31
- ctx := context.Background()
32
- ```
33
-
34
- ---
35
-
36
- ## Create an Environment
37
-
38
- ```go
39
- environment, err := client.Beta.Environments.New(ctx, anthropic.BetaEnvironmentNewParams{
40
- Name: "my-dev-env",
41
- Config: anthropic.BetaEnvironmentNewParamsConfigUnion{
42
- OfCloud: &anthropic.BetaCloudConfigParams{
43
- Networking: anthropic.BetaCloudConfigParamsNetworkingUnion{
44
- OfUnrestricted: &anthropic.BetaUnrestrictedNetworkParam{},
45
- },
46
- },
47
- },
48
- })
49
- if err != nil {
50
- panic(err)
51
- }
52
- fmt.Println(environment.ID) // env_...
53
- ```
54
-
55
- ---
56
-
57
- ## Create an Agent (required first step)
58
-
59
- > Warning: **There is no inline agent config.** `Model`/`System`/`Tools` live on the agent object, not the session. Always start with `Beta.Agents.New()` - the session only takes `Agent: anthropic.BetaSessionNewParamsAgentUnion{OfString: anthropic.String(agent.ID)}` (or the typed `OfBetaManagedAgentsAgents` variant when you need a specific version).
60
-
61
- ### Minimal
62
-
63
- ```go
64
- // 1. Create the agent (reusable, versioned)
65
- agent, err := client.Beta.Agents.New(ctx, anthropic.BetaAgentNewParams{
66
- Name: "Coding Assistant",
67
- Model: anthropic.BetaManagedAgentsModelConfigParams{
68
- ID: "claude-opus-5",
69
- Type: anthropic.BetaManagedAgentsModelConfigParamsTypeModelConfig,
70
- },
71
- System: anthropic.String("You are a helpful coding assistant."),
72
- Tools: []anthropic.BetaAgentNewParamsToolUnion{{
73
- OfAgentToolset20260401: &anthropic.BetaManagedAgentsAgentToolset20260401Params{
74
- Type: anthropic.BetaManagedAgentsAgentToolset20260401ParamsTypeAgentToolset20260401,
75
- },
76
- }},
77
- })
78
- if err != nil {
79
- panic(err)
80
- }
81
-
82
- // 2. Start a session
83
- session, err := client.Beta.Sessions.New(ctx, anthropic.BetaSessionNewParams{
84
- Agent: anthropic.BetaSessionNewParamsAgentUnion{
85
- OfBetaManagedAgentsAgents: &anthropic.BetaManagedAgentsAgentParams{
86
- Type: anthropic.BetaManagedAgentsAgentParamsTypeAgent,
87
- ID: agent.ID,
88
- Version: anthropic.Int(agent.Version),
89
- },
90
- },
91
- EnvironmentID: environment.ID,
92
- Title: anthropic.String("Quickstart session"),
93
- })
94
- if err != nil {
95
- panic(err)
96
- }
97
- fmt.Printf("Session ID: %s, status: %s\n", session.ID, session.Status)
98
- fmt.Printf("Trace: https://platform.claude.com/workspaces/default/sessions/%s\n", session.ID) // swap 'default' for your workspace ID if the API key is not in the Default workspace
99
- ```
100
-
101
- ### Updating an Agent
102
-
103
- Updates create new versions; the agent object is immutable per version.
104
-
105
- ```go
106
- updatedAgent, err := client.Beta.Agents.Update(ctx, agent.ID, anthropic.BetaAgentUpdateParams{
107
- Version: agent.Version,
108
- System: anthropic.String("You are a helpful coding agent. Always write tests."),
109
- })
110
- if err != nil {
111
- panic(err)
112
- }
113
- fmt.Printf("New version: %d\n", updatedAgent.Version)
114
-
115
- // List all versions
116
- iter := client.Beta.Agents.Versions.ListAutoPaging(ctx, agent.ID, anthropic.BetaAgentVersionListParams{})
117
- for iter.Next() {
118
- version := iter.Current()
119
- fmt.Printf("Version %d: %s\n", version.Version, version.UpdatedAt.Format(time.RFC3339))
120
- }
121
- if err := iter.Err(); err != nil {
122
- panic(err)
123
- }
124
-
125
- // Archive the agent
126
- _, err = client.Beta.Agents.Archive(ctx, agent.ID, anthropic.BetaAgentArchiveParams{})
127
- if err != nil {
128
- panic(err)
129
- }
130
- ```
131
-
132
- ---
133
-
134
- ## Send a User Message
135
-
136
- ```go
137
- _, err = client.Beta.Sessions.Events.Send(ctx, session.ID, anthropic.BetaSessionEventSendParams{
138
- Events: []anthropic.BetaManagedAgentsEventParamsUnion{{
139
- OfUserMessage: &anthropic.BetaManagedAgentsUserMessageEventParams{
140
- Type: anthropic.BetaManagedAgentsUserMessageEventParamsTypeUserMessage,
141
- Content: []anthropic.BetaManagedAgentsUserMessageEventParamsContentUnion{{
142
- OfText: &anthropic.BetaManagedAgentsTextBlockParam{
143
- Type: anthropic.BetaManagedAgentsTextBlockTypeText,
144
- Text: "Review the auth module",
145
- },
146
- }},
147
- },
148
- }},
149
- })
150
- if err != nil {
151
- panic(err)
152
- }
153
- ```
154
-
155
- > Tip: **Stream-first:** Open the stream *before* (or concurrently with) sending the message. The stream only delivers events that occur after it opens - stream-after-send means early events arrive buffered in one batch. See [Steering Patterns](../../shared/managed-agents-events.md#steering-patterns).
156
-
157
- ---
158
-
159
- ## Stream Events (SSE)
160
-
161
- ```go
162
- // Open the stream first, then send the user message
163
- stream := client.Beta.Sessions.Events.StreamEvents(ctx, session.ID, anthropic.BetaSessionEventStreamParams{})
164
- defer stream.Close()
165
-
166
- if _, err := client.Beta.Sessions.Events.Send(ctx, session.ID, anthropic.BetaSessionEventSendParams{
167
- Events: []anthropic.BetaManagedAgentsEventParamsUnion{{
168
- OfUserMessage: &anthropic.BetaManagedAgentsUserMessageEventParams{
169
- Type: anthropic.BetaManagedAgentsUserMessageEventParamsTypeUserMessage,
170
- Content: []anthropic.BetaManagedAgentsUserMessageEventParamsContentUnion{{
171
- OfText: &anthropic.BetaManagedAgentsTextBlockParam{
172
- Type: anthropic.BetaManagedAgentsTextBlockTypeText,
173
- Text: "Summarize the repo README",
174
- },
175
- }},
176
- },
177
- }},
178
- }); err != nil {
179
- panic(err)
180
- }
181
-
182
- events:
183
- for stream.Next() {
184
- switch event := stream.Current().AsAny().(type) {
185
- case anthropic.BetaManagedAgentsAgentMessageEvent:
186
- for _, block := range event.Content {
187
- fmt.Print(block.Text)
188
- }
189
- case anthropic.BetaManagedAgentsAgentToolUseEvent:
190
- fmt.Printf("\n[Using tool: %s]\n", event.Name)
191
- case anthropic.BetaManagedAgentsSessionStatusIdleEvent:
192
- break events
193
- case anthropic.BetaManagedAgentsSessionErrorEvent:
194
- fmt.Printf("\n[Error: %s]\n", event.Error.Message)
195
- break events
196
- }
197
- }
198
- if err := stream.Err(); err != nil {
199
- panic(err)
200
- }
201
- ```
202
-
203
- ### Reconnecting and Tailing
204
-
205
- When reconnecting mid-session, list past events first to dedupe, then tail live events:
206
-
207
- ```go
208
- stream := client.Beta.Sessions.Events.StreamEvents(ctx, session.ID, anthropic.BetaSessionEventStreamParams{})
209
- defer stream.Close()
210
-
211
- // Stream is open and buffering. List history before tailing live.
212
- seenEventIDs := map[string]struct{}{}
213
- history := client.Beta.Sessions.Events.ListAutoPaging(ctx, session.ID, anthropic.BetaSessionEventListParams{})
214
- for history.Next() {
215
- seenEventIDs[history.Current().ID] = struct{}{}
216
- }
217
- if err := history.Err(); err != nil {
218
- panic(err)
219
- }
220
-
221
- // Tail live events, skipping anything already seen
222
- tail:
223
- for stream.Next() {
224
- event := stream.Current()
225
- if _, seen := seenEventIDs[event.ID]; seen {
226
- continue
227
- }
228
- seenEventIDs[event.ID] = struct{}{}
229
- switch event := event.AsAny().(type) {
230
- case anthropic.BetaManagedAgentsAgentMessageEvent:
231
- for _, block := range event.Content {
232
- fmt.Print(block.Text)
233
- }
234
- case anthropic.BetaManagedAgentsSessionStatusIdleEvent:
235
- break tail
236
- }
237
- }
238
- if err := stream.Err(); err != nil {
239
- panic(err)
240
- }
241
- ```
242
-
243
- ---
244
-
245
- ## Provide Custom Tool Result
246
-
247
- > Note: The Go managed-agents bindings for `user.custom_tool_result` are not yet documented in this skill or in the apps source examples. Refer to `shared/managed-agents-events.md` for the wire format and the `github.com/anthropics/anthropic-sdk-go` repository for the corresponding Go params types.
248
-
249
- ---
250
-
251
- ## Poll Events
252
-
253
- ```go
254
- // Auto-paginating iterator
255
- iter := client.Beta.Sessions.Events.ListAutoPaging(ctx, session.ID, anthropic.BetaSessionEventListParams{})
256
- for iter.Next() {
257
- event := iter.Current()
258
- fmt.Printf("%s: %s\n", event.Type, event.ID)
259
- }
260
- if err := iter.Err(); err != nil {
261
- panic(err)
262
- }
263
- ```
264
-
265
- ---
266
-
267
- ## Upload a File
268
-
269
- ```go
270
- csvFile, err := os.Open("data.csv")
271
- if err != nil {
272
- panic(err)
273
- }
274
- defer csvFile.Close()
275
-
276
- file, err := client.Beta.Files.Upload(ctx, anthropic.BetaFileUploadParams{
277
- File: csvFile,
278
- })
279
- if err != nil {
280
- panic(err)
281
- }
282
- fmt.Printf("File ID: %s\n", file.ID)
283
-
284
- // Mount in a session
285
- session, err := client.Beta.Sessions.New(ctx, anthropic.BetaSessionNewParams{
286
- Agent: anthropic.BetaSessionNewParamsAgentUnion{
287
- OfString: anthropic.String(agent.ID),
288
- },
289
- EnvironmentID: environment.ID,
290
- Resources: []anthropic.BetaSessionNewParamsResourceUnion{{
291
- OfFile: &anthropic.BetaManagedAgentsFileResourceParams{
292
- Type: anthropic.BetaManagedAgentsFileResourceParamsTypeFile,
293
- FileID: file.ID,
294
- MountPath: anthropic.String("/workspace/data.csv"),
295
- },
296
- }},
297
- })
298
- if err != nil {
299
- panic(err)
300
- }
301
- ```
302
-
303
- ### Add and Manage Resources on an Existing Session
304
-
305
- ```go
306
- // Attach an additional file to an open session
307
- resource, err := client.Beta.Sessions.Resources.Add(ctx, session.ID, anthropic.BetaSessionResourceAddParams{
308
- BetaManagedAgentsFileResourceParams: anthropic.BetaManagedAgentsFileResourceParams{
309
- Type: anthropic.BetaManagedAgentsFileResourceParamsTypeFile,
310
- FileID: file.ID,
311
- },
312
- })
313
- if err != nil {
314
- panic(err)
315
- }
316
- fmt.Println(resource.ID) // "sesrsc_01ABC..."
317
-
318
- // List resources on the session
319
- listed, err := client.Beta.Sessions.Resources.List(ctx, session.ID, anthropic.BetaSessionResourceListParams{})
320
- if err != nil {
321
- panic(err)
322
- }
323
- for _, entry := range listed.Data {
324
- fmt.Println(entry.ID, entry.Type)
325
- }
326
-
327
- // Detach a resource
328
- if _, err := client.Beta.Sessions.Resources.Delete(ctx, resource.ID, anthropic.BetaSessionResourceDeleteParams{
329
- SessionID: session.ID,
330
- }); err != nil {
331
- panic(err)
332
- }
333
- ```
334
-
335
- ---
336
-
337
- ## List and Download Session Files
338
-
339
- > Note: Listing and downloading files an agent wrote during a session is not yet documented for Go in this skill or in the apps source examples. See `shared/managed-agents-events.md` and the `github.com/anthropics/anthropic-sdk-go` repository for the `Beta.Files.List` and `Beta.Files.Download` Go params types.
340
-
341
- ---
342
-
343
- ## Session Management
344
-
345
- ```go
346
- // List environments
347
- environments, err := client.Beta.Environments.List(ctx, anthropic.BetaEnvironmentListParams{})
348
- if err != nil {
349
- panic(err)
350
- }
351
-
352
- // Retrieve a specific environment
353
- env, err := client.Beta.Environments.Get(ctx, environment.ID, anthropic.BetaEnvironmentGetParams{})
354
- if err != nil {
355
- panic(err)
356
- }
357
-
358
- // Archive an environment (read-only, existing sessions continue)
359
- _, err = client.Beta.Environments.Archive(ctx, environment.ID, anthropic.BetaEnvironmentArchiveParams{})
360
- if err != nil {
361
- panic(err)
362
- }
363
-
364
- // Delete an environment (only if no sessions reference it)
365
- _, err = client.Beta.Environments.Delete(ctx, environment.ID, anthropic.BetaEnvironmentDeleteParams{})
366
- if err != nil {
367
- panic(err)
368
- }
369
-
370
- // Delete a session
371
- _, err = client.Beta.Sessions.Delete(ctx, session.ID, anthropic.BetaSessionDeleteParams{})
372
- if err != nil {
373
- panic(err)
374
- }
375
- ```
376
-
377
- ---
378
-
379
- ## MCP Server Integration
380
-
381
- ```go
382
- // Agent declares MCP server (no auth here - auth goes in a vault)
383
- agent, err := client.Beta.Agents.New(ctx, anthropic.BetaAgentNewParams{
384
- Name: "GitHub Assistant",
385
- Model: anthropic.BetaManagedAgentsModelConfigParams{
386
- ID: "claude-opus-5",
387
- Type: anthropic.BetaManagedAgentsModelConfigParamsTypeModelConfig,
388
- },
389
- MCPServers: []anthropic.BetaManagedAgentsURLMCPServerParams{{
390
- Type: anthropic.BetaManagedAgentsURLMCPServerParamsTypeURL,
391
- Name: "github",
392
- URL: "https://api.githubcopilot.com/mcp/",
393
- }},
394
- Tools: []anthropic.BetaAgentNewParamsToolUnion{
395
- {
396
- OfAgentToolset20260401: &anthropic.BetaManagedAgentsAgentToolset20260401Params{
397
- Type: anthropic.BetaManagedAgentsAgentToolset20260401ParamsTypeAgentToolset20260401,
398
- },
399
- },
400
- {
401
- OfMCPToolset: &anthropic.BetaManagedAgentsMCPToolsetParams{
402
- Type: anthropic.BetaManagedAgentsMCPToolsetParamsTypeMCPToolset,
403
- MCPServerName: "github",
404
- },
405
- },
406
- },
407
- })
408
- if err != nil {
409
- panic(err)
410
- }
411
-
412
- // Session attaches vault(s) containing credentials for those MCP server URLs
413
- session, err := client.Beta.Sessions.New(ctx, anthropic.BetaSessionNewParams{
414
- Agent: anthropic.BetaSessionNewParamsAgentUnion{
415
- OfBetaManagedAgentsAgents: &anthropic.BetaManagedAgentsAgentParams{
416
- Type: anthropic.BetaManagedAgentsAgentParamsTypeAgent,
417
- ID: agent.ID,
418
- Version: anthropic.Int(agent.Version),
419
- },
420
- },
421
- EnvironmentID: environment.ID,
422
- VaultIDs: []string{vault.ID},
423
- })
424
- if err != nil {
425
- panic(err)
426
- }
427
- ```
428
-
429
- See `shared/managed-agents-tools.md` §Vaults for creating vaults and adding credentials.
430
-
431
- ---
432
-
433
- ## Vaults
434
-
435
- ```go
436
- // Create a vault
437
- vault, err := client.Beta.Vaults.New(ctx, anthropic.BetaVaultNewParams{
438
- DisplayName: "Alice",
439
- Metadata: map[string]string{"external_user_id": "usr_abc123"},
440
- })
441
- if err != nil {
442
- panic(err)
443
- }
444
-
445
- // Add an OAuth credential
446
- credential, err := client.Beta.Vaults.Credentials.New(ctx, vault.ID, anthropic.BetaVaultCredentialNewParams{
447
- DisplayName: anthropic.String("Alice's Slack"),
448
- Auth: anthropic.BetaVaultCredentialNewParamsAuthUnion{
449
- OfMCPOAuth: &anthropic.BetaManagedAgentsMCPOAuthCreateParams{
450
- Type: anthropic.BetaManagedAgentsMCPOAuthCreateParamsTypeMCPOAuth,
451
- MCPServerURL: "https://mcp.slack.com/mcp",
452
- AccessToken: "xoxp-...",
453
- ExpiresAt: anthropic.Time(time.Date(2026, time.April, 15, 0, 0, 0, 0, time.UTC)),
454
- Refresh: anthropic.BetaManagedAgentsMCPOAuthRefreshParams{
455
- TokenEndpoint: "https://slack.com/api/oauth.v2.access",
456
- ClientID: "1234567890.0987654321",
457
- Scope: anthropic.String("channels:read chat:write"),
458
- RefreshToken: "xoxe-1-...",
459
- TokenEndpointAuth: anthropic.BetaManagedAgentsMCPOAuthRefreshParamsTokenEndpointAuthUnion{
460
- OfClientSecretPost: &anthropic.BetaManagedAgentsTokenEndpointAuthPostParam{
461
- Type: anthropic.BetaManagedAgentsTokenEndpointAuthPostParamTypeClientSecretPost,
462
- ClientSecret: "abc123...",
463
- },
464
- },
465
- },
466
- },
467
- },
468
- })
469
- if err != nil {
470
- panic(err)
471
- }
472
-
473
- // Rotate the credential (e.g., after a token refresh)
474
- _, err = client.Beta.Vaults.Credentials.Update(ctx, credential.ID, anthropic.BetaVaultCredentialUpdateParams{
475
- VaultID: vault.ID,
476
- Auth: anthropic.BetaVaultCredentialUpdateParamsAuthUnion{
477
- OfMCPOAuth: &anthropic.BetaManagedAgentsMCPOAuthUpdateParams{
478
- Type: anthropic.BetaManagedAgentsMCPOAuthUpdateParamsTypeMCPOAuth,
479
- AccessToken: anthropic.String("xoxp-new-..."),
480
- ExpiresAt: anthropic.Time(time.Date(2026, time.May, 15, 0, 0, 0, 0, time.UTC)),
481
- Refresh: anthropic.BetaManagedAgentsMCPOAuthRefreshUpdateParams{
482
- RefreshToken: anthropic.String("xoxe-1-new-..."),
483
- },
484
- },
485
- },
486
- })
487
- if err != nil {
488
- panic(err)
489
- }
490
-
491
- // Archive a vault
492
- _, err = client.Beta.Vaults.Archive(ctx, vault.ID, anthropic.BetaVaultArchiveParams{})
493
- if err != nil {
494
- panic(err)
495
- }
496
- ```
497
-
498
- ---
499
-
500
- ## GitHub Repository Integration
501
-
502
- Mount a GitHub repository as a session resource (a vault holds the GitHub MCP credential):
503
-
504
- ```go
505
- session, err := client.Beta.Sessions.New(ctx, anthropic.BetaSessionNewParams{
506
- Agent: anthropic.BetaSessionNewParamsAgentUnion{OfString: anthropic.String(agent.ID)},
507
- EnvironmentID: environment.ID,
508
- VaultIDs: []string{vault.ID},
509
- Resources: []anthropic.BetaSessionNewParamsResourceUnion{
510
- {
511
- OfGitHubRepository: &anthropic.BetaManagedAgentsGitHubRepositoryResourceParams{
512
- Type: anthropic.BetaManagedAgentsGitHubRepositoryResourceParamsTypeGitHubRepository,
513
- URL: "https://github.com/org/repo",
514
- MountPath: anthropic.String("/workspace/repo"),
515
- AuthorizationToken: "ghp_your_github_token",
516
- },
517
- },
518
- },
519
- })
520
- if err != nil {
521
- panic(err)
522
- }
523
- ```
524
-
525
- Multiple repositories on the same session:
526
-
527
- ```go
528
- resources := []anthropic.BetaSessionNewParamsResourceUnion{
529
- {
530
- OfGitHubRepository: &anthropic.BetaManagedAgentsGitHubRepositoryResourceParams{
531
- Type: anthropic.BetaManagedAgentsGitHubRepositoryResourceParamsTypeGitHubRepository,
532
- URL: "https://github.com/org/frontend",
533
- MountPath: anthropic.String("/workspace/frontend"),
534
- AuthorizationToken: "ghp_your_github_token",
535
- },
536
- },
537
- {
538
- OfGitHubRepository: &anthropic.BetaManagedAgentsGitHubRepositoryResourceParams{
539
- Type: anthropic.BetaManagedAgentsGitHubRepositoryResourceParamsTypeGitHubRepository,
540
- URL: "https://github.com/org/backend",
541
- MountPath: anthropic.String("/workspace/backend"),
542
- AuthorizationToken: "ghp_your_github_token",
543
- },
544
- },
545
- }
546
- ```
547
-
548
- Rotating a repository's authorization token:
549
-
550
- ```go
551
- listed, err := client.Beta.Sessions.Resources.List(ctx, session.ID, anthropic.BetaSessionResourceListParams{})
552
- if err != nil {
553
- panic(err)
554
- }
555
- repoResourceID := listed.Data[0].ID
556
-
557
- _, err = client.Beta.Sessions.Resources.Update(ctx, repoResourceID, anthropic.BetaSessionResourceUpdateParams{
558
- SessionID: session.ID,
559
- AuthorizationToken: "ghp_your_new_github_token",
560
- })
561
- if err != nil {
562
- panic(err)
563
- }
564
- ```