What do you need help with?

We are here and ready to help.
Email: servicedesk@socfortress.co

Talon Deployment Guide

Knowledge Base

Talon Deployment Guide

SOCFortress handles the full server-side installation of Talon. There is one step that must be completed by the client: generating and adding a personal Claude OAuth token. This article explains the split of responsibilities and walks through every step of the process.


Overview

Talon is an automated AI SOC analyst built by SOCFortress. It integrates with the CoPilot stack, pulling raw events from your Wazuh/OpenSearch SIEM, enriching them with threat intelligence, and writing structured investigation reports back into CoPilot.

Because Talon uses the Claude Code API to power its AI analysis, each deployment requires a Claude OAuth token tied to a Claude account. SOCFortress cannot generate this on the client's behalf — the token is personal to the account holder and must be created and added by the client.

ℹ️
Why can't SOCFortress generate the token?

The Claude OAuth token (sk-ant-oat01-...) is tied to an individual Anthropic account and authorises API usage billed to that account. SOCFortress completes all infrastructure work, but the Claude account and token must belong to the client.


Responsibilities at a Glance

SOCFortress
  • Provision and configure the Talon VM
  • Clone and build the Talon application
  • Configure all SIEM, MySQL, CoPilot, Wazuh, and Velociraptor MCP integrations
  • Set up MemPalace persistent memory
  • Build the agent container image
  • Configure and start the talon systemd service
  • Populate .env with all values except the OAuth token
Client
  • Create or provide an Anthropic (Claude) account
  • SSH onto the Talon VM
  • Run claude setup-token to generate the OAuth token
  • Add the token to /opt/talon/.env
  • Restart the Talon service to apply the change

What SOCFortress Handles

SOCFortress completes the following steps before handing over to the client. No action is required from the client for any of these.

  • Clone the Talon repository to /opt/talon and run npm install && npm run build
  • Create /opt/talon/.env with all fields pre-populated (OAuth token placeholder left for client)
  • Configure the mount allowlist at ~/.config/nanoclaw/mount-allowlist.json
  • Run bash siem/setup.sh and populate siem/.env with OpenSearch credentials
  • Run bash mysql/setup.sh and populate mysql/.env with CoPilot database credentials
  • Run bash copilot-mcp/setup.sh and populate copilot-mcp/.env
  • Run bash wazuh-mcp/setup.sh and populate wazuh-mcp/.env
  • Run bash velociraptor-mcp/setup.sh and copy api.config.yaml
  • Run bash mempalace/setup.sh and verify MemPalace builds successfully
  • Build the agent container: CONTAINER_RUNTIME=docker ./container/build.sh
  • Install and enable the talon.service systemd unit
  • Verify /health endpoint responds before handover

What the Client Handles

After SOCFortress completes the installation, the client needs to complete one task: generate a Claude OAuth token and add it to the .env file.

Prerequisite

You need an active Claude account (claude.ai). A free account is sufficient to generate the token; however, a Claude Pro or Team subscription is recommended for production SOC workloads.


Full Deployment Steps

1
 
SOCFortress
Clone & Build

Repository is cloned to /opt/talon and the Node.js application is compiled.

bash
 
 
 
git clone https://github.com/taylorwalton/talon.git /opt/talon
cd /opt/talon
npm install && npm run build
2
 
SOCFortress
Create .env file

The root .env is created with all fields. The OAuth token placeholder is left for the client to fill in (Step 13).

bash
 
 
 
# /opt/talon/.env
CLAUDE_CODE_OAUTH_TOKEN=YOUR_TOKEN_HERE # ← client fills this in
HTTP_API_KEY=
# WEBHOOK_URL=...
# CREDENTIAL_PROXY_HOST=127.0.0.1
3
 
SOCFortress
Configure mount allowlist

Security policy controlling which host directories can be mounted into agent containers.

4–11
 
SOCFortress
Configure all MCP integrations

Setup scripts are run for each integration and credentials are populated in their respective .env files: OpenSearch/SIEM, MySQL/CoPilot DB, CoPilot REST API, Wazuh, Velociraptor, and MemPalace persistent memory.

12
 
SOCFortress
Build container & start service

The agent Docker container is built and the talon.service systemd unit is installed and enabled. The service will start but Talon will not be able to run investigations until the OAuth token is added.

13
 
Client Action Required
Generate Claude OAuth Token & update .env

