INI — 18 Operations for AI Agents

INI files are configuration's oldest living format — `.cfg`, `.editorconfig`, legacy app settings still running production. act101 treats sections and keys as addressable structure, so agents change one setting without disturbing decades of accreted config.

This page is the canonical reference an AI coding agent uses to refactor, query, and analyze INI code through the act MCP server. 18 operations available: 0 refactor, 18 query, 0 analysis. Each operation is callable from Claude Code, Cursor, Codex, OpenCode, or any MCP-compatible agent host. Click any operation for a stable anchor link suitable for citation.

18Query

Worked INI examples

act101 reads an INI file's [section] headers as its top-level declarations, tagged class in both the skeleton and symbols, bracket included in the name. symbols also descends into each section, reporting every key = value setting inside it as a variable. The unit of structure in this grammar is the section: an INI file with no section headers at all still reports its bare top-level settings as variable declarations, but once a section opens, every setting that follows belongs to it. Each example below is the verbatim output of the command shown, run against the file shown. Query outputs are pretty-printed with the timing block omitted.

Read the difficulty sections as a skeleton

difficulty.ini tunes a game's difficulty curve across four sections: [Easy], [Normal], [Hard], and [Global].

$ act query skeleton difficulty.ini

Before

[Easy]
enemy_health = 50
enemy_damage = 5
spawn_rate = 0.8
starting_lives = 5

[Normal]
enemy_health = 100
enemy_damage = 10
spawn_rate = 1.0
starting_lives = 3

[Hard]
enemy_health = 200
enemy_damage = 20
spawn_rate = 1.4
starting_lives = 1

[Global]
version = 4
title = "Ashfall Keep"

Output

{
    "type": "Skeleton",
    "declarations": [
        {
            "kind": "class",
            "name": "[Easy]",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 1,
                    "column": 1,
                    "byte_offset": 0
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 6,
                    "column": 1,
                    "byte_offset": 78
                }
            },
            "name_range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 1,
                    "column": 1,
                    "byte_offset": 0
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 2,
                    "column": 1,
                    "byte_offset": 7
                }
            }
        },
        {
            "kind": "class",
            "name": "[Normal]",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 7,
                    "column": 1,
                    "byte_offset": 79
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 12,
                    "column": 1,
                    "byte_offset": 161
                }
            },
            "name_range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 7,
                    "column": 1,
                    "byte_offset": 79
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 8,
                    "column": 1,
                    "byte_offset": 88
                }
            }
        },
        {
            "kind": "class",
            "name": "[Hard]",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 13,
                    "column": 1,
                    "byte_offset": 162
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 18,
                    "column": 1,
                    "byte_offset": 242
                }
            },
            "name_range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 13,
                    "column": 1,
                    "byte_offset": 162
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 14,
                    "column": 1,
                    "byte_offset": 169
                }
            }
        },
        {
            "kind": "class",
            "name": "[Global]",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 19,
                    "column": 1,
                    "byte_offset": 243
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 22,
                    "column": 1,
                    "byte_offset": 287
                }
            },
            "name_range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 19,
                    "column": 1,
                    "byte_offset": 243
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 20,
                    "column": 1,
                    "byte_offset": 252
                }
            }
        }
    ]
}

The skeleton reports all four section headers, bracket included, as class declarations; the settings inside each one, such as enemy_health and spawn_rate, don't get their own top-level entry.

List every difficulty setting as symbols

[Easy], [Normal], and [Hard] each set the same four keys — enemy_health, enemy_damage, spawn_rate, starting_lives — to different values, and [Global] sets version and title.

$ act query symbols difficulty.ini

Before

[Easy]
enemy_health = 50
enemy_damage = 5
spawn_rate = 0.8
starting_lives = 5

[Normal]
enemy_health = 100
enemy_damage = 10
spawn_rate = 1.0
starting_lives = 3

[Hard]
enemy_health = 200
enemy_damage = 20
spawn_rate = 1.4
starting_lives = 1

[Global]
version = 4
title = "Ashfall Keep"

Output

{
    "type": "Symbols",
    "symbols": [
        {
            "name": "[Easy]\n",
            "kind": "class",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 1,
                    "column": 1,
                    "byte_offset": 0
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 2,
                    "column": 1,
                    "byte_offset": 7
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "enemy_health",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 2,
                    "column": 1,
                    "byte_offset": 7
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 2,
                    "column": 13,
                    "byte_offset": 19
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "enemy_damage",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 3,
                    "column": 1,
                    "byte_offset": 25
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 3,
                    "column": 13,
                    "byte_offset": 37
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "spawn_rate",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 4,
                    "column": 1,
                    "byte_offset": 42
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 4,
                    "column": 11,
                    "byte_offset": 52
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "starting_lives",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 5,
                    "column": 1,
                    "byte_offset": 59
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 5,
                    "column": 15,
                    "byte_offset": 73
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "[Normal]\n",
            "kind": "class",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 7,
                    "column": 1,
                    "byte_offset": 79
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 8,
                    "column": 1,
                    "byte_offset": 88
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "enemy_health",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 8,
                    "column": 1,
                    "byte_offset": 88
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 8,
                    "column": 13,
                    "byte_offset": 100
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "enemy_damage",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 9,
                    "column": 1,
                    "byte_offset": 107
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 9,
                    "column": 13,
                    "byte_offset": 119
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "spawn_rate",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 10,
                    "column": 1,
                    "byte_offset": 125
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 10,
                    "column": 11,
                    "byte_offset": 135
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "starting_lives",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 11,
                    "column": 1,
                    "byte_offset": 142
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 11,
                    "column": 15,
                    "byte_offset": 156
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "[Hard]\n",
            "kind": "class",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 13,
                    "column": 1,
                    "byte_offset": 162
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 14,
                    "column": 1,
                    "byte_offset": 169
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "enemy_health",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 14,
                    "column": 1,
                    "byte_offset": 169
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 14,
                    "column": 13,
                    "byte_offset": 181
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "enemy_damage",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 15,
                    "column": 1,
                    "byte_offset": 188
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 15,
                    "column": 13,
                    "byte_offset": 200
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "spawn_rate",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 16,
                    "column": 1,
                    "byte_offset": 206
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 16,
                    "column": 11,
                    "byte_offset": 216
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "starting_lives",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 17,
                    "column": 1,
                    "byte_offset": 223
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 17,
                    "column": 15,
                    "byte_offset": 237
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "[Global]\n",
            "kind": "class",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 19,
                    "column": 1,
                    "byte_offset": 243
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 20,
                    "column": 1,
                    "byte_offset": 252
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "version",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 20,
                    "column": 1,
                    "byte_offset": 252
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 20,
                    "column": 8,
                    "byte_offset": 259
                }
            },
            "visibility": "unknown"
        },
        {
            "name": "title",
            "kind": "variable",
            "range": {
                "start": {
                    "file": "difficulty.ini",
                    "line": 21,
                    "column": 1,
                    "byte_offset": 264
                },
                "end": {
                    "file": "difficulty.ini",
                    "line": 21,
                    "column": 6,
                    "byte_offset": 269
                }
            },
            "visibility": "unknown"
        }
    ]
}

symbols lists all 18 entries: the four section headers as class, each carrying a trailing newline in its reported name, and the fourteen settings nested inside them as variable, including the three repeated enemy_health values across difficulty tiers.

Query

18 query tools, the same on every supported language. Descriptions live in the shared reference: /docs/query-tools.

callers control_flow data_flow definition diagnostics effect_closure effect_summary fix_auto get_type graph import_organize interface mutations references repo_outline skeleton symbols symbols_batch

← HTMLJava →