Configuration

Settings go in init.lua, a Lua script that calls maki.setup(). Same language as plugins.

Two places, both optional:

  • Global: ~/.config/maki/init.lua
  • Project: .maki/init.lua (relative to your working directory)

When both exist, project settings override global ones. Neither file is required.

Example

maki.setup({
    ui = {
        splash_animation = true,
        mouse_scroll_lines = 5,
        tool_output_lines = {
            bash = 8,
            read = 5,
        },
    },
    agent = {
        bash_timeout_secs = 180,
        max_output_lines = 3000,
    },
    provider = {
        default_model = "anthropic/claude-sonnet-4-6",
    },
    storage = {
        max_log_files = 5,
    },
    index = {
        max_file_size_mb = 4,
    },
})

All fields are optional. Typos in field names cause an error right away.

maki.setup() can only be called once per init.lua.

Full Reference

Top-level

FieldTypeDefaultDescription
always_yoloboolfalseStart every session with YOLO mode (skip permission prompts, deny rules still apply)

ui

FieldTypeDefaultMinDescription
splash_animationbooltrue-Show splash animation on startup
flash_duration_msu641500-Duration of flash messages (ms)
typewriter_ms_per_charu644-Typewriter effect speed (ms/char)
mouse_scroll_linesu3231Lines per mouse wheel scroll

ui.tool_output_lines

How many lines of output to show per tool in the UI. All values are usize with a minimum of 1.

FieldDefault
bash5
code_execution5
task5
index3
grep3
read3
write7
web3
other3

agent

FieldTypeDefaultMinDescription
max_output_bytesusize512001024Max tool output size (bytes)
max_output_linesusize200010Max tool output lines
max_response_bytesusize52428801024Max LLM response size (bytes)
max_line_bytesusize50080Max bytes per line before truncation
bash_timeout_secsu641205Bash command timeout (seconds)
code_execution_timeout_secsu64305Code execution timeout (seconds)
max_continuation_turnsu3231Max automatic continuation turns
compaction_bufferu32400001000Token buffer reserved during compaction
search_result_limitusize10010Max results from grep/glob searches
interpreter_max_memory_mbusize5010Memory limit for code interpreter (MB)

provider

FieldTypeDefaultMinDescription
default_modelStringnone-Default model identifier (e.g. anthropic/claude-sonnet-4-6)
connect_timeout_secsu64101HTTP connect timeout (seconds)
low_speed_timeout_secsu64301Low speed timeout (seconds with less than 1 byte received)
stream_timeout_secsu6430010Streaming response timeout (seconds)

storage

FieldTypeDefaultMinDescription
max_log_bytes_mbu642001Max total log size (MB)
max_log_filesu32101Max number of log files to keep
input_history_sizeusize10010Number of input history entries to retain

index

FieldTypeDefaultMinDescription
max_file_size_mbu6421Max file size for indexing (MB)

Tools

The tools table lets you turn tools on or off. By default index, webfetch, and websearch are on. bash is off by default.

maki.setup({
    tools = {
        bash = { enabled = true },
        websearch = { enabled = false },
    },
})

Validation

If a value is below its minimum, Maki shows a ConfigError with the field name, value, and minimum.

Directory layout

Maki uses XDG directories on Linux and macOS:

PurposePath
Config~/.config/maki/ (init.lua, permissions.toml, mcp.toml)
Data~/.local/share/maki/
Logs~/.local/logs/maki/
State~/.local/state/maki/

~/.maki/ is checked as a legacy fallback.

Personal Instructions

On top of AGENTS.md, you can add your own instructions in two places:

  • AGENTS.local.md at project root for per-project preferences (gitignored)
  • ~/.config/maki/AGENTS.md for preferences that apply to all projects

Both are added to the system prompt at the start of every session.

Migrating from config.toml

Still have a config.toml? Here is how to switch over.

Rename your config files:

~/.config/maki/config.toml  ->  ~/.config/maki/init.lua
.maki/config.toml           ->  .maki/init.lua

Wrap the content in maki.setup():

Before:

[agent]
bash_timeout_secs = 180

After:

maki.setup({
    agent = { bash_timeout_secs = 180 },
})

Same field names, just Lua syntax instead of TOML.

Move MCP sections to mcp.toml.

  • ~/.config/maki/mcp.toml (global)
  • .maki/mcp.toml (per-project)

Same format, just a different file. See MCP.

Permissions stay in permissions.toml.