Ctrl K
ComunidadGuías…

hushgate.config.example.json

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
{
  "host": "127.0.0.1",
  "port": 8787,

  "upstreams": {
    "openai": "https://api.openai.com",
    "anthropic": "https://api.anthropic.com"
  },

  "redaction": {
    "defaultPolicy": "pseudonymize",

    "policies": {
      "SECRET": "block",
      "GERMAN_TAX_ID": "hash",
      "IPV4": "allow"
    },

    "dictionary": {
      "names": ["Anna Schmidt"],
      "terms": ["Projekt Nordlicht"]
    },

    "custom": [
      { "name": "employee id", "pattern": "EMP-\\d{5}" }
    ],

    "dobYearRange": { "minYear": 1900, "maxYear": 2012 }
  },

  "briefing": {
    "mode": "auto",
    "text": null,
    "append": "Sign off as the Acme GmbH support desk."
  },

  "limits": {
    "maxBodyBytes": 16777216,
    "upstreamTimeoutMs": 120000,
    "requestTimeoutMs": 60000,
    "idleTimeoutMs": 60000
  },

  "attachments": {
    "enabled": true,
    "maxBytes": 10485760,
    "maxTotalBytes": 33554432,
    "maxCount": 256,
    "maxTextChars": 200000,
    "timeoutMs": 20000,
    "onUnreadable": "block",
    "extractors": [
      {
        "mediaTypes": ["application/pdf"],
        "formats": ["pdf"],
        "command": "pdftotext",
        "args": ["-q", "-enc", "UTF-8", "-", "-"],
        "timeoutMs": 20000
      }
    ]
  },

  "audit": {
    "enabled": true,
    "path": "hushgate-audit.jsonl"
  },

  "organisation": {
    "name": "Acme GmbH",
    "contact": "datenschutz@acme.example",
    "dpo": "A. Datenschutz",
    "purposes": [
      "Drafting customer support replies",
      "Summarising internal documents"
    ]
  },

  "tenants": [
    {
      "id": "support",
      "name": "Support desk",
      "keyHash": "sha256:0000000000000000000000000000000000000000000000000000000000000000",
      "quotas": { "requestsPerMinute": 120, "tokensPerDay": 2000000 },
      "audit": { "path": "audit/support.jsonl" },
      "redaction": {
        "policies": { "SECRET": "block" }
      },
      "briefing": {
        "append": "Answer in German unless the customer wrote in another language."
      }
    }
  ],

  "residency": {
    "mode": "sanitize",
    "routes": {
      "openai.chat.completions": "sanitize",
      "anthropic.messages": "sanitize"
    },
    "categories": {
      "GERMAN_TAX_ID": "block"
    },
    "requireDataControls": false,
    "allow": [
      {
        "endpoint": "https://api.openai.com",
        "jurisdiction": "US",
        "legalBasis": "EU-US DPF certified; SCCs in the DPA of 2026-01-12",
        "note": "reviewed by the DPO; replace with an EU endpoint when feasible"
      },
      {
        "endpoint": "https://api.anthropic.com",
        "jurisdiction": "US",
        "legalBasis": "SCCs in the commercial agreement of 2026-01-12"
      }
    ],
    "endpoints": []
  }
}