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.
Workspace paths
Section titled “Workspace paths”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.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceID | path | string | Yes | The workspace identifier. |
Response
Section titled “Response”{ "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...",});Agents
Section titled “Agents”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.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceID | path | string | Yes | workspaceID path parameter |
Response
Section titled “Response”[ { "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...",});Skills
Section titled “Skills”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.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceID | path | string | Yes | The workspace identifier. |
Response
Section titled “Response”[ { "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...",});Commands
Section titled “Commands”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.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceID | path | string | Yes | The workspace identifier. |
Response
Section titled “Response”[ { "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...",});Tooling status
Section titled “Tooling status”GET /api/v1/workspaces/{workspaceID}/meta/formatter/status
Section titled “GET /api/v1/workspaces/{workspaceID}/meta/formatter/status”Get formatter status for this workspace.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceID | path | string | Yes | The workspace identifier. |
Response
Section titled “Response”[ { "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.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceID | path | string | Yes | The workspace identifier. |
Response
Section titled “Response”[ { "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...",});Version control
Section titled “Version control”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.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceID | path | string | Yes | The workspace identifier. |
Response
Section titled “Response”{ "branch": "feat/agent-meta-docs"}const vcs = await client.agent.meta.getVcs({ workspaceID: "ws_01HXYZ...",});Event stream
Section titled “Event stream”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.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceID | path | string | Yes | workspaceID path parameter |
Response
Section titled “Response”{ "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; }}Lifecycle
Section titled “Lifecycle”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.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceID | path | string | Yes | The workspace identifier. |
Response
Section titled “Response”trueconst disposed = await client.agent.meta.dispose({ workspaceID: "ws_01HXYZ...",});