Skip to content

The Agent: Meta endpoints expose workspace-scoped metadata and lifecycle controls for a Hoody agent. Use them to discover available agents, skills, and commands; inspect paths, version-control state, and LSP/formatter health; subscribe to the server-sent event stream; and clean up the workspace instance when finished.

All endpoints are scoped to a workspace via the workspaceID path parameter.

GET /api/v1/workspaces/{workspaceID}/meta/path

Section titled “GET /api/v1/workspaces/{workspaceID}/meta/path”

Retrieve the current working directory and related path information for this workspace.

NameInTypeRequiredDescription
workspaceIDpathstringYesThe workspace identifier.
{
"home": "/home/user",
"state": "/home/user/.hoody/state",
"config": "/home/user/.hoody/config.json",
"worktree": "/home/user/projects/my-app",
"directory": "/home/user/projects/my-app/.hoody/workspace"
}
const paths = await client.agent.meta.getPaths({
workspaceID: "ws_01HXYZ...",
});

GET /api/v1/workspaces/{workspaceID}/meta/agents

Section titled “GET /api/v1/workspaces/{workspaceID}/meta/agents”

Get a list of all available AI agents for this workspace.

NameInTypeRequiredDescription
workspaceIDpathstringYesworkspaceID path parameter
[
{
"name": "build",
"description": "Default build agent",
"mode": "primary",
"native": false,
"hidden": false,
"topP": 0.9,
"temperature": 0.2,
"color": "#4F46E5",
"permission": [
{
"permission": "edit",
"pattern": "*",
"action": "allow"
}
],
"model": {
"modelID": "claude-sonnet-4.5",
"providerID": "anthropic"
},
"variant": "max",
"prompt": "You are a careful software engineer.",
"options": {},
"steps": 256
},
{
"name": "explore",
"description": "Read-only subagent for codebase exploration",
"mode": "subagent",
"native": true,
"hidden": false,
"permission": [
{
"permission": "read",
"pattern": "*",
"action": "allow"
},
{
"permission": "edit",
"pattern": "*",
"action": "deny"
}
],
"model": {
"modelID": "claude-haiku-4.5",
"providerID": "anthropic"
},
"options": {}
}
]
const agents = await client.agent.meta.listAgents({
workspaceID: "ws_01HXYZ...",
});

GET /api/v1/workspaces/{workspaceID}/meta/skills

Section titled “GET /api/v1/workspaces/{workspaceID}/meta/skills”

Get a list of all available skills for this workspace.

NameInTypeRequiredDescription
workspaceIDpathstringYesThe workspace identifier.
[
{
"name": "code-review",
"description": "Perform a thorough code review of recent changes.",
"location": "/home/user/projects/my-app/.hoody/skills/code-review.md",
"content": "# Code Review\n\nReview the staged diff and surface issues by severity.",
"scope": "project",
"editable": true,
"enabled": true,
"builtin": false
},
{
"name": "commit",
"description": "Create a well-structured git commit.",
"location": "/home/user/.hoody/skills/commit.md",
"content": "# Commit\n\nGenerate a commit message that summarizes the staged diff.",
"scope": "global",
"editable": true,
"enabled": true,
"builtin": true
}
]
const skills = await client.agent.meta.listSkills({
workspaceID: "ws_01HXYZ...",
});

GET /api/v1/workspaces/{workspaceID}/meta/commands

Section titled “GET /api/v1/workspaces/{workspaceID}/meta/commands”

Get a list of all available commands for this workspace.

NameInTypeRequiredDescription
workspaceIDpathstringYesThe workspace identifier.
[
{
"name": "review",
"description": "Run a code review over the current diff.",
"agent": "build",
"model": "claude-sonnet-4.5",
"source": "command",
"template": "Review the following diff:\n\n$ARGUMENTS",
"subtask": false,
"hints": ["diff", "review"]
},
{
"name": "plan",
"description": "Draft an implementation plan.",
"agent": "build",
"source": "skill",
"template": "Create a plan for: $ARGUMENTS",
"subtask": true,
"hints": ["plan"]
}
]
const commands = await client.agent.meta.listCommands({
workspaceID: "ws_01HXYZ...",
});

GET /api/v1/workspaces/{workspaceID}/meta/formatter/status

Section titled “GET /api/v1/workspaces/{workspaceID}/meta/formatter/status”

Get formatter status for this workspace.

NameInTypeRequiredDescription
workspaceIDpathstringYesThe workspace identifier.
[
{
"name": "prettier",
"extensions": [".ts", ".tsx", ".js", ".jsx", ".json", ".md"],
"enabled": true
},
{
"name": "gofmt",
"extensions": [".go"],
"enabled": true
},
{
"name": "black",
"extensions": [".py"],
"enabled": false
}
]
const formatters = await client.agent.meta.getFormatterStatus({
workspaceID: "ws_01HXYZ...",
});

GET /api/v1/workspaces/{workspaceID}/meta/lsp/status

Section titled “GET /api/v1/workspaces/{workspaceID}/meta/lsp/status”

Get LSP server status for this workspace.

NameInTypeRequiredDescription
workspaceIDpathstringYesThe workspace identifier.
[
{
"id": "ts-lsp",
"name": "TypeScript Language Server",
"root": "/home/user/projects/my-app",
"status": "connected"
},
{
"id": "pyright",
"name": "Pyright",
"root": "/home/user/projects/my-app/services/api",
"status": "connected"
},
{
"id": "rust-analyzer",
"name": "rust-analyzer",
"root": "/home/user/projects/my-app/crates/core",
"status": "error"
}
]
const lsp = await client.agent.meta.getLspStatus({
workspaceID: "ws_01HXYZ...",
});

GET /api/v1/workspaces/{workspaceID}/meta/vcs

Section titled “GET /api/v1/workspaces/{workspaceID}/meta/vcs”

Retrieve version control system (VCS) information for this workspace, such as the current git branch.

NameInTypeRequiredDescription
workspaceIDpathstringYesThe workspace identifier.
{
"branch": "feat/agent-meta-docs"
}
const vcs = await client.agent.meta.getVcs({
workspaceID: "ws_01HXYZ...",
});

GET /api/v1/workspaces/{workspaceID}/meta/events

Section titled “GET /api/v1/workspaces/{workspaceID}/meta/events”

Subscribe to server-sent events for this workspace. The connection stays open and emits a stream of agent_Event payloads covering session lifecycle, message updates, branch changes, LSP diagnostics, permissions, jobs, master-todo progress, and more.

NameInTypeRequiredDescription
workspaceIDpathstringYesworkspaceID path parameter
{
"type": "session.idle",
"properties": {
"sessionID": "01HXYZSESSIONID0000000000"
}
}
const stream = await client.agent.meta.subscribeEvents({
workspaceID: "ws_01HXYZ...",
});
for await (const event of stream) {
switch (event.type) {
case "session.idle":
// ...
break;
case "message.updated":
// ...
break;
}
}

POST /api/v1/workspaces/{workspaceID}/meta/dispose

Section titled “POST /api/v1/workspaces/{workspaceID}/meta/dispose”

Clean up and dispose the workspace instance, releasing all resources. Returns true once the instance has been torn down.

NameInTypeRequiredDescription
workspaceIDpathstringYesThe workspace identifier.
true
const disposed = await client.agent.meta.dispose({
workspaceID: "ws_01HXYZ...",
});