Skip to content

Configuration Files

protoPen uses several configuration files located in the config/ directory. This directory is bind-mounted into the container at /opt/protopen/config/, so changes on the host take effect after a container restart.

engagement-config.json

Primary configuration for pen testing operations: hardware devices, engagement defaults, and tool risk levels.

Path: config/engagement-config.json

Structure

json
{
  "instance": {
    "name": "protoPen",
    "description": "Mobile pen testing agent — Steam Deck + peripherals"
  },
  "devices": {
    "portapack": {
      "type": "serial",
      "serial_number": "",
      "fallback_port": "/dev/ttyACM0",
      "prompt": "ch>",
      "timeout": 3
    },
    "flipper": {
      "type": "serial",
      "serial_number": "",
      "fallback_port": "/dev/ttyACM1",
      "prompt": ">: ",
      "timeout": 3
    },
    "marauder": {
      "type": "serial",
      "serial_number": "",
      "fallback_port": "/dev/ttyUSB0",
      "baud_rate": 115200,
      "timeout": 3
    },
    "wifi_adapter": {
      "type": "network",
      "interface": "wlan1",
      "monitor_interface": "wlan1mon"
    }
  },
  "engagement": {
    "default_mode": "passive",
    "workspace_dir": "/home/deck/engagements",
    "alert_webhook": "",
    "alert_channel_id": ""
  },
  "tool_risk": {
    "rf_scan": 0,
    "wifi_deauth": 2,
    "...": "..."
  }
}

Key Sections

SectionDescription
instanceIdentity metadata for this protoPen node
devicesSerial connection settings for each hardware device
engagementDefault engagement mode, workspace directory, Discord alert webhook
risk_levelsMaps mode names to integer levels (passive=0, active=1, redteam=2)
tool_riskMaps individual tool actions to their required risk level

langgraph-config.yaml

Configuration for the LangGraph agent backend (used when AGENT_BACKEND=langgraph).

Path: config/langgraph-config.yaml

Structure

yaml
model:
  provider: gateway
  name: claude-sonnet-4-6
  api_base: http://ava:4000/v1
  api_key: ""
  temperature: 0.3
  max_tokens: 4096
  max_iterations: 75

subagents:
  threat_scanner:
    enabled: true
    tools: [cve_search, security_feeds, github_trending, browser, security_memory]
    max_turns: 30
  vuln_analyst:
    enabled: true
    tools: [cve_search, security_feeds, security_memory, browser, target_intel]
    max_turns: 40
  # ... (intel_reporter, recon, exploit, reporter)

middleware:
  knowledge: true
  audit: true
  memory: true

knowledge:
  db_path: /sandbox/knowledge/security.db
  embed_model: qwen3-embedding
  top_k: 10
  search_mode: hybrid
  enrich_chunks: true
  inject_min_trust: 1   # trust floor for auto-injected memory (ADR 0069 D8): 1 = re-rank
                        # curated-first only; 2 = refuse tier-1 EXTERNAL (scraped/OSINT) memory

# Skills (SKILL.md methodology). Progressive disclosure (default on): a lightweight
# <available_skills> catalog (name + description) is injected each turn and the
# agent pulls a full body on demand via the load_skill tool — instead of injecting
# matched skill bodies. user_only skills are catalog-hidden, reachable only via
# /skill. Set progressive_disclosure: false for the legacy top-k full-body inject.
skills:
  enabled: true
  dir: /sandbox/skills
  db_path: /sandbox/skills.db
  top_k: 5
  progressive_disclosure: true

# Progressive tool disclosure (ADR 0005). OFF by default. protoPen binds ~80
# tools; with deferral on, most tool schemas are withheld from the model each
# turn (every tool stays callable) and the agent loads them on demand via the
# `search_tools` meta-tool. `keep` overrides the always-exposed base set
# (orchestration + task/schedule management + search_tools).
tools:
  deferred:
    enabled: false
    keep: []          # e.g. [task, run_workflow, create_task, search_tools]

# Goal mode (autonomy) — re-invoke the agent toward a verifier-backed condition
# (set with /goal in chat, or by the agent via the set_goal tool). Verifiers are
# read-only, no shell: findings / targets / task / llm. See explanation/autonomy.
goals:
  enabled: true
  max_iterations: 10
  no_progress_limit: 4
  dream_cadence_cron: ""      # 5-field cron to seed a recurring /dream pass (blank = off)

# Watches (ADR 0067) + working-state injection (ADR 0079) — the self-driving loop.
# N concurrent condition-watches, each on its own cadence, that run a follow-up turn
# on trip; the manager polls this often and evaluates only watches that are due.
watch:
  enabled: true
  poll_interval_s: 5
  working_state: true         # inject the per-turn <working_state> snapshot (OODA)

# Background sub-agents (ADR 0070). auto_resume: on completion a job self-wakes its
# origin session to brief the operator (coalesced) and indexes its result to the KB.
background:
  auto_resume: true

Key Sections

SectionDescription
modelLLM provider, model name, API base, generation parameters
subagentsPer-subagent tool allowlists, enable/disable, max turns
middlewareToggle knowledge injection, audit logging, memory consolidation
knowledgeEmbedding model, vector search config, contextual enrichment, inject_min_trust (recalled-memory trust floor, ADR 0069 D8)
skillsSKILL.md retrieval — enable, dir, db path, top-k, progressive_disclosure (catalog + load_skill)
workflowsDeclarative subagent recipes — enable, writable dir
tools.deferredProgressive tool disclosure (ADR 0005) — enabled, keep
goalsGoal mode (autonomy) — enabled, max_iterations, no_progress_limit, dream_cadence_cron (scheduled memory hygiene)
watchCondition-watches (ADR 0067) + working_state OODA injection (ADR 0079) — enabled, poll_interval_s, working_state
backgroundBackground sub-agents (ADR 0070) — auto_resume (self-wake briefing + KB durability)

security-config.json

Default security topics and feed configuration seeded on startup.

Path: config/security-config.json

Contains a topics array (CVE tracking, wireless security, exploit techniques, etc.), each with name, keywords, and priority. Also includes feeds configuration for scan intervals and tracked_repos for security tool monitoring. Topics are seeded into the knowledge store on first launch.


SOUL.md

The agent's identity and personality prompt.

Path: config/SOUL.md

This file defines who protoPen is, its values, and behavioral guidelines. It is injected as the first section of the system prompt. Edit this file to customize the agent's personality.

Part of the protoLabs autonomous development studio.