ReferenceConfiguration

One typed config module.#

Agent config is a typed TS module that exports defineConfig({ ... }). The wizard writes it at init; you can edit it any time. Secrets — the Anthropic key and the IPFS endpoint — stay in the environment, never in the config file.

Environment#

VariablePurpose
ANTHROPIC_API_KEYThe agent's brain. Required. Read at runtime, never on chain.
ANTHROPIC_MODELOptional model override; defaults to a current Claude model.
PROMUS_STORAGE_BACKENDipfs (default) or local for development.
PROMUS_IPFS_API_URLKubo HTTP API. Local node: http://127.0.0.1:5001.
PROMUS_IPFS_GATEWAYRead gateway including the trailing /ipfs. Local: http://127.0.0.1:8080/ipfs.
PROMUS_IPFS_API_TOKENBearer token only for an authenticated hosted endpoint; blank for local Kubo.

Minimal example#

import { defineConfig } from 'promus-core'

export default defineConfig({
  network: 'arbitrum-sepolia',
  identity: {
    iNFT: {
      contract: '0x74F838421A2dA38C20Fe9Fd5E87C8FA5c053DDa3',
      tokenId: '42',
      network: 'arbitrum-sepolia',
    },
    operator: '0xOPERATOR...',
    agent: '0xAGENT...',
  },
  plugins: ['onchain', 'comms', 'system'],  // add 'telegram' to enable the bridge
})

network is required. Everything else has defaults.

Top-level keys#

KeyTypeDefaultWhat it controls
networkPromusNetworkrequiredChain for identity and on-chain reads.
storage.networkPromusNetworkmirrors networkWhich network's storage context to use.
identity.iNFTref or nullnullOnce minted, holds { contract, tokenId, network }.
identity.operatorstring or nullnullWallet that owns the iNFT.
identity.agentstring or nullnullAgent EOA address.
brain.modelstring or nullnullOptional model pin (otherwise the env / runtime default applies).
brain.maxOutputTokensnumber4096Assistant output cap per turn.
brain.contextWindownumbermodel-dependentUsed by the compaction trigger.
brain.compactionobject or null{ threshold: 0.5, keepRecent: 8 }Pre-flight summarize-fold of older history.
pluginsPromusPlugin[]['onchain','comms','system']Which plugins to load. Add 'telegram'.
toolsRecord<string, boolean>{}Glob-level allow/deny. Right-most match wins.
imports.claudeCodebooleantrueInherit skills, plugins, and MCP from ~/.claude/.
approvals.mode'strict' | 'prompt' | 'off''prompt'Permission gate behavior.
skills.disabledstring[][]Skill ids never to auto-load or index.

Networks#

NetworkChain IDRPCNative token
arbitrum-sepolia421614https://sepolia-rollup.arbitrum.io/rpcETH
robinhood-testnet46630https://rpc.testnet.chain.robinhood.comETH

PromusAgentNFT, PromusInbox, and PromusMarket are CREATE2-deployed, so they share the same address on both chains. Canonical addresses live in packages/core/src/identity/deployments.ts.

Tool toggles#

Globs apply right-to-left; specific keys win over broader keys:

tools: {
  'shell.*': false,   // disable every shell tool
  'shell.run': true,  // ...except shell.run
  'web.fetch': true,
}

A tool blocked at the config layer never appears in the tool list the brain sees. A tool allowed at config still passes through the permission gate at call time.

Read Console next.

Source: packages/core/src/config.ts, packages/core/src/identity/deployments.ts.

Source: packages/core/src/config.ts