# ClaudeTools Discord Bot

Discord bot providing MSP team access to ClaudeTools database, M365 remediation-tool, and Claude AI assistance through Discord channels.

## Features

- **Conversational AI**: Powered by Claude API with full context awareness
- **ClaudeTools Integration**: Query MSP database (clients, sessions, tasks, infrastructure)
- **M365 Security**: Run breach checks and tenant sweeps via remediation-tool
- **Thread-Based**: Isolated conversations with full history
- **Streaming Responses**: Real-time updates as Claude thinks and executes tools

## Architecture

As of Phase 1.5, the bot is "Claude Code in a Discord channel." Each Discord
thread is a persistent `ClaudeSDKClient` session whose `cwd` is the ClaudeTools
repo root, with `.claude/CLAUDE.md` as the system prompt. The agent uses the
Claude Agent SDK's native tools (Read, Edit, Write, Bash, Glob, Grep, etc.) —
the bot does not hand-write tool definitions or call the ClaudeTools HTTP API.

```
Discord thread  ──>  MessageHandler  ──>  ClaudeAgentManager
                                                │
                                                v
                                       ClaudeSDKClient (per thread)
                                       cwd = ClaudeTools repo
                                       system_prompt = .claude/CLAUDE.md
                                                │
                                                v
                                       Native SDK tools:
                                       Read / Edit / Write / Bash / Glob / Grep / ...
```

## Prerequisites

- **Python 3.11+**
- **Discord Bot** created in Discord Developer Portal
- **Anthropic API Key** for Claude access
- **ClaudeTools API** running at http://172.16.3.30:8001
- **Git Bash** (Windows) for remediation-tool scripts
- **SOPS Vault** accessible at D:\vault (Windows) or configured path

## Setup

### 1. Discord Bot Setup

