Agent Manifest

The manifest declares your agent's identity, what data it uses, how it is triggered, and what operations it exposes. The platform uses it for routing, storage resolution, and marketplace discovery.

Core fields

  • name, description, version — Identity and semantics.
  • capabilities — Scopes used for routing and delegation; the agent only runs when the delegation includes these.
  • publisher_slug — Marketplace publisher identifier; ties agent-defined kinds to agent.<publisher_slug>.* namespace.

resources.consumes / produces

Declare which kinds the agent reads and writes. The platform uses this for capability matching, policy resolution, and documentation. Use dot-separated kind names (e.g. core.meeting.transcript, agent.socratic.interview.session).

See Resources & Kinds forctx.resources.load / save and kind namespaces.

state.kind

Optional. The kind used for this agent's persistent state (e.g. interview Q&A, ticket state). Convention: agent.<publisher_slug>.<name>.state. Durable state is stored in the Resource Graph; session memory holds only hot pointers.

on[] — Event triggers

List of event types (and optional source) that wake this agent. Example: event: 'billing.invoice.paid', source: 'connector:stripe'. Supports wildcards (e.g. billing.*).

muscles[]

Optional. List of muscle dependencies by id andversion. The runtime ensures these muscles are available before the agent is run.

operations[]

Discoverable operations (Wave 8.2): name, description, paramsSchema, resultKind. Used by the CLI and marketplace so builders and AI can discover "what this agent can do and how."

Full example

typescript
import { handler } from '@human/agent-sdk';
export default handler({
name: 'interview-runner',
description: 'Runs structured interviews and persists Q&A by session',
version: '1.0.0',
capabilities: ['interview/run', 'document/generate'],
// Marketplace & namespace: who publishes this agent
publisher_slug: 'socratic',
// What kinds this agent reads and writes (Resource Graph)
resources: {
consumes: [
{ kind: 'core.meeting.transcript' },
{ kind: 'core.calendar.event' },
],
produces: [
{ kind: 'agent.socratic.interview.session' },
{ kind: 'core.meeting.notes' },
],
},
// Persistent state kind (convention: agent.<publisher_slug>.<name>.state)
state: {
kind: 'agent.socratic.interview.state',
},
// Event triggers: wake when matching events arrive (Wave 4)
on: [
{ event: 'meeting.transcript.ready', source: 'connector:zoom' },
{ event: 'calendar.event.created' },
],
// Muscle dependencies (Wave 7.5)
muscles: [
{ id: 'summarize', version: '1.x' },
{ id: 'extract-actions', version: '1.x' },
],
// Discoverable operations for CLI and marketplace (Wave 8.2)
operations: [
{
name: 'run_interview',
description: 'Start a new interview session',
paramsSchema: {
template_id: { type: 'string', required: true },
subject_did: { type: 'string', required: true },
},
resultKind: 'agent.socratic.interview.session',
},
],
execute: async (ctx, input) => {
// ...
},
});

Minimal example

typescript
handler({
name: 'my-agent',
version: '1.0.0',
execute: async (ctx, input) => ({ result: input }),
});

See also