@agentuity/skills 3.1.1

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/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # @agentuity/skills
2
+
3
+ Official [Agent Skills](https://agentskills.io/) for AI coding agents working with the Agentuity SDK.
4
+
5
+ Skills ship inside this npm package under `skills/` and are discovered by [skills-npm](https://github.com/antfu/skills-npm) when installed as a project dependency.
6
+
7
+ ## Skills
8
+
9
+ | Skill | Description |
10
+ |-------|-------------|
11
+ | **agentuity-project** | Create, import, run, build, and deploy framework apps |
12
+ | **agentuity-frameworks** | Put routes, pages, server functions, config, and service clients in framework-native files |
13
+ | **agentuity-ai** | Build model-backed features with AI Gateway, structured output, streaming, tools, and app-owned state |
14
+ | **agentuity-services** | Choose and use Agentuity service clients from server-side app code |
15
+ | **agentuity-database** | Use Agentuity-managed Postgres through `DATABASE_URL`, `pg`, Drizzle, or trusted admin scripts |
16
+ | **agentuity-background-work** | Add queues, schedules, webhooks, tasks, durable output, and status handles |
17
+ | **agentuity-cloud** | Manage deployments, logs, env, regions, resources, SSH, and debugging through the CLI |
18
+ | **agentuity-cli** | Use CLI auth, profiles, JSON, schemas, structured input, and command discovery |
19
+
20
+ ## Install (npm)
21
+
22
+ ```bash
23
+ npm i -D @agentuity/skills skills-npm
24
+ npx skills-npm setup
25
+ ```
26
+
27
+ Or use the Agentuity CLI in an existing project:
28
+
29
+ ```bash
30
+ agentuity skills install
31
+ ```
32
+
33
+ New Agentuity projects scaffold with skills wiring enabled by default.
34
+
35
+ ## Install (Git registry)
36
+
37
+ ```bash
38
+ npx skills add agentuity/sdk/skills
39
+ npx skills add agentuity/sdk/skills --skill agentuity-ai
40
+ npx skills add agentuity/sdk/skills -a cursor
41
+ ```
42
+
43
+ The repo-root [`skills/`](../../skills/) directory is synced from this package on release.
44
+
45
+ ## Claude Code plugin
46
+
47
+ Deployment-opinionated skills for Claude Code ship separately in `@agentuity/claude-code` — not in this package.
48
+
49
+ ## License
50
+
51
+ Apache-2.0
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@agentuity/skills",
3
+ "version": "3.1.1",
4
+ "license": "Apache-2.0",
5
+ "author": "Agentuity",
6
+ "description": "Agent Skills for AI coding agents working with the Agentuity SDK",
7
+ "type": "module",
8
+ "agentuity": {
9
+ "sourceOnly": true
10
+ },
11
+ "files": [
12
+ "README.md",
13
+ "skills"
14
+ ],
15
+ "scripts": {
16
+ "prepublishOnly": "bun ./scripts/sync-root-skills.ts",
17
+ "sync:root": "bun ./scripts/sync-root-skills.ts"
18
+ },
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "sideEffects": false,
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/agentuity/sdk.git",
26
+ "directory": "packages/skills"
27
+ }
28
+ }
@@ -0,0 +1,204 @@
1
+ ---
2
+ name: agentuity-ai
3
+ description: >-
4
+ Use when building model-backed Agentuity features, AI routes, structured
5
+ output, chat, streaming, tool calling, or app-owned state and memory. Covers
6
+ plain server functions, AIGatewayClient, provider SDK choices, validation,
7
+ KV-backed history, and safe tool execution.
8
+ license: Apache-2.0
9
+ metadata:
10
+ author: agentuity
11
+ version: "1.0.0"
12
+ ---
13
+
14
+ # Agentuity AI Features
15
+
16
+ An Agentuity agent is model-backed app code with a clear task. Put the task in a
17
+ plain server-side function, validate its inputs and outputs, then call it from
18
+ the framework route, worker, schedule, script, or queue handler that owns the
19
+ trigger.
20
+
21
+ ## Minimal Shape
22
+
23
+ ```bash
24
+ npm install @agentuity/aigateway @agentuity/keyvalue zod
25
+ ```
26
+
27
+ ```typescript
28
+ import { AIGatewayClient } from '@agentuity/aigateway';
29
+ import { KeyValueClient } from '@agentuity/keyvalue';
30
+ import { z } from 'zod';
31
+
32
+ const gateway = new AIGatewayClient();
33
+ const kv = new KeyValueClient();
34
+ const TRIAGE_MODEL = 'googleai/gemini-3-flash-preview';
35
+
36
+ const triageSchema = z.object({
37
+ priority: z.enum(['low', 'normal', 'high']),
38
+ summary: z.string(),
39
+ });
40
+
41
+ type TriageResult = z.infer<typeof triageSchema>;
42
+
43
+ export async function triageMessage(
44
+ customerId: string,
45
+ message: string
46
+ ): Promise<TriageResult> {
47
+ const previous = await kv.get<TriageResult>('support-triage', customerId);
48
+
49
+ const { data } = await gateway.completeStructured({
50
+ model: TRIAGE_MODEL,
51
+ messages: [
52
+ {
53
+ role: 'system',
54
+ content: 'Classify support messages for a product engineering team.',
55
+ },
56
+ {
57
+ role: 'user',
58
+ content: [
59
+ `Customer message: ${message}`,
60
+ previous.exists ? `Previous summary: ${previous.data.summary}` : '',
61
+ ].filter(Boolean).join('\n\n'),
62
+ },
63
+ ],
64
+ response_schema: {
65
+ name: 'triage_result',
66
+ schema: triageSchema,
67
+ },
68
+ });
69
+
70
+ const output = triageSchema.parse(data);
71
+ await kv.set('support-triage', customerId, output, { ttl: 60 * 60 * 24 * 30 });
72
+ return output;
73
+ }
74
+ ```
75
+
76
+ Keep the route thin:
77
+
78
+ ```typescript
79
+ import { triageMessage } from '@/lib/triage';
80
+ import { z } from 'zod';
81
+
82
+ const inputSchema = z.object({
83
+ customerId: z.string(),
84
+ message: z.string(),
85
+ });
86
+
87
+ export async function POST(request: Request): Promise<Response> {
88
+ const input = inputSchema.parse(await request.json());
89
+ const result = await triageMessage(input.customerId, input.message);
90
+ return Response.json(result);
91
+ }
92
+ ```
93
+
94
+ ## Model Choice
95
+
96
+ Use the live Gateway catalog before hardcoding model IDs:
97
+
98
+ ```bash
99
+ agentuity cloud aigateway models --recommended
100
+ agentuity cloud aigateway models --ids
101
+ agentuity cloud aigateway models --provider openai
102
+ ```
103
+
104
+ Use `AIGatewayClient` when model choice should be project configuration. Use a
105
+ provider SDK or AI SDK provider when the feature depends on provider-specific
106
+ APIs.
107
+
108
+ | Need | Use |
109
+ |---|---|
110
+ | Plain text response | `gateway.completeText()` |
111
+ | Provider-agnostic JSON | `gateway.completeStructured()` plus validation |
112
+ | Raw provider-shaped response | `gateway.complete()` |
113
+ | SSE passthrough | `gateway.streamRequest()` |
114
+ | Automatic tool loop | AI SDK or provider SDK |
115
+
116
+ `AIGatewayClient` reads Agentuity project credentials from the environment. The
117
+ model ID is app config, not an extra secret.
118
+
119
+ ## Chat and Streaming
120
+
121
+ Use streaming when users should see output as it arrives. Store chat state
122
+ explicitly, usually after the stream completes:
123
+
124
+ ```typescript
125
+ import { AIGatewayClient } from '@agentuity/aigateway';
126
+ import { KeyValueClient } from '@agentuity/keyvalue';
127
+
128
+ interface ChatMessage {
129
+ role: 'user' | 'assistant';
130
+ content: string;
131
+ }
132
+
133
+ const gateway = new AIGatewayClient();
134
+ const kv = new KeyValueClient();
135
+ const DEFAULT_MODEL = 'deepseek/deepseek-v4-flash';
136
+
137
+ export async function streamChat(
138
+ conversationId: string,
139
+ message: string
140
+ ): Promise<Response> {
141
+ const stored = await kv.get<ChatMessage[]>('chat-history', conversationId);
142
+ const history = stored.exists ? stored.data : [];
143
+ const next = [...history, { role: 'user' as const, content: message }];
144
+
145
+ const { stream } = await gateway.streamRequest({
146
+ path: '/',
147
+ body: { model: DEFAULT_MODEL, stream: true, messages: next },
148
+ });
149
+
150
+ return new Response(stream, {
151
+ headers: { 'content-type': 'text/event-stream' },
152
+ });
153
+ }
154
+ ```
155
+
156
+ If you need to persist the assistant turn, tee the stream and parse the copy in a
157
+ background promise owned by your route or worker.
158
+
159
+ ## Tools
160
+
161
+ Tools should be bounded app functions:
162
+
163
+ | Good tool | Avoid |
164
+ |---|---|
165
+ | Read one KV or database record | Broad unbounded scans |
166
+ | Create a small task or enqueue a job | Long-running work inside the model call |
167
+ | Return compact typed data | Returning huge files or transcripts |
168
+ | Propose a risky action for approval | Irreversible side effects without a gate |
169
+
170
+ Use an idempotency key or stored approval record for side effects. Never let a
171
+ model directly execute irreversible work without an app-owned decision boundary.
172
+
173
+ ## State and Memory
174
+
175
+ State belongs to the app:
176
+
177
+ | State need | Store |
178
+ |---|---|
179
+ | Browser session identity | Signed cookie or auth session |
180
+ | Compact memory or preferences | Key-Value Storage |
181
+ | Relational user data | Database |
182
+ | Generated files or transcripts | Durable Streams or Object Storage |
183
+ | Async job status | KV status record plus Queue |
184
+
185
+ Validate data when reading from KV or databases. Old records, manual test data,
186
+ and partial writes are normal production boundaries.
187
+
188
+ ## Common Mistakes
189
+
190
+ | Mistake | Better approach |
191
+ |---|---|
192
+ | Putting model calls directly in UI components | Call a server route or server function |
193
+ | Trusting structured model data as typed | Validate with Zod, Valibot, ArkType, or another schema library |
194
+ | Storing full transcripts in KV forever | Store summaries or pointers; use DB or durable streams for large data |
195
+ | Running long jobs inside a request | Enqueue work and return a status handle |
196
+ | Hardcoding an unverified model ID | Read the Gateway catalog first |
197
+
198
+ ## Useful Docs
199
+
200
+ - Agents: https://agentuity.dev/build/agents
201
+ - AI Gateway: https://agentuity.dev/services/ai-gateway
202
+ - Chat and streaming: https://agentuity.dev/build/agents/chat-and-streaming
203
+ - Tool calling: https://agentuity.dev/build/agents/tool-calling
204
+ - State and memory: https://agentuity.dev/build/agents/state-and-memory
@@ -0,0 +1,225 @@
1
+ ---
2
+ name: agentuity-background-work
3
+ description: >-
4
+ Use when adding async jobs, queue workers, cron schedules, webhook ingestion,
5
+ task tracking, long-running workflows, status polling, durable output, or
6
+ idempotent background processing to an Agentuity app.
7
+ license: Apache-2.0
8
+ metadata:
9
+ author: agentuity
10
+ version: "1.0.0"
11
+ ---
12
+
13
+ # Agentuity Background Work
14
+
15
+ Use background work when a request starts something slow: report generation,
16
+ webhook fan-out, email preparation, model evaluation, file processing, or
17
+ external API retries. The common pattern is: enqueue work, return a handle,
18
+ process asynchronously, and expose status.
19
+
20
+ ## Choose the Work Boundary
21
+
22
+ | Need | Use |
23
+ |---|---|
24
+ | Async message handoff to a worker route | Queue |
25
+ | Cron-style recurring call | Schedule |
26
+ | External event ingestion | Webhook |
27
+ | Human or agent-visible work item | Task |
28
+ | Generated output that should survive the request | Durable Stream or Object Storage |
29
+ | Bounded command execution | Sandbox |
30
+ | Status for a client to poll | Key-Value Storage or database |
31
+
32
+ Use sandbox execution for bounded commands or coding-agent runtimes. Do not use
33
+ sandbox as the default replacement for queues, schedules, or webhooks.
34
+
35
+ ## Request, Worker, Status
36
+
37
+ ```bash
38
+ npm install @agentuity/queue @agentuity/keyvalue @agentuity/stream zod
39
+ ```
40
+
41
+ ```typescript
42
+ import { QueueClient } from '@agentuity/queue';
43
+ import { KeyValueClient } from '@agentuity/keyvalue';
44
+ import { StreamClient } from '@agentuity/stream';
45
+ import { z } from 'zod';
46
+
47
+ const queue = new QueueClient();
48
+ const kv = new KeyValueClient();
49
+ const streams = new StreamClient();
50
+
51
+ const requestSchema = z.object({
52
+ accountId: z.string(),
53
+ reportMonth: z.string(),
54
+ });
55
+
56
+ const jobSchema = requestSchema.extend({
57
+ jobId: z.string(),
58
+ });
59
+
60
+ type ReportJob = z.infer<typeof jobSchema>;
61
+
62
+ type ReportStatus =
63
+ | { readonly kind: 'queued'; readonly messageId: string }
64
+ | { readonly kind: 'processing' }
65
+ | { readonly kind: 'done'; readonly streamUrl: string }
66
+ | { readonly kind: 'failed'; readonly message: string };
67
+ ```
68
+
69
+ Request route:
70
+
71
+ ```typescript
72
+ export async function POST(request: Request): Promise<Response> {
73
+ const input = requestSchema.parse(await request.json());
74
+ const jobId = crypto.randomUUID();
75
+ const job: ReportJob = { jobId, ...input };
76
+
77
+ const message = await queue.publish('report-jobs', job, {
78
+ idempotencyKey: jobId,
79
+ });
80
+
81
+ await kv.set<ReportStatus>('report-status', jobId, {
82
+ kind: 'queued',
83
+ messageId: message.id,
84
+ });
85
+
86
+ return Response.json({ jobId, statusUrl: `/api/reports/${jobId}` }, { status: 202 });
87
+ }
88
+ ```
89
+
90
+ Status route:
91
+
92
+ ```typescript
93
+ export async function getReportStatus(jobId: string): Promise<Response> {
94
+ const result = await kv.get<ReportStatus>('report-status', jobId);
95
+
96
+ if (!result.exists) {
97
+ return Response.json({ error: 'Report job not found' }, { status: 404 });
98
+ }
99
+
100
+ return Response.json(result.data);
101
+ }
102
+ ```
103
+
104
+ Worker function:
105
+
106
+ ```typescript
107
+ export async function processReportJob(body: unknown): Promise<Response> {
108
+ const job = jobSchema.parse(body);
109
+
110
+ await kv.set<ReportStatus>('report-status', job.jobId, { kind: 'processing' });
111
+
112
+ try {
113
+ const stream = await streams.create('monthly-reports', {
114
+ contentType: 'text/csv',
115
+ metadata: {
116
+ accountId: job.accountId,
117
+ reportMonth: job.reportMonth,
118
+ },
119
+ ttl: 60 * 60 * 24 * 90,
120
+ });
121
+
122
+ try {
123
+ await stream.write('account_id,report_month,total\n');
124
+ await stream.write(`${job.accountId},${job.reportMonth},42817\n`);
125
+ } finally {
126
+ await stream.close();
127
+ }
128
+
129
+ await kv.set<ReportStatus>('report-status', job.jobId, {
130
+ kind: 'done',
131
+ streamUrl: stream.url,
132
+ });
133
+
134
+ return Response.json({ ok: true });
135
+ } catch (error) {
136
+ await kv.set<ReportStatus>('report-status', job.jobId, {
137
+ kind: 'failed',
138
+ message: error instanceof Error ? error.message : 'Report generation failed',
139
+ });
140
+
141
+ return Response.json({ ok: false }, { status: 500 });
142
+ }
143
+ }
144
+ ```
145
+
146
+ ## Queue Destinations
147
+
148
+ Create the queue and HTTP destination from the CLI:
149
+
150
+ ```bash
151
+ agentuity cloud queue create report-jobs --max-retries 3 --visibility-timeout 120
152
+ agentuity cloud queue destinations create report-jobs \
153
+ --type http \
154
+ --name report-worker \
155
+ --url https://<your-app-host>/api/workers/report-jobs
156
+ ```
157
+
158
+ The platform only calls your worker route when a destination points at a
159
+ reachable public URL. `localhost` is not reachable from the queue service; use a
160
+ public tunnel during local testing or the deployed app URL.
161
+
162
+ ## Schedules
163
+
164
+ Use schedules for recurring HTTP calls or sandbox destinations:
165
+
166
+ ```bash
167
+ agentuity cloud schedule create nightly-report \
168
+ --cron "0 2 * * *" \
169
+ --url https://<your-app-host>/api/workers/nightly-report
170
+ ```
171
+
172
+ Keep schedule handlers idempotent. A retry should not duplicate emails, charges, or external writes.
173
+
174
+ ## Webhooks
175
+
176
+ Use webhooks for external event ingestion. Validate signatures or shared secrets
177
+ in the route before publishing follow-up work to a queue.
178
+
179
+ ```typescript
180
+ export async function handleWebhook(request: Request): Promise<Response> {
181
+ const event = await request.json();
182
+ const eventId = String(event.id ?? crypto.randomUUID());
183
+
184
+ await queue.publish('webhook-events', event, {
185
+ idempotencyKey: eventId,
186
+ });
187
+
188
+ return Response.json({ accepted: true }, { status: 202 });
189
+ }
190
+ ```
191
+
192
+ ## Tasks
193
+
194
+ Use tasks when work should be visible as a trackable item for humans or agentic tools:
195
+
196
+ ```typescript
197
+ import { TaskClient } from '@agentuity/task';
198
+
199
+ const tasks = new TaskClient();
200
+
201
+ await tasks.create({
202
+ title: 'Review monthly report',
203
+ description: 'Validate generated totals before customer delivery.',
204
+ tags: ['reporting'],
205
+ });
206
+ ```
207
+
208
+ ## Common Mistakes
209
+
210
+ | Mistake | Better approach |
211
+ |---|---|
212
+ | Doing slow work before responding to the user | Enqueue and return `202 Accepted` with a status URL |
213
+ | Publishing without an idempotency key | Use a stable job ID or upstream event ID |
214
+ | Assuming queue workers can call `localhost` | Configure a public tunnel or deployed app URL |
215
+ | Losing job status after retries | Persist status after each durable step |
216
+ | Using one queue for unrelated workloads | Separate queues by retry policy and destination |
217
+
218
+ ## Useful Docs
219
+
220
+ - Background work: https://agentuity.dev/build/apps-and-apis/background-work
221
+ - Queues: https://agentuity.dev/services/queues
222
+ - Schedules: https://agentuity.dev/services/schedules
223
+ - Webhooks: https://agentuity.dev/services/webhooks
224
+ - Tasks: https://agentuity.dev/services/tasks
225
+ - Durable Streams: https://agentuity.dev/services/storage/durable-streams
@@ -0,0 +1,177 @@
1
+ ---
2
+ name: agentuity-cli
3
+ description: >-
4
+ Use when working with the Agentuity CLI itself: installation, authentication,
5
+ profiles, JSON output, command discovery, schema inspection, non-interactive
6
+ automation, structured input, and deciding which Agentuity command family to
7
+ use.
8
+ license: Apache-2.0
9
+ metadata:
10
+ author: agentuity
11
+ version: "1.0.0"
12
+ ---
13
+
14
+ # Agentuity CLI
15
+
16
+ The `agentuity` CLI manages project setup, local development, deploys, cloud
17
+ resources, auth, profiles, and agent-friendly command schemas. When unsure about
18
+ flags or response shapes, ask the CLI instead of guessing.
19
+
20
+ ## First Checks
21
+
22
+ ```bash
23
+ agentuity --version
24
+ agentuity auth whoami
25
+ agentuity --help
26
+ ```
27
+
28
+ If the user is not authenticated:
29
+
30
+ ```bash
31
+ agentuity auth login
32
+ ```
33
+
34
+ Headless environments should use documented API-key environment variables or a
35
+ configured profile. A first-class API-key login flow is tracked as an SDK issue;
36
+ do not invent unsupported auth commands.
37
+
38
+ ## Command Discovery
39
+
40
+ Use these before guessing flags:
41
+
42
+ ```bash
43
+ agentuity <command> --help
44
+ agentuity --help json
45
+ agentuity ai schema show
46
+ agentuity ai capabilities show
47
+ agentuity ai intro
48
+ ```
49
+
50
+ Per-command schema:
51
+
52
+ ```bash
53
+ agentuity cloud deployment logs --describe
54
+ agentuity project import --describe
55
+ ```
56
+
57
+ The CLI schema is useful for agentic tools because commands declare arguments, options, tags, and response shapes.
58
+
59
+ ## JSON and Structured Input
60
+
61
+ Use `--json` for machine-readable output:
62
+
63
+ ```bash
64
+ agentuity --json project show
65
+ agentuity --json cloud deployment list
66
+ agentuity --json cloud session list --success=false --count=25
67
+ ```
68
+
69
+ Use `--fields` to reduce output:
70
+
71
+ ```bash
72
+ agentuity --json --fields id,name,region project list
73
+ ```
74
+
75
+ Use `--input` when building commands programmatically:
76
+
77
+ ```bash
78
+ agentuity --input '{"name":"my-app","framework":"nextjs","confirm":true}' project create
79
+ ```
80
+
81
+ Use `--validate` with `--input` to check shape without executing when the command supports validation:
82
+
83
+ ```bash
84
+ agentuity --validate --input '{"name":"my-app"}' project import
85
+ ```
86
+
87
+ ## Command Families
88
+
89
+ | Need | Command family | Skill |
90
+ |---|---|---|
91
+ | Create/import/run/build/deploy an app | `project`, `dev`, `build`, `deploy` | `agentuity-project` |
92
+ | Manage deployments, logs, env, resources, SSH | `cloud` | `agentuity-cloud` |
93
+ | Use service clients from app code | package installs | `agentuity-services` |
94
+ | Build model-backed features | AI Gateway and provider SDK commands | `agentuity-ai` |
95
+ | Add relational data | `cloud db`, `project add database` | `agentuity-database` |
96
+ | Add async work | `cloud queue`, `cloud schedule`, `cloud webhook`, `cloud task` | `agentuity-background-work` |
97
+ | Manage cloud coding sessions | `coder` | Agentuity Coder docs |
98
+
99
+ ## Auth and Profiles
100
+
101
+ Useful auth commands:
102
+
103
+ ```bash
104
+ agentuity auth login
105
+ agentuity auth logout
106
+ agentuity auth whoami
107
+ agentuity auth org select
108
+ agentuity auth ssh add --file ~/.ssh/id_rsa.pub
109
+ ```
110
+
111
+ Profiles let users switch account, org, and region context:
112
+
113
+ ```bash
114
+ agentuity profile list
115
+ agentuity profile use <name>
116
+ ```
117
+
118
+ If profile commands do not appear in normal help, use the docs and
119
+ `agentuity ai schema show` to inspect current support. Profile discoverability is
120
+ tracked as an SDK issue under the `agentic flow` label.
121
+
122
+ ## Non-Interactive Automation
123
+
124
+ For CI and autonomous agents:
125
+
126
+ ```bash
127
+ agentuity --json project show
128
+ agentuity project import --name my-app --org-id <org-id> --confirm
129
+ agentuity deploy --json --message "Automated deploy"
130
+ ```
131
+
132
+ Prefer explicit context:
133
+
134
+ | Context | Prefer |
135
+ |---|---|
136
+ | Project | run from the app directory or pass `--dir` / `--project-id` |
137
+ | Organization | pass `--org-id` or select it in auth/profile setup |
138
+ | Region | pass `--region` or select one before automation |
139
+ | Destructive commands | pass `--force` or `--confirm` when supported |
140
+
141
+ The CLI has strong JSON support, but a few command gaps remain. Use bounded
142
+ polling and explicit timeouts when waiting for deployments or logs.
143
+
144
+ ## Error Handling
145
+
146
+ Use JSON error output in scripts:
147
+
148
+ ```bash
149
+ agentuity --json --error-format json project show
150
+ ```
151
+
152
+ If a command fails:
153
+
154
+ 1. Re-run with `--help` to verify flags.
155
+ 2. Re-run with `--describe` to inspect schema.
156
+ 3. Add `--json` for structured output.
157
+ 4. Add explicit `--project-id`, `--org-id`, and `--region` if context resolution failed.
158
+ 5. For deploy/debug flows, switch to `agentuity-cloud`.
159
+
160
+ ## Common Mistakes
161
+
162
+ | Mistake | Better approach |
163
+ |---|---|
164
+ | Guessing CLI flags from memory | Run `agentuity <command> --help` or `--describe` |
165
+ | Parsing human tables in automation | Use `--json` and `--fields` |
166
+ | Relying on implicit org/region in CI | Pass `--org-id`, `--region`, and project context explicitly |
167
+ | Assuming every prompt is safe in non-TTY | Use explicit confirm/force flags where available |
168
+ | Teaching unsupported commands | Verify with help or schema output first |
169
+
170
+ ## Useful Docs
171
+
172
+ - CLI reference: https://agentuity.dev/reference/cli
173
+ - Getting started: https://agentuity.dev/reference/cli/getting-started
174
+ - Profiles: https://agentuity.dev/reference/cli/profiles
175
+ - Deployment: https://agentuity.dev/reference/cli/deployment
176
+ - Debugging: https://agentuity.dev/reference/cli/debugging
177
+ - AI commands: https://agentuity.dev/reference/cli/ai-commands