1. Go to [Discord Developer Portal](https://discord.com/developers/applications)
2. Create New Application
3. Go to "Bot" section
4. Click "Add Bot"
5. Enable these **Privileged Gateway Intents**:
   - Message Content Intent
   - Server Members Intent
6. Copy the bot token
7. Go to "OAuth2" → "URL Generator"
8. Select scopes: `bot`, `applications.commands`
9. Select bot permissions:
   - Send Messages
   - Send Messages in Threads
   - Create Public Threads
   - Read Message History
   - Use Slash Commands
10. Copy the generated URL and invite bot to your server

### 2. Environment Configuration

1. Copy `.env.example` to `.env`:
   ```bash
   cp .env.example .env
   ```

2. Edit `.env` and fill in your values:
   ```env
   DISCORD_TOKEN=your_bot_token_from_step_1
   DISCORD_GUILD_ID=your_server_id
   ANTHROPIC_API_KEY=your_anthropic_key
   CLAUDETOOLS_API_KEY=your_api_key

   # Windows paths (adjust for your system)
   VAULT_PATH=D:\vault
   CLAUDETOOLS_ROOT=D:\claudetools
   ```

### 3. Install Dependencies

```bash
pip install -r requirements.txt
```

## Running the Bot

### Development (Command Line)

```bash
cd projects/discord-bot
python -m bot.main
```

### Production (Windows Service with NSSM)

1. Download [NSSM](https://nssm.cc/)

2. Install as service:
   ```powershell
   nssm install ClaudeToolsDiscordBot "C:\Python311\python.exe" "-m bot.main"
   nssm set ClaudeToolsDiscordBot AppDirectory "D:\claudetools\projects\discord-bot"
   nssm set ClaudeToolsDiscordBot Start SERVICE_AUTO_START
   nssm set ClaudeToolsDiscordBot AppStdout "D:\claudetools\projects\discord-bot\logs\stdout.log"
   nssm set ClaudeToolsDiscordBot AppStderr "D:\claudetools\projects\discord-bot\logs\stderr.log"
   ```

3. Start service:
   ```powershell
   nssm start ClaudeToolsDiscordBot
   ```

4. Check status:
   ```powershell
   nssm status ClaudeToolsDiscordBot
   ```

## Usage

### Mention-Based Conversations

Start a conversation by mentioning the bot:

```
@ClaudeTools hello!
@ClaudeTools list clients from last week
@ClaudeTools check john.trozzi@cascadestucson.com for breach
```

The bot will:
1. Create a dedicated thread for the conversation
2. Stream Claude's response with live updates
3. Execute tools as needed (database queries, breach checks)
4. Maintain full conversation context

### Example Queries

**ClaudeTools Database:**
```
@ClaudeTools show me GuruRMM sessions from April
@ClaudeTools list all Cascades tickets
@ClaudeTools what infrastructure do we manage for Dataforth?
```

**M365 Breach Checks:**
```
@ClaudeTools check user@domain.com for breach
@ClaudeTools sweep cascadestucson.com tenant for security issues
```

**General Questions:**
```
@ClaudeTools what projects are we working on?
@ClaudeTools summarize work from yesterday
```

## Project Structure

```
discord-bot/
├── bot/
│   ├── main.py                  # Entry point
│   ├── config.py                # Configuration
│   ├── handlers/
│   │   └── message_handler.py   # Discord message handling
│   ├── claude/
│   │   ├── client.py            # Claude API wrapper
│   │   └── tools.py             # Tool definitions
│   ├── services/               # (Phase 2) ClaudeTools API client
│   ├── auth/                   # (Phase 2) User permissions
│   └── formatting/             # (Phase 4) Embeds and tables
├── .env                        # Environment config (gitignored)
├── .env.example                # Template
├── requirements.txt
└── README.md
```

## Development Roadmap

### Phase 1.5: Claude Agent SDK refactor (Current)
- [x] Discord bot connection
- [x] Claude Agent SDK streaming (replaces raw Anthropic SDK)
- [x] Per-thread persistent agent sessions (`ClaudeSDKClient`)
- [x] Workspace = ClaudeTools repo; system prompt = `.claude/CLAUDE.md`
- [x] Native SDK tools (Read/Edit/Write/Bash/Glob/Grep) — no hand-written tools
- The hand-written `query_claudetools_api`, `run_breach_check`, and
  `run_tenant_sweep` tools from the Phase 1 scaffold were removed. The agent
  invokes those workflows via the existing skills under `.claude/skills/` and
  via Bash + the vault wrapper, the same way Claude Code does.

### Phase 2: ClaudeTools API Integration
- [ ] HTTP client with JWT auth
- [ ] Implement `query_claudetools_api` tool
- [ ] User role mapping (admin vs tech)
- [ ] Audit logging

### Phase 3: Remediation-Tool Integration
- [ ] Bash subprocess runner
- [ ] Implement `run_breach_check` tool
- [ ] Implement `run_tenant_sweep` tool
- [ ] Progress streaming
- [ ] Artifact upload

### Phase 4: Polish
- [ ] Confirmation buttons for remediation
- [ ] Rich embeds for structured data
- [ ] Select menus for multi-choice
- [ ] Ephemeral messages for sensitive data
- [ ] Slash commands

## Troubleshooting

### Bot doesn't respond to mentions

1. Check bot is online: Look for green status in Discord
2. Check intents: Message Content Intent must be enabled in Discord Developer Portal
3. Check logs: `tail -f logs/bot.log`
4. Verify permissions: Bot needs "Send Messages" and "Send Messages in Threads"

### Path validation errors

```
FileNotFoundError: Vault not found at D:\vault
```

**Fix:** Update `VAULT_PATH` in `.env` to match your system.

### Module import errors

```
ModuleNotFoundError: No module named 'discord'
```

**Fix:** Install dependencies: `pip install -r requirements.txt`

## Contributing

This is Phase 1 MVP. Next steps:
1. Implement tool execution (see `bot/handlers/message_handler.py` `execute_tool` placeholder)
2. Add ClaudeTools API client (see `bot/services/`)
3. Add remediation script runner (see `bot/services/`)

## License

Internal Arizona Computer Guru project.
