{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "huabeitech--agent-desk",
    "name": "AgentDesk",
    "tagline": "Apache-licensed AI help desk in Go and Next.js: RAG answers, answerability gate, human handoff, tickets.",
    "shortTagline": "Apache-licensed AI help desk",
    "description": "AgentDesk is a self-hosted customer support system where an AI agent answers first from a knowledge base, refuses when retrieval is weak, hands off to human agents, and opens tickets, with an embeddable widget and Telegram, WeChat, and Zalo channels. Configuration is a single config/config.yaml; models are any OpenAI-compatible provider. The backend exposes an HTTP API for conversations, messages, customers, and webhooks, and an internal MCP tool server at /api/mcp.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "support-bookkeeping",
    "alternativeTo": [
      "Intercom",
      "Zendesk"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "hybrid",
    "provenance": "unknown",
    "codeStack": {
      "languages": [
        "Go",
        "TypeScript"
      ],
      "frameworks": [
        "Gin",
        "GORM",
        "Next.js 16",
        "React 19",
        "shadcn/ui"
      ],
      "packageManager": "go modules, pnpm",
      "database": [
        "SQLite",
        "MySQL",
        "PostgreSQL",
        "Qdrant",
        "LanceDB"
      ],
      "hostingTarget": [
        "Docker Compose",
        "single Go binary"
      ]
    },
    "modelStack": {
      "providers": [
        "any OpenAI-compatible provider"
      ],
      "models": [],
      "requiredKeys": [],
      "promptLocations": [
        "AI Agent configuration (dashboard UI)"
      ],
      "tools": [
        "Skills",
        "MCP tool servers configured under mcp.servers"
      ]
    },
    "repos": [
      {
        "url": "https://github.com/huabeitech/agent-desk",
        "owner": "huabeitech",
        "name": "agent-desk",
        "license": "Apache-2.0",
        "stars": 222,
        "lastCommit": "2026-09-02"
      }
    ],
    "interface": {
      "kind": "gui",
      "url": "https://github.com/huabeitech/agent-desk",
      "official": true,
      "hosted": "local"
    },
    "operability": "gui",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Start a support conversation and send customer messages",
        "reachable": false,
        "evidence": "/api/conversation and /api/message exist (internal/bootstrap/server.go) behind ExternalUserMiddleware customer-session tokens, but no docs describe them; docs site returns 403 and README has no API section"
      },
      {
        "job": "Register and look up customers",
        "reachable": false,
        "evidence": "/api/customer/session_exchange and /api/dashboard/customer routes exist in source only; undocumented"
      },
      {
        "job": "Receive events by webhook",
        "reachable": false,
        "evidence": "/api/webhooks/org-sync and dos-org-sync are org-directory sync hooks in source, not documented event webhooks"
      },
      {
        "job": "Create and move tickets",
        "reachable": false,
        "evidence": "/api/dashboard/ticket routes exist behind the dashboard Bearer token; undocumented"
      },
      {
        "job": "Manage knowledge bases and FAQs",
        "reachable": false,
        "evidence": "dashboard-only routes; undocumented"
      },
      {
        "job": "Hand off to a human agent",
        "reachable": false,
        "evidence": "runtime decision inside the agent flow; no documented external call"
      },
      {
        "job": "Configure AI agents, models, and skills",
        "reachable": false,
        "evidence": "model configuration and agent binding are dashboard screens"
      },
      {
        "job": "Connect Telegram, WeChat, Zalo",
        "reachable": false,
        "evidence": "internal/handlers/third holds inbound channel webhooks; setup is configuration"
      },
      {
        "job": "Drive AgentDesk from an external agent over MCP",
        "reachable": false,
        "evidence": "app.Any('/api/mcp') mounts mcps.NewHTTPHandler for the runtime's own tools; not documented as an inbound interface or its auth"
      }
    ],
    "editions": [
      {
        "name": "Free (self-hosted)",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/huabeitech/agent-desk"
          },
          {
            "kind": "container",
            "url": "https://github.com/huabeitech/agent-desk",
            "command": "docker compose up -d --build"
          }
        ]
      }
    ],
    "skills": {
      "kind": "contributor",
      "paths": [
        ".codex/skills/*/SKILL.md"
      ],
      "install": null,
      "note": "Repo carries contributor-facing development skills (git commit, release versioning) for working on the app. [contributor tooling, not adopter-facing]"
    },
    "customization": {
      "summary": "Copy config/config.example.yaml to config/config.yaml (docker/agent-desk.yaml for Compose). An SMB sets language (defaults to zh-CN), server.port and cors.allowedOrigins, db.type and dsn, auth.passwordLoginEnabled and tokenTTLHours, customerSession.secret, storage.default (local or oss), vectorDB.type (qdrant or lancedb), mcp.servers, and oidc. Model providers, embedding models, prompts, knowledge bases, and agent-to-skill bindings are configured in the dashboard, not files. Change the default admin password before exposing it.",
      "envVars": [],
      "configFiles": [
        "config/config.yaml",
        "config/config.example.yaml",
        "docker/agent-desk.yaml"
      ],
      "promptFiles": [],
      "effort": "config-only",
      "editCount": 3
    },
    "useWhen": [
      "we want an AI-first support widget that only answers from our own docs and escalates to a person when it cannot",
      "we need a self-hosted help desk under a permissive license that we can point at any OpenAI-compatible model, including a local one"
    ],
    "accounts": [
      "an OpenAI-compatible model provider (or a local server)",
      "Alibaba Cloud OSS (optional storage)",
      "Telegram, WeChat, or Zalo developer accounts (optional channels)"
    ],
    "active": true,
    "lastActivity": "2026-09-02",
    "gotchas": [
      "Documentation site returned 403/404 during analysis; README is the working reference",
      "Default language zh-CN and default admin password ChangeMe123!",
      "Needs Qdrant (or a LanceDB build with native libs) even for local trials",
      "222 stars and a single vendor org; verify users beyond the Reddit launch"
    ],
    "fit": {
      "adaptable": 3,
      "operable": 1
    },
    "evidence": {
      "formFactor": "README: Docker Compose starts agent-desk on 8083 with mysql and qdrant; admin dashboard and customer chat pages",
      "executionModel": "README AI Agent Workflow: fixed orchestration (retrieve, answerability gate, LLM reply, handoff)",
      "operability": "internal/services/auth_service.go: POST /api/auth/login issues an access token used as 'Authorization: Bearer <token>' (or ?accessToken=) on /api/dashboard/*; /api/conversation and /api/message use a customer-session token from session_exchange. None of this is documented: agent-desk.huabei.pro/docs returns 403, README links only Docker, widget, and model-provider pages, and no API page exists in the repo tree.",
      "effort": "README: cp config/config.example.yaml config/config.yaml; example file lists server, db, auth, storage, vectorDB, mcp, oidc sections",
      "editions": "README: open-source, self-hosted; no paid edition mentioned",
      "active": "gh api: pushed 2026-09-02, 222 stars"
    },
    "confidence": {
      "formFactor": 0.9,
      "executionModel": 0.9,
      "operability": 0.8,
      "effort": 0.85,
      "reach": 0.75,
      "editions": 0.8
    },
    "openQuestions": [
      "If the Builder publishes API docs (login token, dashboard endpoints, /api/mcp auth), re-verify as official/api: the code surface is there",
      "Public API docs (agent-desk.huabei.pro/docs) content: endpoint list and channel keys",
      "Any hosted or paid edition from huabei"
    ],
    "sources": [
      {
        "url": "https://github.com/huabeitech/agent-desk",
        "foundBy": "sourcing:support-bookkeeping:community"
      },
      {
        "url": "https://agent-desk.huabei.pro",
        "foundBy": "sourcing:support-bookkeeping:github"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "dispute",
      "reason": "A token-authenticated HTTP API exists in the Go source (password login returns a Bearer token for /api/dashboard/*), but nothing documents it and the docs site is unreachable, so it fails the documented-API test; screen control of the dashboard is the only stated interface for now.",
      "disputed": [
        {
          "field": "operability",
          "reason": "Claimed official/api on the basis of source-only handlers; the API is undocumented (docs 403, README silent), downgraded to gui pending Builder docs"
        }
      ]
    },
    "url": "apps/huabeitech--agent-desk.html",
    "coverage": "none",
    "paid": false,
    "source": "research/verified/huabeitech--agent-desk.json"
  }
}
