@preapexis/piexis 0.1.2 → 0.2.4

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 (154) hide show
  1. package/.github/workflows/publish.yml +35 -0
  2. package/AGENTS.md +21 -41
  3. package/README.md +75 -142
  4. package/extensions/agents.ts +205 -0
  5. package/extensions/ask-question.ts +54 -95
  6. package/extensions/recommended-tools.ts +62 -0
  7. package/extensions/ui.ts +204 -58
  8. package/lib/agent-config.ts +55 -0
  9. package/lib/agents.ts +208 -0
  10. package/lib/question-model.ts +98 -0
  11. package/lib/question-ui.ts +214 -0
  12. package/lib/recommended-tools.ts +119 -0
  13. package/lib/subagent-runner.ts +146 -0
  14. package/lib/ui-tips.json +41 -0
  15. package/package.json +9 -12
  16. package/prompts/init.md +10 -2
  17. package/prompts/summary.md +7 -6
  18. package/schemas/agent.schema.json +48 -0
  19. package/scripts/release.mjs +32 -0
  20. package/skills/{claude-api/LICENSE.txt → caveman/LICENSE} +2 -2
  21. package/skills/caveman/LICENSE-MIT +21 -0
  22. package/skills/caveman/NOTICE +10 -0
  23. package/skills/caveman/SKILL.md +89 -0
  24. package/skills/find-skills/SKILL.md +141 -0
  25. package/skills/ponytail/LICENSE +21 -0
  26. package/skills/ponytail/NOTICE +9 -0
  27. package/skills/ponytail/SKILL.md +52 -0
  28. package/skills-lock.json +6 -0
  29. package/tests/agents.test.mjs +605 -0
  30. package/tests/ask-question-pty.test.mjs +16 -0
  31. package/tests/ask-question.test.mjs +269 -0
  32. package/tests/fixtures/agents-provider.ts +55 -0
  33. package/tests/fixtures/ask-question-pty.py +91 -0
  34. package/tests/fixtures/ask-question-terminal.mjs +69 -0
  35. package/tests/fixtures/recommended-tools-terminal.mjs +103 -0
  36. package/tests/init-workflow.test.mjs +31 -0
  37. package/tests/recommended-tools-pty.test.mjs +16 -0
  38. package/tests/recommended-tools.test.mjs +423 -0
  39. package/tests/resources.test.mjs +66 -0
  40. package/tests/skills-routing.test.mjs +7 -4
  41. package/tests/ui-tip-reload.test.mjs +70 -0
  42. package/tests/ui.test.mjs +450 -0
  43. package/tsconfig.json +1 -0
  44. package/.github/workflows/npm-publish.yml +0 -63
  45. package/PERMISSION_MODES_PLAN.md +0 -279
  46. package/WHAT_YOU_GET.md +0 -153
  47. package/eval/README.md +0 -72
  48. package/eval/permission-cases.json +0 -28
  49. package/eval/permissions.mjs +0 -103
  50. package/extensions/background-tasks.ts +0 -433
  51. package/extensions/background-worker.ts +0 -50
  52. package/extensions/glob.ts +0 -32
  53. package/extensions/mode.ts +0 -397
  54. package/lib/bash-approvals.ts +0 -113
  55. package/lib/bash-policy.ts +0 -164
  56. package/lib/mode-policy.ts +0 -174
  57. package/lib/path-policy.ts +0 -182
  58. package/lib/permission-classifier.ts +0 -128
  59. package/lib/permission-config.ts +0 -91
  60. package/lib/permission-denials.ts +0 -32
  61. package/lib/permission-intent.ts +0 -128
  62. package/lib/permission-taxonomy.ts +0 -15
  63. package/lib/task-broker.ts +0 -65
  64. package/lib/task-checkout.ts +0 -39
  65. package/lib/task-git.ts +0 -44
  66. package/lib/task-patch.ts +0 -106
  67. package/lib/task-permissions.ts +0 -51
  68. package/lib/task-report.ts +0 -62
  69. package/lib/task-worktree-policy.ts +0 -56
  70. package/skills/claude-api/SKILL.md +0 -572
  71. package/skills/claude-api/csharp/claude-api/README.md +0 -362
  72. package/skills/claude-api/csharp/claude-api/batches.md +0 -14
  73. package/skills/claude-api/csharp/claude-api/files-api.md +0 -25
  74. package/skills/claude-api/csharp/claude-api/streaming.md +0 -28
  75. package/skills/claude-api/csharp/claude-api/tool-use.md +0 -164
  76. package/skills/claude-api/curl/examples.md +0 -256
  77. package/skills/claude-api/curl/managed-agents.md +0 -371
  78. package/skills/claude-api/go/claude-api/README.md +0 -188
  79. package/skills/claude-api/go/claude-api/files-api.md +0 -23
  80. package/skills/claude-api/go/claude-api/streaming.md +0 -43
  81. package/skills/claude-api/go/claude-api/tool-use.md +0 -220
  82. package/skills/claude-api/go/managed-agents/README.md +0 -564
  83. package/skills/claude-api/java/claude-api/README.md +0 -238
  84. package/skills/claude-api/java/claude-api/files-api.md +0 -27
  85. package/skills/claude-api/java/claude-api/streaming.md +0 -24
  86. package/skills/claude-api/java/claude-api/tool-use.md +0 -228
  87. package/skills/claude-api/java/managed-agents/README.md +0 -443
  88. package/skills/claude-api/php/claude-api/README.md +0 -174
  89. package/skills/claude-api/php/claude-api/batches.md +0 -15
  90. package/skills/claude-api/php/claude-api/files-api.md +0 -13
  91. package/skills/claude-api/php/claude-api/streaming.md +0 -27
  92. package/skills/claude-api/php/claude-api/tool-use.md +0 -253
  93. package/skills/claude-api/php/managed-agents/README.md +0 -443
  94. package/skills/claude-api/python/claude-api/README.md +0 -565
  95. package/skills/claude-api/python/claude-api/batches.md +0 -198
  96. package/skills/claude-api/python/claude-api/files-api.md +0 -170
  97. package/skills/claude-api/python/claude-api/sdk-upgrade.md +0 -286
  98. package/skills/claude-api/python/claude-api/streaming.md +0 -179
  99. package/skills/claude-api/python/claude-api/tool-use.md +0 -627
  100. package/skills/claude-api/python/managed-agents/README.md +0 -335
  101. package/skills/claude-api/ruby/claude-api/README.md +0 -134
  102. package/skills/claude-api/ruby/claude-api/streaming.md +0 -16
  103. package/skills/claude-api/ruby/claude-api/tool-use.md +0 -41
  104. package/skills/claude-api/ruby/managed-agents/README.md +0 -394
  105. package/skills/claude-api/shared/admin-api.md +0 -179
  106. package/skills/claude-api/shared/agent-design.md +0 -101
  107. package/skills/claude-api/shared/anthropic-cli.md +0 -269
  108. package/skills/claude-api/shared/claude-platform-on-aws.md +0 -59
  109. package/skills/claude-api/shared/cost-optimization.md +0 -233
  110. package/skills/claude-api/shared/error-codes.md +0 -262
  111. package/skills/claude-api/shared/live-sources.md +0 -166
  112. package/skills/claude-api/shared/managed-agents-api-reference.md +0 -455
  113. package/skills/claude-api/shared/managed-agents-client-patterns.md +0 -220
  114. package/skills/claude-api/shared/managed-agents-core.md +0 -359
  115. package/skills/claude-api/shared/managed-agents-environments.md +0 -226
  116. package/skills/claude-api/shared/managed-agents-events.md +0 -290
  117. package/skills/claude-api/shared/managed-agents-memory.md +0 -201
  118. package/skills/claude-api/shared/managed-agents-multiagent.md +0 -260
  119. package/skills/claude-api/shared/managed-agents-onboarding.md +0 -82
  120. package/skills/claude-api/shared/managed-agents-outcomes.md +0 -108
  121. package/skills/claude-api/shared/managed-agents-overview.md +0 -77
  122. package/skills/claude-api/shared/managed-agents-scheduled-deployments.md +0 -156
  123. package/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +0 -282
  124. package/skills/claude-api/shared/managed-agents-tools.md +0 -504
  125. package/skills/claude-api/shared/managed-agents-webhooks.md +0 -143
  126. package/skills/claude-api/shared/model-migration.md +0 -1872
  127. package/skills/claude-api/shared/models.md +0 -142
  128. package/skills/claude-api/shared/platform-availability.md +0 -53
  129. package/skills/claude-api/shared/prompt-audit.md +0 -223
  130. package/skills/claude-api/shared/prompt-caching.md +0 -292
  131. package/skills/claude-api/shared/token-counting.md +0 -56
  132. package/skills/claude-api/shared/tool-use-concepts.md +0 -526
  133. package/skills/claude-api/typescript/claude-api/README.md +0 -405
  134. package/skills/claude-api/typescript/claude-api/batches.md +0 -106
  135. package/skills/claude-api/typescript/claude-api/files-api.md +0 -98
  136. package/skills/claude-api/typescript/claude-api/streaming.md +0 -178
  137. package/skills/claude-api/typescript/claude-api/tool-use.md +0 -586
  138. package/skills/claude-api/typescript/managed-agents/README.md +0 -359
  139. package/tests/auto-permissions.test.mjs +0 -315
  140. package/tests/background-tasks.test.mjs +0 -27
  141. package/tests/background-worker.test.mjs +0 -60
  142. package/tests/bash-permissions.test.mjs +0 -276
  143. package/tests/glob.test.mjs +0 -31
  144. package/tests/mode.test.mjs +0 -62
  145. package/tests/permission-evaluation.test.mjs +0 -70
  146. package/tests/permission-foundation.test.mjs +0 -194
  147. package/tests/permission-policy.test.mjs +0 -158
  148. package/tests/runtime/README.md +0 -51
  149. package/tests/runtime/harness.mjs +0 -190
  150. package/tests/runtime/permissions.test.mjs +0 -192
  151. package/tests/runtime/tui.test.mjs +0 -60
  152. package/tests/task-integration.test.mjs +0 -324
  153. package/tests/task-permissions.test.mjs +0 -178
  154. 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
- ```