Configuration

ai-tools/config.json reference and all configuration options

Fulcrum's configuration lives in ai-tools/config.json. This file controls which AI vendors are enabled, which agents are active, and how your team is configured.

💡 Key principle: Edit ai-tools/config.json, then run npm run fulcrum:generate to propagate changes to all vendor files.

Config Structure

Here's the complete structure of config.json:

{
  "version": "6.2.0",
  "vendors": {
    "enabled": ["claude", "cursor", "windsurf"],
    "primary": "claude"
  },
  "agents": {
    "preset": "all",
    "selected": [
      "product-manager",
      "tech-lead",
      "domain-expert",
      "frontend-engineer",
      "backend-engineer",
      "database-engineer",
      "ai-engineer",
      "devops-engineer",
      "firmware-engineer",
      "qa-backend",
      "qa-frontend",
      "qa-firmware",
      "work-orchestrator"
    ]
  },
  "installedAt": "2024-01-15T10:30:00.000Z"
}

version

PropertyTypeDescription
versionstringFulcrum version. Used for migration detection.

The version field is automatically updated when you upgrade Fulcrum. It's used to detect when migrations are needed and to ensure compatibility.

vendors

Controls which AI vendors receive generated configuration files.

PropertyTypeDescription
vendors.enabledstring[]Array of enabled vendor identifiers.
vendors.primarystringPrimary vendor for orchestration features.

Available Vendors

Vendor IDOutput LocationFeatures
claude.claude/Full orchestration, parallel agents, Beads integration
cursor.cursorrulesRules-based guidance, agent personas
windsurf.windsurf/Cascade integration, agent rules
gemini.gemini/Gemini CLI integration, workspace rules
// Enable multiple vendors
{
  "vendors": {
    "enabled": ["claude", "cursor", "windsurf", "gemini"],
    "primary": "claude"
  }
}

// Single vendor setup
{
  "vendors": {
    "enabled": ["cursor"],
    "primary": "cursor"
  }
}
📝 Note: The primary vendor gets additional orchestration capabilities. Claude is recommended as primary for full parallel execution support.

agents

Controls which agents are active in your AI team.

PropertyTypeDescription
agents.presetstringPreset configuration for agent selection.
agents.selectedstring[]Explicit list of enabled agent IDs.

Presets

PresetDescriptionAgents Included
allAll 13 agents enabledFull team: PM, TL, all engineers, all QA
webWeb development focusFrontend, Backend, Database, QA-Frontend, QA-Backend
backendBackend/API focusBackend, Database, DevOps, QA-Backend
fullstackFull-stack applicationsFrontend, Backend, Database, DevOps, QA-Frontend, QA-Backend
embeddedFirmware/embedded systemsFirmware Engineer, QA-Firmware, DevOps
minimalLightweight setupWork Orchestrator, Tech Lead only
customManual selectionOnly agents in selected array
// Use a preset
{
  "agents": {
    "preset": "web",
    "selected": []  // Ignored when preset is not "custom"
  }
}

// Custom selection
{
  "agents": {
    "preset": "custom",
    "selected": [
      "work-orchestrator",
      "tech-lead",
      "frontend-engineer",
      "backend-engineer"
    ]
  }
}

Available Agents

CategoryAgent IDRole
Strategywork-orchestratorCoordinates work, delegates tasks
product-managerRequirements, PRDs, user stories
tech-leadArchitecture, technical decisions
Engineeringfrontend-engineerUI implementation, React/Vue/CSS
backend-engineerAPIs, server logic, performance
database-engineerSchema, queries, migrations
ai-engineerML pipelines, model integration
devops-engineerCI/CD, infrastructure, deployment
firmware-engineerEmbedded systems, C/C++
QAqa-backendAPI testing, integration tests
qa-frontendE2E testing, UI testing
qa-firmwareHardware-in-loop testing
Domaindomain-expertBusiness logic, domain knowledge

