100xprompt is configured through one file: 100xprompt.json. It holds everything you can tune - the model that drives your sessions, the agents you call, what needs approval, the tools and services you connect, how the interface looks, and what runs automatically at each step. Set it once globally for sensible defaults everywhere. Then drop a project-level file into any repository to layer team-specific settings on top.

Where files live

Global defaults, project overrides, and how they merge.

Top-level settings

Every key you can set, grouped by what it controls.

Example config

A realistic project file to copy and adapt.

Environment variables

Override settings from the shell for CI and one-offs.

Global and project settings

A 100xprompt.json can live in two places:
  • Global - your personal defaults, applied to every project you work in.
  • Project - checked into a repository, applied only when you work in that repo.
When both exist, project settings layer over global. Anything the project file specifies wins; everything it leaves out falls back to your global defaults. A team can ship a shared project config - permissions, MCP servers, agents - while each developer keeps their own preferences like theme, keybindings, and default model.
Project settings take precedence over global settings on a per-key basis. Lists like instructions and plugin are combined across both files rather than replaced, so a project can add to your global setup without wiping it out.

Where the files live

Your global config lives in the 100xprompt config directory in your home folder. Both file names are recognized:
100xprompt.json     # standard JSON
100xprompt.jsonc    # JSON with comments allowed
Use the global file for preferences you want everywhere: your default model, theme, keybindings, and any MCP servers or agents you always want available.
Name the file 100xprompt.jsonc if you want to keep inline // comments next to your settings. Trailing commas are allowed too.

Set the keys you need

One file, a handful of areas. Everything you tune falls into a few natural groups - the model that drives sessions, the agents you call, what needs approval, the tools and services you connect, and how the interface looks and behaves.
These are the keys you set at the top level of 100xprompt.json. Every key is optional - start with just a model and add more as you need it.
KeyTypeWhat it controls
$schemastringPoints editors at the config schema for autocomplete and validation. Added for you automatically.
modelstringThe default model that drives your sessions, as provider/model (e.g. 100xprompt/pro).
small_modelstringA smaller, faster model used for lightweight background steps like naming a session.
fallback_modelstringModel to switch to when the primary is overloaded or rate-limited, as provider/model.
plan_modelstringA stronger model to use while a session is in plan mode, as provider/model or a short alias.
default_agentstringWhich primary agent is active when you start a session.
themestringThe color theme for the interface.
usernamestringA custom name to show for you in conversations instead of your system username.
agentobjectDefine and customize agents - their model, prompt, tools, and permissions. See Agents.
permissionobjectWhich actions run freely, which ask first, and which are blocked. See Permissions.
mcpobjectModel Context Protocol servers that add external tools and data sources.
providerobjectCustom provider connections and per-model overrides. See Models.
keybindsobjectCustom keyboard shortcuts for the terminal interface.
tuiobjectTerminal interface behavior such as scroll speed and diff style.
vimbooleanEnable Vim keybindings in the prompt input.
instructionsstring[]Extra instruction files or glob patterns to always include. See Rules & Instructions.
hooksobjectShell commands that run automatically at lifecycle events.
memoryobjectLong-term memory: toggle extraction, consolidation, and recall, or set the model they use.
compactionobjectControls how conversations are automatically condensed as they grow.
envobjectEnvironment variables injected into the tools 100xprompt runs, such as shell commands and hooks.
includeCoAuthoredBybooleanWhether to add a Co-Authored-By trailer to git commits 100xprompt makes. Defaults to on.
shareenumSession sharing policy: manual, auto, or disabled.
autoupdateboolean | "notify"Keep 100xprompt up to date automatically, or just be notified.
serverobjectHost and port for the serve and web interfaces.
commandobjectCustom slash commands.
pluginstring[]Plugins to load.
formatterobjectCode formatters to run on edited files.
lspobjectLanguage server configuration for richer code awareness.
output_stylestringThe response style: explanatory, learning, concise, or a custom style.
disabled_providersstring[]Providers to turn off.
enabled_providersstring[]When set, only these providers are available.

Example configuration

Suppose you want a project config that sets a default model, defines a review agent, tightens permissions, connects an MCP server, and runs a formatter after edits. Here it is end to end:
{
  "$schema": "https://100xprompt.com/config.json",
  "model": "100xprompt/pro",
  "small_model": "100xprompt/flash",
  "default_agent": "build",
  "theme": "system",
  "vim": true,

  "agent": {
    "reviewer": {
      "description": "Reviews diffs for correctness and style",
      "mode": "subagent",
      "model": "100xprompt/pro",
      "prompt": "You are a meticulous code reviewer. Focus on correctness, edge cases, and readability.",
      "permission": {
        "edit": "deny",
        "bash": "ask"
      }
    }
  },

  "permission": {
    "edit": "allow",
    "bash": {
      "*": "allow",
      "git push": "ask",
      "rm *": "deny"
    },
    "webfetch": "ask"
  },

  "mcp": {
    "docs": {
      "type": "local",
      "command": ["npx", "-y", "@example/docs-mcp"],
      "environment": {
        "API_TOKEN": "{env:DOCS_API_TOKEN}"
      },
      "enabled": true
    }
  },

  "formatter": {
    "prettier": {
      "command": ["npx", "prettier", "--write", "$FILE"],
      "extensions": [".ts", ".tsx", ".json"]
    }
  },

  "instructions": ["docs/engineering-standards.md"]
}
You can reference environment variables and files inside string values. Write {env:VAR_NAME} to substitute an environment variable and {file:./path} to inline the contents of a file. This keeps secrets like API tokens out of the config itself.

