> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getcliq.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Diagnose this daemon

> Checks whether this daemon is ready to run teams and reports every problem it finds:
the data directory and database, installed agents and their settings, teams and the
tools they need, registered workspaces whose folders are missing, and runs that errored
in the last 24 hours. Takes no fields; send `{}`.

Problems are reported in the reply (`overall: fail`), not as an error status.

From the CLI: `cliq doctor`.

No credential is needed from this machine. From another host, send `Authorization: Bearer` with a dispatch token CliqHub signed for this daemon or a `cliq_tok_…` personal token of a user in the daemon's realm; this only works once the daemon is connected to CliqHub. See [Authentication](/daemon-api/overview#authentication).



## OpenAPI

````yaml /openapi/daemon-by-tag/daemon-workspaces.yaml post /v1/workspaces/doctor
openapi: 3.1.0
info:
  title: cliqd API
  version: 1.9.48
  description: >-
    HTTP API of `cliqd`, the local Cliq daemon. Generated from the daemon source
    by `scripts/generate_daemon_openapi.mjs` — do not edit by hand. See the
    [overview](/daemon-api/overview).
servers:
  - url: http://127.0.0.1:4900
    description: Local daemon (default port; `CLIQ_DAEMON_PORT` changes it)
security: []
tags:
  - name: Daemon Workspaces
    description: >-
      A **workspace** is a project folder registered with this daemon. You
      register it once

      (Register a workspace, `cliq init`), assign one or more installed teams to
      it

      (Assign a team to a workspace, `cliq assemble`), then start runs in it
      (Start a run,

      `cliq run`). Workspaces live in the daemon's own catalog; the only thing
      written into

      the folder is an empty `.cliq/` directory.


      Most endpoints take the absolute folder path as `workspace_dir`; assign
      and remove also

      accept the catalog `workspace_id`. Relative paths are resolved against the
      daemon's

      working directory, so always send absolute paths.
paths:
  /v1/workspaces/doctor:
    post:
      tags:
        - Daemon Workspaces
      summary: Diagnose this daemon
      description: >-
        Checks whether this daemon is ready to run teams and reports every
        problem it finds:

        the data directory and database, installed agents and their settings,
        teams and the

        tools they need, registered workspaces whose folders are missing, and
        runs that errored

        in the last 24 hours. Takes no fields; send `{}`.


        Problems are reported in the reply (`overall: fail`), not as an error
        status.


        From the CLI: `cliq doctor`.


        No credential is needed from this machine. From another host, send
        `Authorization: Bearer` with a dispatch token CliqHub signed for this
        daemon or a `cliq_tok_…` personal token of a user in the daemon's realm;
        this only works once the daemon is connected to CliqHub. See
        [Authentication](/daemon-api/overview#authentication).
      operationId: daemon_post_workspaces_doctor
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties: {}
            examples:
              default:
                value: {}
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                required:
                  - ok
                  - data
                properties:
                  ok:
                    type: boolean
                    const: true
                  data:
                    $ref: '#/components/schemas/DoctorResult'
              example:
                ok: true
                data:
                  overall: fail
                  checks:
                    - name: database
                      pass: true
                      message: sqlite open (/home/dev/.cliqrc/cliq.db)
                    - name: agents
                      pass: true
                      message: 3 registered
                    - name: recent_runs
                      pass: false
                      message: 2 errored run(s) in the last 24h
                  agents:
                    - name: claude-code
                      agent_type: exec
                      ready: false
                      issues:
                        - missing required setting 'api_key'
                      setup_hint: cliq settings set agents.claude-code.api_key <value>
                  workspaces: []
                  teams:
                    - slug: code-review
                      scope: acme
                      issues: []
        '400':
          description: >-
            `PAYLOAD_INVALID` — The body (query string for `GET`) fails the
            request schema. `details` lists each issue.


            `BAD_REQUEST` — The body is not valid JSON or is larger than the
            route allows (10 MB; artifact uploads more).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReply'
              examples:
                PAYLOAD_INVALID:
                  summary: PAYLOAD_INVALID
                  value:
                    ok: false
                    error:
                      code: PAYLOAD_INVALID
                      message: Payload failed schema validation
                BAD_REQUEST:
                  summary: BAD_REQUEST
                  value:
                    ok: false
                    error:
                      code: BAD_REQUEST
                      message: >-
                        Request body could not be read: Unexpected token } in
                        JSON at position 12
        '401':
          description: >-
            `UNAUTHORIZED` — A caller on another host sent no `Authorization:
            Bearer` token, or one that does not verify (expired, wrong
            audience).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReply'
              examples:
                UNAUTHORIZED:
                  summary: UNAUTHORIZED
                  value:
                    ok: false
                    error:
                      code: UNAUTHORIZED
                      message: Missing or invalid Authorization Bearer token
        '403':
          description: >-
            `WEB_REQUEST_REFUSED` — The request carries an `Origin` header (it
            came from a web page).


            `HOST_NOT_LOCAL` — A loopback caller addressed a `Host` other than
            localhost (DNS rebinding guard).


            `LOCAL_ONLY` — The daemon isn't connected to CliqHub (no dispatch
            key) and the caller is on another host.


            `FORBIDDEN` — A `cliq_tok_…` token's user is not in this daemon's
            realm ACL, or the ACL is not loaded yet.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReply'
              examples:
                WEB_REQUEST_REFUSED:
                  summary: WEB_REQUEST_REFUSED
                  value:
                    ok: false
                    error:
                      code: WEB_REQUEST_REFUSED
                      message: cliqd doesn't accept requests from web pages
                HOST_NOT_LOCAL:
                  summary: HOST_NOT_LOCAL
                  value:
                    ok: false
                    error:
                      code: HOST_NOT_LOCAL
                      message: cliqd only answers requests addressed to localhost
                LOCAL_ONLY:
                  summary: LOCAL_ONLY
                  value:
                    ok: false
                    error:
                      code: LOCAL_ONLY
                      message: >-
                        This cliqd isn't connected to CliqHub yet, so from
                        another machine it only accepts a local token (minted by
                        tokens/create on the machine running cliqd)
                FORBIDDEN:
                  summary: FORBIDDEN
                  value:
                    ok: false
                    error:
                      code: FORBIDDEN
                      message: Access denied — identity not in realm ACL
        '500':
          description: >-
            `INTERNAL_ERROR` — An unexpected daemon fault. The message names the
            request id; the cause is in the cliqd log.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorReply'
              examples:
                INTERNAL_ERROR:
                  summary: INTERNAL_ERROR
                  value:
                    ok: false
                    error:
                      code: INTERNAL_ERROR
                      message: >-
                        cliqd hit an unexpected error (request 7f3a…). Details
                        are in the cliqd log.
      security:
        - {}
        - DaemonBearer: []
