Configuration

Configuration reference

The structure of data/settings.json and what each section controls.

File location

  • Windows: %APPDATA%/Sales Claw/data/settings.json
  • macOS: ~/Library/Application Support/Sales Claw/data/settings.json
  • Linux: ~/.config/Sales Claw/data/settings.json

Top-level shape

json
{
  "company": { ... },
  "aiCli": { ... },
  "sendPolicy": { ... },
  "exclusions": { ... },
  "ports": { ... },
  "templates": { ... }
}

company — your profile

Used to fill form fields and to compose signatures.

json
{
  "company": {
    "name": "Acme, Inc.",
    "contactName": "Jane Doe",
    "email": "jane@acme.example",
    "phone": "+1 555-555-5555",
    "url": "https://acme.example",
    "signature": "Best,\nJane / Acme",
    "complianceFooter": "This is a one-time outreach. Reply STOP to opt out."
  }
}

aiCli — which AI to call

json
{
  "aiCli": {
    "primary": "claude",         // "claude" | "codex" | "gemini"
    "claude":   { "model": "claude-opus-4-7" },
    "codex":    { "model": "gpt-5.5-instant" },
    "gemini":   { "model": "gemini-3.1-pro" },
    "perTaskOverrides": {
      "draftMessage": "claude",
      "industryClassify": "codex"
    }
  }
}

sendPolicy — guardrails before submission

json
{
  "sendPolicy": {
    "requireHumanApproval": true,
    "screenshotBeforeSend": true,
    "captchaBehavior": "stop",      // "stop" | "manual"
    "rateLimitPerMinute": 6,
    "rateLimitPerDay": 300,
    "requireComplianceFooter": true
  }
}

exclusions — never contact these

json
{
  "exclusions": {
    "domains": ["competitor.com"],
    "industries": ["adult", "gambling"],
    "tags": ["do-not-contact"],
    "history": "auto"               // automatically excludes prior contacts
  }
}

templates — per-industry copy

json
{
  "templates": {
    "saas": { "tone": "direct", "valueAngle": "developer-velocity" },
    "ecommerce": { "tone": "warm", "valueAngle": "conversion" }
  }
}

Editing safely

Edit through the in-app Settings UI whenever possible — it validates the schema before write. If you edit the JSON directly, keep a backup and restart the app to reload.

See also