Quickstart
Deskhand is one container that connects to your chat platform, indexes your how-to docs, and answers questions with links to the page it used. You start from a small starter project; the engine comes from the deskhand npm package.
You need:
- Docker with Compose, and Node 24
- An API key for an OpenAI-compatible model, OpenAI, or Anthropic
- Your IT how-to docs as Markdown or text files, or a Google Drive folder or Confluence space
- A Slack workspace where you can install apps, or just a terminal to try the console first
1. Create your project
Use the starter template on GitHub, or clone it:
git clone https://github.com/OWNER/deskhand-starter my-it-agent
cd my-it-agent
npm install Commit package-lock.json; the Docker build installs from it.
my-it-agent/
config/config.yaml
deploy/
docs/
src/main.ts
.env.example config/config.yaml holds your settings, docs/ your runbooks, and src/ the entry point and your code extensions. deploy/ has the Docker files and the Slack and Teams app manifests.
2. Add your secrets
cp .env.example .env .env holds secrets only. Add your model key, which Deskhand needs to start, and the two Slack tokens from Slack setup:
LLM_API_KEY=sk-...
SLACK_BOT_TOKEN=xoxb-...
SLACK_APP_TOKEN=xapp-... 3. Configure
In config/config.yaml, check the model block and keep Slack enabled. This file has no secrets, so commit it.
model:
provider: openai_compatible
base_url: https://api.openai.com/v1
id: gpt-5-mini
api_key_env: LLM_API_KEY
chat:
slack: { enabled: true }
docs:
sources:
- type: local
name: runbooks
path: ./docs 4. Add your docs
The local source reads docs/, which starts empty. Deskhand answers only from the docs you give it, so copy yours in, or set up Google Drive or Confluence instead:
cp -r /path/to/your/runbooks/. docs/ 5. Start it
docker compose -f deploy/docker-compose.yml up Deskhand indexes your docs in the background and connects to Slack. DM the app, or invite it to a channel and mention it:
@Deskhand How do I connect to the VPN? Try it in your terminal
The console reads messages from your terminal and answers with the model in config/config.yaml. It needs the model key in .env, and no chat platform.
npm run console The console ignores the chat: section. Each line you type is a message. When a tool asks for approval, type approve <id> or deny <id>.
Next steps
- Read how Deskhand works
- Add Microsoft Teams or Google Chat
- Connect Google Drive or Confluence
- Add tools with MCP servers or code extensions