profile.config.ts

Which extensions to load, and your settings.

export default defineProfile({
    extensions: [
        "@axon/gruvbox-theme@1.0.3",
        "./extensions/mine",
    ],

    settings: {
        theme: "gruvbox",
        paths: ["~/git/work/agents"],
    },
})

Read without running any extension — which is what lets axon ext install edit this list safely.

extensions

Load order, top to bottom, after main.ts. First registration wins a collision.

extensions: [
    "@axon/vim@0.2.0",      // registry — fetched and pinned
    "./extensions/mine",    // local path — loaded where it sits
]

A registry entry is pinned. The version you see is the version that loads; an unpinned name would mean your terminal silently changing under you.

Managed with :ext install, :ext update and :ext uninstall — all of which rewrite this array rather than asking you to.

The files themselves are not in your profile. A registry extension lives in ~/.axon/cache/extensions/, shared machine-wide, which is why uninstalling undeclares rather than deletes.

settings

settings: {
    theme: "gruvbox",                    // built-in, or one an extension registers
    paths: ["~/git/work/agents"],        // extra roots to scan for agents
}

theme is the same value " writes when you pick one, so switching in the TUI edits this file. paths adds scan roots beyond agents/ — see agents/.

Edited by hand or by command

Both work, and both take effect on save: the TUI watches this file, and a :ext install writes it the same way you would.