Skills
Skill definitions and the invoke contract.
Every schema below is exported from @novaterra/contracts and validated on both sides of the wire. Source: packages/contracts/src/skills.ts.
SkillKind
'builtin' | 'http' | 'script'
SkillCategory
'web' | 'files' | 'code' | 'docs' | 'image' | 'comms' | 'data' | 'memory' | 'desktop' | 'llm' | 'other'
SkillDef
| Field | Type | Notes |
|---|---|---|
id | Id | |
name | string | dotted: ‘web.search’ |
description | string | |
category | SkillCategory | |
inputSchema | Json | JSON Schema |
outputSchema | Json | |
kind | SkillKind | |
config | Json | optional · default {} · for http: {url, method, headers}; script: {language, source} |
ownerId | Id | null | optional · default null |
isPublic | boolean | optional · default true |
requiresConnection | string | null | optional · default null · ‘gmail’ | ‘telegram’ | … |
createdAt | ISODate |
SkillSummary
The skill shelf’s card fields. inputSchema + outputSchema were 73% of GET /api/studio/skills (47.8 kB for ~45 skills), and nothing on a card reads either one. Only the try-it drawer does — it builds a form from inputSchema and shows both raw — and it needs them for the ONE skill being opened, so it fetches GET /api/studio/skills/:name instead of every skill’s schemas being sent to render a list. .pick() rather than .omit(), for the reason spelled out on GeneratorSummary in ./studio.ts: a field added to SkillDef later must be named here to appear in the list, so a new heavy field cannot silently re-inflate this response, and a consumer reading a dropped field fails as a type error rather than reading undefined.
| Field | Type | Notes |
|---|---|---|
id | Id | |
name | string | |
description | string | |
category | SkillCategory | |
kind | SkillKind | |
requiresConnection | string | null | optional · default null |
SkillInvokeRequest
| Field | Type | Notes |
|---|---|---|
name | string | |
input | Json |
SkillInvokeResponse
| Field | Type | Notes |
|---|---|---|
ok | boolean | |
output | Json | optional |
error | string | optional |
durationMs | number |