components:
  schemas:
    DoctorResult:
      type: object
      required:
        - overall
        - checks
        - agents
        - workspaces
        - teams
      properties:
        overall:
          type: string
          enum:
            - pass
            - fail
          description: '`fail` when any check, agent, workspace or team has a problem.'
          example: fail
        checks:
          type: array
          description: >-
            Daemon-level checks (data directory, database, counts of agents,
            teams and scopes, sign-in, errored runs in the last 24 hours, tools
            teams need).
          items:
            type: object
            required:
              - name
              - pass
              - message
            properties:
              name:
                type: string
                example: recent_runs
              pass:
                type: boolean
                example: false
              message:
                type: string
                example: 2 errored run(s) in the last 24h
        agents:
          type: array
          items:
            $ref: '#/components/schemas/AgentDiagnostic'
        workspaces:
          type: array
          items:
            type: object
            required:
              - id
              - path
              - team
              - issues
            properties:
              id:
                type: string
                format: uuid
              path:
                type: string
                example: /home/dev/acme-api
              team:
                type:
                  - string
                  - 'null'
                description: '`scope/slug` of the first assigned team.'
                example: acme/code-review
              issues:
                type: array
                items:
                  type: string
                example:
                  - directory missing
        teams:
          type: array
          items:
            type: object
            required:
              - slug
              - scope
              - issues
            properties:
              slug:
                type: string
                example: code-review
              scope:
                type: string
                example: acme
              issues:
                type: array
                items:
                  type: string
                example: []
    ErrorReply:
      type: object
      description: >-
        Every failure. Switch on `error.code` — it is stable; `message` is for
        people and may change.
      required:
        - ok
        - error
      properties:
        ok:
          type: boolean
          const: false
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Stable error code. See [Errors](/daemon-api/errors).
              example: TEAM_NOT_FOUND
            message:
              type: string
              description: What went wrong and, where possible, what to do.
              example: Team 'acme/code-review' not found
            details:
              description: >-
                Structured detail when there is some: the list of schema issues
                for `PAYLOAD_INVALID`, the agent problems for
                `TEAM_AGENT_CONFIG_REQUIRED`, …
    AgentDiagnostic:
      type: object
      description: Readiness of one agent.
      required:
        - name
        - agent_type
        - ready
        - issues
        - setup_hint
      properties:
        name:
          type: string
          example: claude-code
        agent_type:
          type: string
          description: Agent kind from its manifest (for example `exec` or `connector`).
          example: exec
        ready:
          type: boolean
          example: false
        issues:
          type: array
          items:
            type: string
          description: What is wrong. Empty when ready.
          example:
            - missing required setting 'api_key'
        setup_hint:
          type: string
          description: The command that fixes it.
          example: cliq settings set agents.claude-code.api_key <value>
  securitySchemes:
    DaemonBearer:
      type: http
      scheme: bearer
      description: >-
        Not needed from the same machine. From another host: a dispatch JWT
        CliqHub signed for this daemon, or a `cliq_tok_…` personal token whose
        user is in the daemon's realm.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.