Adding/Removing Agents

Using /manage-agents

The easiest way to modify your agent team:

# Interactive agent management
/manage-agents

# Opens a menu to:
# - List current agents
# - Add agents from available pool
# - Remove agents
# - Switch presets

Manual Configuration

Edit config.json directly:

// 1. Set preset to "custom"
{
  "agents": {
    "preset": "custom",
    "selected": [
      "work-orchestrator",
      "tech-lead",
      "frontend-engineer",
      "backend-engineer",
      "qa-backend"
    ]
  }
}

// 2. Regenerate vendor files
npm run fulcrum:generate
⚠️ Always regenerate: After editing config.json, run npm run fulcrum:generate to update all vendor configuration files.

Custom Agents

Add custom agents created with /generate-agent:

{
  "agents": {
    "preset": "custom",
    "selected": [
      "work-orchestrator",
      "tech-lead",
      "frontend-engineer",
      "custom-auth-specialist",    // Custom agent
      "custom-graphql-expert"      // Custom agent
    ]
  }
}

Custom agent files live in ai-tools/agents/custom/ and follow the same format as built-in agents.

Environment Variables

Fulcrum respects these environment variables:

VariableDescriptionDefault
FULCRUM_CONFIG_PATHCustom path to config.json./ai-tools/config.json
FULCRUM_VERBOSEEnable verbose loggingfalse
FULCRUM_DRY_RUNPreview changes without writingfalse
BEADS_ROOTCustom path to Beads directory./.beads
# Custom config location
FULCRUM_CONFIG_PATH=./config/fulcrum.json npm run fulcrum:generate

# Dry run to preview changes
FULCRUM_DRY_RUN=true npm run fulcrum:generate

# Verbose output for debugging
FULCRUM_VERBOSE=true npm run fulcrum:generate

Regenerating Vendor Files

After any configuration change, regenerate vendor files:

# Standard regeneration
npm run fulcrum:generate

# What this does:
# 1. Reads ai-tools/config.json
# 2. Processes ai-tools/ canonical files
# 3. Generates vendor-specific output:
#    - .claude/ for Claude Code
#    - .cursorrules for Cursor
#    - .windsurf/ for Windsurf
#    - .gemini/ for Gemini CLI
💡 Commit the output: Generated vendor files should be committed to your repository so team members get the same configuration.

Validating Configuration

Check your configuration is valid:

# Check Fulcrum status
/status

# Or use the CLI
npm run fulcrum:validate

Common validation errors:

ErrorCauseSolution
Unknown agent IDTypo in agent nameCheck agent ID spelling
Unknown vendorInvalid vendor in enabled listUse: claude, cursor, windsurf, gemini
Primary not in enabledPrimary vendor not in enabled listAdd primary vendor to enabled array
Invalid presetUnknown preset nameUse: all, web, backend, fullstack, embedded, minimal, custom

Example Configurations

Web Startup

{
  "version": "6.2.0",
  "vendors": {
    "enabled": ["claude", "cursor"],
    "primary": "claude"
  },
  "agents": {
    "preset": "fullstack",
    "selected": []
  }
}

Enterprise Backend

{
  "version": "6.2.0",
  "vendors": {
    "enabled": ["claude"],
    "primary": "claude"
  },
  "agents": {
    "preset": "custom",
    "selected": [
      "work-orchestrator",
      "tech-lead",
      "backend-engineer",
      "database-engineer",
      "devops-engineer",
      "qa-backend",
      "domain-expert"
    ]
  }
}

IoT/Embedded

{
  "version": "6.2.0",
  "vendors": {
    "enabled": ["claude", "cursor"],
    "primary": "claude"
  },
  "agents": {
    "preset": "custom",
    "selected": [
      "work-orchestrator",
      "tech-lead",
      "firmware-engineer",
      "backend-engineer",
      "devops-engineer",
      "qa-firmware"
    ]
  }
}