SSH onto the Talon VM, generate your personal Claude OAuth token, and add it to the .env file. Full instructions are in the next section.

14
 
Client Action Required
Restart Talon & verify

Restart the service and confirm the health endpoint responds and the token is recognised.

bash
 
 
 
systemctl restart talon
curl http://localhost:3100/health

Claude OAuth Token — Step-by-Step

⚠️
Keep this token private

Your OAuth token authorises API calls on your Anthropic account. Treat it like a password — never share it or commit it to version control.

Step 1 — SSH onto the Talon VM

Connect to the VM that SOCFortress provisioned for you. The Talon application is installed at /opt/talon.

Step 2 — Navigate to the Talon directory

bash
 
 
 
cd /opt/talon

Step 3 — Generate the OAuth token

Run the following command. You will be prompted to log in to your Claude account in a browser. Once authenticated, the token will be printed to your terminal.

bash
 
 
 
# Log into your account 
claude 

# Then generate setup-token
​​​​​​​claude setup-token

The output will look like:

output
 
 
 
Your Claude OAuth token:

 sk-ant-oat01-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Copy this token and add it to your .env file.

Copy the full token — you will need it in the next step.

Step 4 — Add the token to /opt/talon/.env

Open the .env file with any editor:

bash
 
 
 
nano /opt/talon/.env

Find the line that reads CLAUDE_CODE_OAUTH_TOKEN=YOUR_TOKEN_HERE and replace the placeholder with your token:

.env
 
 
 
CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

# Optional: webhook endpoint for the 15-minute SOC alert digest
# WEBHOOK_URL=https://your-endpoint.example.com/talon-digest
# WEBHOOK_SECRET=optional-bearer-token

# Required: API key for all HTTP channel requests (except /health)
HTTP_API_KEY=

# Optional: restrict the credential proxy to loopback only (default: 0.0.0.0)
# CREDENTIAL_PROXY_HOST=127.0.0.1

Save and close the file (Ctrl+O, then Ctrl+X in nano).

Step 5 — Restart the Talon service

bash
 
 
 
systemctl restart talon
systemctl status talon # confirm it is running

.env Reference

Variable Required Set by Description
CLAUDE_CODE_OAUTH_TOKEN Yes Client Personal Claude OAuth token. Generated via claude setup-token.
HTTP_API_KEY Yes SOCFortress API key for all HTTP channel requests (except /health). Pre-populated.
WEBHOOK_URL No SOCFortress Optional webhook endpoint for the 15-minute SOC alert digest.
WEBHOOK_SECRET No SOCFortress Optional bearer token for the webhook endpoint.
CREDENTIAL_PROXY_HOST No SOCFortress Restrict the credential proxy to loopback only. Default: 0.0.0.0.

Verification

Once the service is restarted with a valid token, use these commands to confirm everything is working:

bash
 
 
 
# Health check (no auth required)
curl http://localhost:3100/health

# Set your API key
export TALON_API_KEY="your-http-api-key"

# Test SIEM connectivity
curl -s -N -X POST http://localhost:3100/message \
 -H "Content-Type: application/json" \
 -H "x-api-key: $TALON_API_KEY" \
 -d '{"message": "Check cluster health", "sender": "test"}'

Troubleshooting

Symptom Likely Cause Fix
Service starts but investigations fail immediately OAuth token missing or malformed in .env Re-check CLAUDE_CODE_OAUTH_TOKEN in /opt/talon/.env. Ensure no trailing spaces or line breaks. Restart the service.
claude setup-token command not found Claude CLI not installed Contact SOCFortress — the CLI should have been installed as part of the deployment. Run which claude to check the path.
All MCP tools unavailable after startup Mount allowlist misconfigured Check ~/.config/nanoclaw/mount-allowlist.json — the mempalace-data entry must appear before the project root entry.
/health returns connection refused Service not running Run systemctl status talon and check /opt/talon/logs/talon.error.log for the root cause.
Token expires or investigations stop working after some time OAuth token expired Re-run claude setup-token from /opt/talon, update .env, and restart the service.
💬
Need Help?

Reach out via the SOCFortress service desk or on Discord. For token-specific issues, contact Anthropic support at support.anthropic.com.

Facebook Share Tweet

Was this article helpfu?

Yes No

Thank you for voting

×
Select company

You are related to multiple companies. Please select the company you wish to login as.