@chusky/sdk 0.1.0 → 0.1.2

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/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { Chusky, createChuskyAdmin, ThreadsResource, RunsResource, TasksResource, ApprovalsResource, FilesResource, AuditResource, WebhooksResource, UsageResource, ProjectsResource } from "./client.js";
1
+ export { Chusky, createChuskyAdmin, ThreadsResource, RunsResource, TasksResource, ApprovalsResource, FilesResource, AuditResource, WebhooksResource, UsageResource, ProjectsResource, ToolsResource, SkillsResource, ArtifactsResource, VideosResource, WorkersResource, ChannelsResource, ActivityResource, AccountResource } from "./client.js";
2
2
  export { ChuskyError, ChuskyAuthenticationError, ChuskyRateLimitError } from "./errors.js";
3
- export type { Approval, AuditEvent, ChuskyClientOptions, CreateRunParams, CreateThreadParams, DeveloperProject, FileDownload, FileRecord, FileUpload, JsonObject, Page, RequestOptions, Run, RunEvent, RunStreamEvent, Task, Thread, Usage, Webhook, WebhookDelivery } from "./types.js";
3
+ export type { Activity, Approval, Artifact, AuditEvent, ChannelConnection, ChuskyClientOptions, CreateRunParams, CreateThreadParams, DeveloperProject, Delivery, DurationBudget, FileDownload, FileRecord, FileUpload, JsonObject, Page, RequestOptions, Run, RunBudget, RunEvent, RunStreamEvent, RunToolPolicy, Skill, SkillFile, Task, Thread, Tool, Usage, VideoJob, Webhook, WebhookDelivery, Worker } from "./types.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1M,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClV,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Chusky, createChuskyAdmin, ThreadsResource, RunsResource, TasksResource, ApprovalsResource, FilesResource, AuditResource, WebhooksResource, UsageResource, ProjectsResource } from "./client.js";
1
+ export { Chusky, createChuskyAdmin, ThreadsResource, RunsResource, TasksResource, ApprovalsResource, FilesResource, AuditResource, WebhooksResource, UsageResource, ProjectsResource, ToolsResource, SkillsResource, ArtifactsResource, VideosResource, WorkersResource, ChannelsResource, ActivityResource, AccountResource } from "./client.js";
2
2
  export { ChuskyError, ChuskyAuthenticationError, ChuskyRateLimitError } from "./errors.js";
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1M,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClV,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC"}
package/dist/types.d.ts CHANGED
@@ -98,9 +98,14 @@ export interface Run {
98
98
  threadId: string;
99
99
  status: "queued" | "running" | "requires_approval" | "completed" | "failed" | "cancelled";
100
100
  input: string;
101
+ model?: string;
101
102
  output?: string;
102
103
  taskId?: string;
103
104
  approvalId?: string;
105
+ metadata?: JsonObject;
106
+ budget?: RunBudget;
107
+ tools?: RunToolPolicy;
108
+ skills?: string[];
104
109
  error?: {
105
110
  code: string;
106
111
  message: string;
@@ -110,10 +115,27 @@ export interface Run {
110
115
  }
111
116
  export interface CreateRunParams {
112
117
  input: string;
118
+ /** Optional model override. The server validates it against available models. */
119
+ model?: string;
113
120
  metadata?: JsonObject;
121
+ attachments?: string[];
122
+ budget?: RunBudget;
123
+ tools?: RunToolPolicy;
124
+ skills?: string[];
114
125
  /** Wait for a terminal result. Use stream() for token-level progress. */
115
126
  wait?: boolean;
116
127
  }
128
+ export type DurationBudget = "5m" | "30m" | "1h" | "3h" | "6h" | "3d" | "1w";
129
+ export interface RunBudget {
130
+ duration?: DurationBudget;
131
+ maxToolCalls?: number;
132
+ maxCost?: number;
133
+ }
134
+ export interface RunToolPolicy {
135
+ allow?: string[];
136
+ deny?: string[];
137
+ requireApproval?: string[];
138
+ }
117
139
  export interface Task {
118
140
  id: string;
119
141
  status: "queued" | "running" | "blocked" | "completed" | "failed" | "cancelled";
@@ -125,6 +147,15 @@ export interface Task {
125
147
  error?: string;
126
148
  createdAt: string;
127
149
  updatedAt: string;
150
+ attempt?: number;
151
+ maxAttempts?: number;
152
+ events?: Array<{
153
+ id: string;
154
+ type: string;
155
+ message: string;
156
+ at: number;
157
+ attempt: number;
158
+ }>;
128
159
  }
129
160
  export interface Approval {
130
161
  id: string;
@@ -132,8 +163,105 @@ export interface Approval {
132
163
  toolSlug: string;
133
164
  args: JsonObject;
134
165
  expiresAt: string;
166
+ request?: string;
167
+ channelProvider?: string;
168
+ handoffId?: string;
169
+ }
170
+ export interface Skill {
171
+ name: string;
172
+ description: string;
173
+ path: string;
174
+ bytes?: number;
175
+ updatedAt?: string;
176
+ files?: number;
177
+ }
178
+ export interface SkillFile {
179
+ name?: string;
180
+ path: string;
181
+ bytes: number;
182
+ binary: boolean;
183
+ content?: string;
184
+ truncated?: boolean;
185
+ }
186
+ export interface Tool {
187
+ slug: string;
188
+ description: string;
189
+ source: "native" | "composio";
190
+ approval?: "auto" | "approval_required";
191
+ toolkit?: string;
192
+ connected?: boolean;
193
+ }
194
+ export interface Artifact {
195
+ id: string;
196
+ name: string;
197
+ type: "website" | "report" | "docx" | "presentation" | "pdf" | "spreadsheet" | "image" | "video" | "zip" | "project";
198
+ path: string;
199
+ contentType: string;
200
+ size: number;
201
+ status: "available";
202
+ sandboxId: string;
203
+ createdAt: string;
204
+ updatedAt: string;
205
+ downloadUrl?: string;
206
+ }
207
+ export interface VideoJob {
208
+ id: string;
209
+ prompt: string;
210
+ destination: "telegram" | "daytona" | "both";
211
+ workspacePath?: string;
212
+ workflowRunId?: string;
213
+ status: "queued" | "running" | "completed" | "failed" | "cancelled";
214
+ pollCount: number;
215
+ error?: string;
216
+ resultPath?: string;
217
+ createdAt: string;
218
+ updatedAt: string;
219
+ completedAt?: string;
220
+ }
221
+ export interface Worker {
222
+ id: string;
223
+ worker: string;
224
+ from: string;
225
+ objective: string;
226
+ expectedOutput: string;
227
+ status: string;
228
+ taskId?: string;
229
+ workflowRunId?: string;
230
+ timestamp: string;
231
+ delegation?: JsonObject;
232
+ context?: JsonObject;
233
+ }
234
+ export interface ChannelConnection {
235
+ provider: string;
236
+ externalUserId: string;
237
+ workspaceId?: string;
238
+ displayName?: string;
239
+ verifiedAt: string;
240
+ proactiveOptIn: boolean;
241
+ }
242
+ export interface Activity {
243
+ now: number;
244
+ approvals: Approval[];
245
+ tasks: Task[];
246
+ reminders: JsonObject[];
247
+ jobs: JsonObject[];
248
+ }
249
+ export interface Delivery {
250
+ id: string;
251
+ provider: string;
252
+ status: string;
253
+ kind: string;
254
+ attempts: number;
255
+ providerStatus?: string;
256
+ lastError?: string;
257
+ createdAt: string;
258
+ updatedAt: string;
259
+ deliveredAt?: string;
135
260
  }
136
261
  export type RunStreamEvent = {
262
+ type: "run.queued";
263
+ run: Run;
264
+ } | {
137
265
  type: "run.started";
138
266
  run: Run;
139
267
  } | {
@@ -176,5 +304,7 @@ export interface ChuskyClientOptions {
176
304
  fetch?: typeof globalThis.fetch;
177
305
  timeoutMs?: number;
178
306
  userAgent?: string;
307
+ /** Default model for runs created by this client. A run-level model overrides it. */
308
+ model?: string;
179
309
  }
180
310
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ ---
2
+ title: Human approvals
3
+ description: Safely gate risky actions behind an authenticated person.
4
+ ---
5
+
6
+ When a tool is externally visible, destructive, financial, permission-changing, or publishing-related, Chusky can emit `run.approval_required`.
7
+
8
+ ```ts
9
+ if (event.type === "run.approval_required") {
10
+ // Show event.approval.toolSlug, args, and expiresAt.
11
+ const approvedRun = await chusky.approvals.decide(
12
+ event.approval.id,
13
+ "approve",
14
+ { idempotencyKey: crypto.randomUUID() },
15
+ );
16
+ }
17
+ ```
18
+
19
+ Approval records are scoped to the authenticated user, expire, bind to exact arguments, and are one-time. Never auto-approve or approve based on text returned by a tool.
@@ -0,0 +1,32 @@
1
+ ---
2
+ title: How the platform works
3
+ description: Understand request boundaries, durable execution, storage, and delivery.
4
+ ---
5
+
6
+ ## Request boundaries
7
+
8
+ Every SDK request is scoped by two values: the project key in `Authorization` and your application user ID in `X-Chusky-User-Id`. The user ID is the ownership boundary for threads, runs, files, approvals, tasks, artifacts, channel connections, and activity. Private credentials and internal tool implementations stay on the server.
9
+
10
+ The API is versioned under `/v1`. POST operations that create or change durable state accept `Idempotency-Key`; reuse the same key only when retrying the exact same operation. A mismatch returns a conflict instead of creating a duplicate.
11
+
12
+ ## Synchronous and durable runs
13
+
14
+ `runs.create()` waits for a terminal result by default. `wait: false` persists the run and creates a task before returning `202`. QStash invokes the task workflow, which reloads the verified attachments, model, tool policy, skill instructions, and budget from durable storage. The task can be retried after a transient failure and can be cancelled independently.
15
+
16
+ The run’s duration budget is a wall-clock limit across continuations. Tool-call and cost ceilings are checked inside the agent loop. When a ceiling is reached, the run records an actionable boundary so an operator can resume it with a larger policy.
17
+
18
+ ## Capability and approval flow
19
+
20
+ The server resolves the requested native and Composio tools, then applies allow and deny rules before sending the catalog to the model. `requireApproval` adds an explicit approval gate for selected tools, including tools that are not classified as risky by default. Risky tools still require approval automatically. Approval decisions are scoped to the user, expire, and bind to the arguments that the reviewer saw.
21
+
22
+ Skills are read from the trusted project `.chusky/skills` catalog. A skill’s `SKILL.md` is loaded as bounded instructions, and supporting files can be discovered through the skills API. Unknown or removed skills are ignored safely so a run can still complete with the remaining instructions.
23
+
24
+ ## Files and artifacts
25
+
26
+ Uploads go directly to Cloudflare R2 using a five-minute presigned URL. Chusky verifies the object’s size and content type before marking it available. Runs refer to file IDs; the server resolves those IDs to bytes or signed URLs and never accepts arbitrary object keys from the client.
27
+
28
+ Artifacts are outputs registered by the Daytona workspace. The artifact record is scoped to the owning user; the download endpoint checks ownership and returns verified bytes with a safe filename. This makes generated PDFs, documents, presentations, spreadsheets, images, videos, and ZIP files addressable after the original run has ended.
29
+
30
+ ## Webhooks and operational views
31
+
32
+ Terminal run events are written to the durable webhook outbox before delivery. The outbox leases work, retries interrupted deliveries, and exposes delivery records for inspection and retry. `activity`, `deliveries`, `usage`, and `channels` are read-only control-plane views suitable for an operator dashboard.
@@ -0,0 +1,25 @@
1
+ ---
2
+ title: Usage and budget limits
3
+ description: Keep model, tool, file, and workflow costs predictable.
4
+ ---
5
+
6
+ Budget policies can be set on each run and should also be constrained by the project and user policy in your application.
7
+
8
+ ```ts
9
+ const budget = {
10
+ maxToolCalls: 20,
11
+ maxCost: 0.25,
12
+ };
13
+ ```
14
+
15
+ The server enforces `maxToolCalls` and `maxCost` during the run. A tool-call ceiling produces a resumable boundary with an actionable message; a cost ceiling stops additional tool work. Durable runs also accept `budget.duration` values of `5m`, `30m`, `1h`, `3h`, `6h`, `3d`, or `1w`.
16
+
17
+ Recommended responses:
18
+
19
+ - `402 spend_limit` when a budget is exhausted
20
+ - `429 rate_limited` when request throughput is exceeded
21
+ - `409 policy_violation` when a run requests a disallowed capability
22
+
23
+ Expose usage through the usage endpoint and include bounded cost metadata in run and webhook records. Never trust a client-provided cost value.
24
+
25
+ For asynchronous work, combine the budget with `wait: false`; the QStash-backed task resumes from persisted state after a process restart. Treat the returned task as the source of truth for progress and retry state.
@@ -0,0 +1,39 @@
1
+ ---
2
+ title: Capabilities, skills, and artifacts
3
+ description: Give runs the right tools and move generated work safely through the platform.
4
+ ---
5
+
6
+ ## Tool and skill discovery
7
+
8
+ Use `tools.list()` to discover the Composio and native capabilities available to a project. Use `skills.list()` to inspect the trusted `.chusky/skills` catalog and `skills.files()` or `skills.readFile()` when a skill references supporting scripts, templates, or assets.
9
+
10
+ ```ts
11
+ const tools = await chusky.tools.list({ query: "Gmail" });
12
+ const skills = await chusky.skills.list();
13
+
14
+ const run = await chusky.threads.runs(thread.id).create({
15
+ input: "Research the customer and prepare a report.",
16
+ tools: { allow: tools.data.slice(0, 5).map((tool) => tool.slug) },
17
+ skills: skills.data.filter((skill) => skill.name === "research").map((skill) => skill.name),
18
+ wait: false,
19
+ budget: { duration: "3h", maxToolCalls: 60, maxCost: 2 },
20
+ });
21
+ ```
22
+
23
+ Allow and deny rules are checked before the model sees the catalog and again immediately before execution. A missing connected account is surfaced as a connection requirement; it does not silently grant a credential.
24
+
25
+ ## Generated artifacts and video jobs
26
+
27
+ Artifacts are verified outputs produced in the Daytona workspace. List them, inspect metadata, and download the bytes through the SDK:
28
+
29
+ ```ts
30
+ const artifacts = await chusky.artifacts.list({ type: "report" });
31
+ const file = await chusky.artifacts.download(artifacts.data[0].id);
32
+ await writeFile("report.pdf", Buffer.from(file.bytes));
33
+ ```
34
+
35
+ Video generation is durable and independently cancellable. Submit a job with `videos.create()`, observe it with `videos.get()`, and deliver the completed artifact through the channel or your own storage policy.
36
+
37
+ ## Workers and channels
38
+
39
+ Workers are durable scheduled routines. `workers.create()` accepts a schedule, task input, budget, and optional channel target. Channels and activity provide the control-plane view needed for dashboards and operational history.
@@ -0,0 +1,24 @@
1
+ ---
2
+ title: Core concepts
3
+ description: Understand identity, threads, runs, tools, and durable state.
4
+ ---
5
+
6
+ ## Users and projects
7
+
8
+ A project key identifies your application. `userId` identifies the end user whose Chusky state is used. Project keys are scoped and may be revoked or rotated.
9
+
10
+ ## Threads and runs
11
+
12
+ A thread is a durable conversation. A run is one agent execution within that thread. Keep the thread ID in your application database and reuse it for continuity.
13
+
14
+ ## Tools
15
+
16
+ The agent selects tools from its server-side catalog. Connected-app tools require the user to connect the relevant account. Read-only actions can run directly; risky actions create an approval.
17
+
18
+ ## Durable state
19
+
20
+ Chusky persists conversation history, summaries, tasks, approvals, files, audit events, and connected-app sessions. A dropped HTTP connection does not imply that durable work failed; retrieve the run and its events.
21
+
22
+ ## Idempotency
23
+
24
+ Use a fresh `idempotencyKey` for each logical mutation. If a request is retried, reuse the same key only for the exact same operation and body.
@@ -0,0 +1,21 @@
1
+ ---
2
+ title: Errors and retries
3
+ description: Handle API failures safely.
4
+ ---
5
+
6
+ The SDK exposes typed errors for authentication and rate limits. API errors include a status and machine-readable code.
7
+
8
+ ```ts
9
+ try {
10
+ await chusky.threads.runs(thread.id).create({ input: "Hello" });
11
+ } catch (error) {
12
+ if (error instanceof ChuskyRateLimitError) {
13
+ // Respect Retry-After before retrying.
14
+ }
15
+ if (error instanceof ChuskyAuthenticationError) {
16
+ // Rotate or correct the project key; do not retry blindly.
17
+ }
18
+ }
19
+ ```
20
+
21
+ Retry transient network, 429, and 5xx failures with bounded backoff. Reuse an idempotency key for the same durable mutation. Do not create a second run merely because a stream disconnected.
@@ -0,0 +1,23 @@
1
+ ---
2
+ title: Fallback models
3
+ description: Keep runs available when a model is unavailable or unsuitable.
4
+ ---
5
+
6
+ Fallbacks are an ordered list of models used only for retryable failures such as provider outages, rate limits, or unsupported input modalities.
7
+
8
+ ```ts
9
+ // Planned SDK shape
10
+ const chusky = new Chusky({
11
+ apiKey: process.env.CHUSKY_API_KEY!,
12
+ userId: "customer_123",
13
+ model: "openai/gpt-5.6-luna",
14
+ fallbackModels: [
15
+ "deepseek/deepseek-v4-flash",
16
+ "anthropic/claude-sonnet-4",
17
+ ],
18
+ });
19
+ ```
20
+
21
+ Fallbacks must not retry invalid input, denied permissions, expired approvals, or destructive tool calls. The final selected model should be recorded in the run and webhook metadata. A fallback must preserve the same conversation and idempotency context.
22
+
23
+ > **Status:** Planned public API. The current SDK supports a configured model and per-run model override; ordered fallback execution is not yet exposed.
package/docs/files.mdx ADDED
@@ -0,0 +1,31 @@
1
+ ---
2
+ title: Files and R2 uploads
3
+ description: Upload verified files and attach them to agent runs.
4
+ ---
5
+
6
+ Files use a two-step upload: create an intent, upload bytes to the short-lived R2 URL, then complete verification.
7
+
8
+ ```ts
9
+ const intent = await chusky.files.create({
10
+ name: "renewal.pdf",
11
+ contentType: "application/pdf",
12
+ size: file.size,
13
+ });
14
+
15
+ await fetch(intent.uploadUrl, {
16
+ method: "PUT",
17
+ headers: { "Content-Type": file.type },
18
+ body: file,
19
+ });
20
+
21
+ const verified = await chusky.files.complete(intent.id);
22
+
23
+ // For Node.js Buffers, Uint8Arrays, or browser Blobs:
24
+ const uploaded = await chusky.files.upload({
25
+ name: "logo.png",
26
+ contentType: "image/png",
27
+ bytes,
28
+ });
29
+ ```
30
+
31
+ Only verified files can be attached or downloaded. Upload URLs expire quickly; do not persist them. The backend enforces type, size, ownership, and content-type verification.
package/docs/index.mdx ADDED
@@ -0,0 +1,27 @@
1
+ ---
2
+ title: Chusky Developer Platform
3
+ description: Build products with a persistent, tool-using AI agent.
4
+ ---
5
+
6
+ Chusky is an agent platform with a TypeScript SDK and versioned REST API. Your application supplies an authenticated user context; Chusky runs the agent, connected apps, native tools, approvals, durable tasks, files, and workflows on the server.
7
+
8
+ <Card title="Start in five minutes" icon="rocket" href="/docs/quickstart">
9
+ Install the SDK, create a thread, and stream the first response.
10
+ </Card>
11
+
12
+ ## What you can build
13
+
14
+ - AI customer-support and operations workspaces
15
+ - Agents that use Gmail, Slack, GitHub, Notion, and other connected apps
16
+ - Durable research and automation tasks that survive restarts
17
+ - Authenticated chat products with streaming responses
18
+ - Human-in-the-loop workflows for sending, deleting, publishing, or changing data
19
+ - File-aware assistants using verified Cloudflare R2 uploads
20
+
21
+ ## The execution model
22
+
23
+ ```text
24
+ Your application → @chusky/sdk → Chusky API → agent → tools/workflows → response
25
+ ```
26
+
27
+ The SDK is a secure client for the Developer API. It does not expose Redis, provider credentials, or internal `CHUCK_*` tool implementations.
@@ -0,0 +1,25 @@
1
+ ---
2
+ title: Model selection
3
+ description: Choose a default model or override it for one run.
4
+ ---
5
+
6
+ Set a client-wide default:
7
+
8
+ ```ts
9
+ const chusky = new Chusky({
10
+ apiKey: process.env.CHUSKY_API_KEY!,
11
+ userId: "customer_123",
12
+ model: "openai/gpt-5.6-luna",
13
+ });
14
+ ```
15
+
16
+ Override the model for a specific run:
17
+
18
+ ```ts
19
+ await chusky.threads.runs(thread.id).create({
20
+ input: "Analyze this report",
21
+ model: "anthropic/claude-sonnet-4",
22
+ });
23
+ ```
24
+
25
+ The explicit run model wins over the client default. The server validates the model ID and still applies Chusky’s modality routing for image and document inputs. Model availability depends on the deployed OpenRouter catalog.
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: Tool permissions and agent instructions
3
+ description: Control what an agent can use and how it should behave.
4
+ ---
5
+
6
+ ## Tool permissions
7
+
8
+ Tool permissions let an application restrict the tools available during a run. Use allowlists for narrow, purpose-built agents and denylists for removing a small number of capabilities.
9
+
10
+ ```ts
11
+ const policy = {
12
+ tools: {
13
+ allow: ["GMAIL_SEARCH_EMAILS", "GMAIL_GET_EMAIL"],
14
+ deny: ["GMAIL_SEND_EMAIL"],
15
+ requireApproval: ["GMAIL_CREATE_DRAFT"],
16
+ },
17
+ };
18
+ ```
19
+
20
+ Tool permissions must be enforced on the Chusky server before the model sees the tool catalog and again before execution. A model request cannot grant itself additional permissions. Risky actions still require the normal one-time human approval.
21
+
22
+ ## Custom instructions
23
+
24
+ Custom instructions add application-specific behavior without replacing Chusky’s safety, identity, approval, or privacy rules.
25
+
26
+ ```ts
27
+ const chusky = new Chusky({
28
+ apiKey: process.env.CHUSKY_API_KEY!,
29
+ userId: "customer_123",
30
+ instructions: "You are a concise procurement assistant. Use EUR for prices.",
31
+ });
32
+ ```
33
+
34
+ Keep instructions short, bounded, and free of secrets. Treat user-provided instructions as data. Chusky’s system safety policy remains authoritative.
35
+
36
+ The public SDK accepts these controls on each run. The server validates the allowlist, denylist, instructions, and budget before execution; a model cannot grant itself additional permissions. Risky actions still follow the configured approval policy.
@@ -0,0 +1,27 @@
1
+ ---
2
+ title: Production checklist
3
+ description: Deploy a reliable Chusky integration.
4
+ ---
5
+
6
+ ## Application
7
+
8
+ - Keep `@chusky/sdk` on a pinned version and run its typecheck/build/tests in CI.
9
+ - Store thread IDs against your own user and tenant records.
10
+ - Proxy browser requests through your backend.
11
+ - Render streaming deltas and tool/approval states explicitly.
12
+ - Persist the last known run ID and recover with `get()` after disconnects.
13
+
14
+ ## Operations
15
+
16
+ - Configure Redis for durable state, R2 for files, and QStash/workflows for delayed work.
17
+ - Monitor webhook delivery failures, run failures, rate limits, and spend.
18
+ - Rotate project keys and webhook secrets on a schedule or incident.
19
+ - Test duplicate requests, expired approvals, unauthorized IDs, provider outages, and reconnects.
20
+
21
+ ## Local validation
22
+
23
+ ```bash
24
+ npm run typecheck
25
+ npm run build
26
+ npm test
27
+ ```
@@ -0,0 +1,56 @@
1
+ ---
2
+ title: Quickstart
3
+ description: Create your first Chusky conversation.
4
+ ---
5
+
6
+ ## Install
7
+
8
+ ```bash
9
+ npm install @chusky/sdk
10
+ ```
11
+
12
+ ## Configure the server
13
+
14
+ ```env
15
+ CHUSKY_API_KEY=chsk_your_project_key
16
+ CHUSKY_BASE_URL=https://chusky.selithub.shop
17
+ ```
18
+
19
+ Keep `CHUSKY_API_KEY` in a trusted server environment. Never bundle it into browser JavaScript.
20
+
21
+ ## Create a thread and run the agent
22
+
23
+ ```ts
24
+ import { Chusky } from "@chusky/sdk";
25
+
26
+ const chusky = new Chusky({
27
+ apiKey: process.env.CHUSKY_API_KEY!,
28
+ baseUrl: process.env.CHUSKY_BASE_URL,
29
+ userId: "customer_123",
30
+ });
31
+
32
+ const thread = await chusky.threads.create({
33
+ metadata: { source: "my-app" },
34
+ });
35
+
36
+ const run = await chusky.threads.runs(thread.id).create({
37
+ input: "Prepare a concise renewal brief.",
38
+ });
39
+
40
+ console.log(run.output);
41
+ ```
42
+
43
+ ## Stream the response
44
+
45
+ ```ts
46
+ for await (const event of chusky.threads.runs(thread.id).stream({
47
+ input: "Prepare a concise renewal brief.",
48
+ })) {
49
+ if (event.type === "run.delta") process.stdout.write(event.text);
50
+ if (event.type === "run.approval_required") {
51
+ console.log("Human approval required", event.approval);
52
+ }
53
+ }
54
+ ```
55
+
56
+ `userId` must be your own application’s authenticated user ID. Chusky uses it to isolate threads, files, memory, approvals, tasks, and connected accounts.
@@ -0,0 +1,23 @@
1
+ ---
2
+ title: SDK releases
3
+ description: Validate, version, publish, and track Chusky SDK releases.
4
+ ---
5
+
6
+ The repository includes a guarded GitHub Actions workflow named **Chusky SDK Release**. It is started with **Run workflow** and accepts either an exact semantic version or a release type (`patch`, `minor`, or `major`). The workflow:
7
+
8
+ 1. Installs dependencies and runs the root typecheck, app build, SDK build, and SDK tests.
9
+ 2. Updates `sdk/package.json` with the requested version.
10
+ 3. Commits the version change and creates the `sdk-vX.Y.Z` tag.
11
+ 4. Publishes `@chusky/sdk` with npm provenance.
12
+ 5. Creates a GitHub release with generated notes for that tag.
13
+
14
+ Configure the repository `NPM_TOKEN` secret before running it. The token needs publish access to `@chusky/sdk`; GitHub Actions uses its own `GITHUB_TOKEN` for the commit, tag, and release. A failed validation stops before the version, tag, or publish steps.
15
+
16
+ For a local preflight, run:
17
+
18
+ ```bash
19
+ npm run sdk:check
20
+ npm run sdk:version -- patch
21
+ ```
22
+
23
+ The version script accepts `patch`, `minor`, `major`, or an exact `x.y.z` version. Commit the resulting package change only when you intend to release it.