Configure each area

Set model to the model that should drive your sessions, written as provider/model. Set small_model for the lightweight background work - session titles, short summaries - so those steps stay fast and cheap while your main model handles the real work.
{
  "model": "100xprompt/pro",
  "small_model": "100xprompt/flash"
}
You can switch models any time from within a session; the config value is just the starting point. See Models for the full picture.
Under agent, define custom agents or override the built-in ones. Each agent can have its own model, prompt, description, mode (primary or subagent), tool permission set, and more.
{
  "agent": {
    "docs-writer": {
      "description": "Writes and updates documentation",
      "mode": "subagent",
      "model": "100xprompt/pro",
      "permission": { "bash": "deny" }
    }
  }
}
Full detail lives on the Agents page.
The permission key decides what 100xprompt can do on its own and what needs your approval. Each action can be allow, ask, or deny, and command-based actions like bash accept fine-grained patterns.
{
  "permission": {
    "edit": "allow",
    "bash": { "*": "allow", "git push": "ask" },
    "webfetch": "ask"
  }
}
Bash patterns are evaluated top to bottom and the last match wins, so the broad "*" goes first and "git push" overrides it. See Permissions for the complete model and pattern syntax.
The mcp key connects Model Context Protocol servers, which extend 100xprompt with external tools and data. Servers can be local (a command 100xprompt runs) or remote (a URL it connects to).
{
  "mcp": {
    "local-tools": {
      "type": "local",
      "command": ["npx", "-y", "@example/mcp-server"],
      "enabled": true
    },
    "remote-service": {
      "type": "remote",
      "url": "https://mcp.example.com",
      "headers": { "Authorization": "Bearer {env:MCP_TOKEN}" }
    }
  }
}
Set enabled: false to keep a server defined but turned off. Remote servers support OAuth automatically, and you can add a timeout to either type.
The keybinds key rebinds any shortcut in the terminal interface. Most bindings are built around a leader key (ctrl+x by default), and you can assign multiple triggers to one action by separating them with commas.
{
  "keybinds": {
    "leader": "ctrl+x",
    "session_new": "<leader>n",
    "model_list": "<leader>m",
    "session_interrupt": "escape"
  }
}
Set a binding to "none" to disable it entirely.
Control how the interface looks and feels:
  • theme - the color theme.
  • vim - enable Vim keybindings in the prompt input.
  • tui - terminal behavior including scroll_speed, scroll_acceleration, and diff_style (auto or stacked).
  • output_style - the response style (explanatory, learning, concise, or a custom one).
  • recap - show an end-of-turn summary of what changed.
{
  "theme": "system",
  "vim": true,
  "tui": { "diff_style": "auto" },
  "output_style": "concise"
}
As a conversation grows, 100xprompt automatically condenses older context so long sessions stay coherent without running out of room. The compaction key lets you tune - or turn off - this behavior.
{
  "compaction": {
    "auto": { "enabled": true },
    "micro": { "enabled": true }
  }
}
  • auto - condenses the full conversation once it grows past a threshold.
  • micro - trims oversized individual tool results to keep recent context lean.
Set either enabled to false to disable that layer.Separately, the memory key controls 100xprompt’s long-term memory - the durable facts it recalls across sessions. Turn the whole system off with "memory": { "enabled": false }, toggle individual stages (extraction, consolidation, recall), or point them at a specific model.
{
  "memory": { "enabled": true }
}
Learn more on Memory & Context.
The hooks key runs your own shell commands at lifecycle events, so you can integrate 100xprompt with linters, notifiers, or custom checks. Each event receives details on standard input.
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "edit",
        "hooks": [
          { "type": "command", "command": "npm run lint", "timeout": 60 }
        ]
      }
    ]
  }
}
Recognized events include PreToolUse, PostToolUse, UserPromptSubmit, PermissionRequest, SessionStart, and Stop. Use matcher on the tool-use events to target specific tools.

Override from the environment

Suppose you’re in CI and need to change a setting without touching the committed file. A few settings can be driven by environment variables instead. HUNDREDXPROMPT_CONFIG layers an extra file on top of your global config, while HUNDREDXPROMPT_CONFIG_CONTENT is inline JSON applied last of all - so it has the final say:
VariableEffect
HUNDREDXPROMPT_CONFIGPath to an additional config file to layer on top of your global config.
HUNDREDXPROMPT_CONFIG_CONTENTInline config JSON applied at the highest precedence.
HUNDREDXPROMPT_PERMISSIONPermission overrides as inline JSON.
HUNDREDXPROMPT_DISABLE_AUTOUPDATETurn off automatic updates.
HUNDREDXPROMPT_DISABLE_AUTOCOMPACTDisable automatic conversation compaction.
Keep secrets out of your committed 100xprompt.json. Use {env:VAR_NAME} to pull tokens and keys from the environment, or {file:./secret} to inline them from a local file that isn’t checked in.

Permissions

Decide what runs freely, what asks first, and what is blocked.

Rules & Instructions

Give 100xprompt standing instructions with AGENTS.md and the instructions key.

Models

Pick your default model and connect your own provider account.