# Agent: Meta

**Page:** api/agent/meta

[Download Raw Markdown](./api/agent/meta.md)

---

{/* AUTO-GENERATED — Do not edit manually. Regenerate with: npm run docs:api:generate */}



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

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

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

#### Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `workspaceID` | path | string | Yes | The workspace identifier. |

#### Response



```json
{
  "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"
}
```



#### SDK

```ts
const paths = await client.agent.meta.getPaths({
  workspaceID: "ws_01HXYZ...",
});
```

---

## Agents

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

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

#### Parameters



| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `workspaceID` | path | string | Yes | workspaceID path parameter |


#### Response



```json
[
  {
    "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": {}
  }
]
```



#### SDK

```ts
const agents = await client.agent.meta.listAgents({
  workspaceID: "ws_01HXYZ...",
});
```

---

## Skills

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

Get a list of all available skills for this workspace.

#### Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `workspaceID` | path | string | Yes | The workspace identifier. |

#### Response



```json
[
  {
    "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
  }
]
```



#### SDK

```ts
const skills = await client.agent.meta.listSkills({
  workspaceID: "ws_01HXYZ...",
});
```

---

## Commands

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

Get a list of all available commands for this workspace.

#### Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `workspaceID` | path | string | Yes | The workspace identifier. |

#### Response



```json
[
  {
    "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"]
  }
]
```



#### SDK

```ts
const commands = await client.agent.meta.listCommands({
  workspaceID: "ws_01HXYZ...",
});
```

---

## Tooling status

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

Get formatter status for this workspace.

#### Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `workspaceID` | path | string | Yes | The workspace identifier. |

#### Response



```json
[
  {
    "name": "prettier",
    "extensions": [".ts", ".tsx", ".js", ".jsx", ".json", ".md"],
    "enabled": true
  },
  {
    "name": "gofmt",
    "extensions": [".go"],
    "enabled": true
  },
  {
    "name": "black",
    "extensions": [".py"],
    "enabled": false
  }
]
```



#### SDK

```ts
const formatters = await client.agent.meta.getFormatterStatus({
  workspaceID: "ws_01HXYZ...",
});
```

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

Get LSP server status for this workspace.

#### Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `workspaceID` | path | string | Yes | The workspace identifier. |

#### Response



```json
[
  {
    "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"
  }
]
```



#### SDK

```ts
const lsp = await client.agent.meta.getLspStatus({
  workspaceID: "ws_01HXYZ...",
});
```

---

## Version control

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

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

#### Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `workspaceID` | path | string | Yes | The workspace identifier. |

#### Response



```json
{
  "branch": "feat/agent-meta-docs"
}
```



#### SDK

```ts
const vcs = await client.agent.meta.getVcs({
  workspaceID: "ws_01HXYZ...",
});
```

---

## Event stream

### `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.


The response uses `text/event-stream` (Server-Sent Events). Each frame is a JSON `agent_Event` object — see the `agent_Event` schema for the full set of event types.


#### Parameters



| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `workspaceID` | path | string | Yes | workspaceID path parameter |


#### Response



```json
{
  "type": "session.idle",
  "properties": {
    "sessionID": "01HXYZSESSIONID0000000000"
  }
}
```



#### SDK

```ts
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

### `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.


After calling `dispose`, the workspace instance is no longer usable. Create a new workspace to continue working in the same project.


#### Parameters

| Name | In | Type | Required | Description |
|------|-----|------|----------|-------------|
| `workspaceID` | path | string | Yes | The workspace identifier. |

#### Response



```json
true
```



#### SDK

```ts
const disposed = await client.agent.meta.dispose({
  workspaceID: "ws_01HXYZ...",
});
```