---
title: "Autonomy levels: Kotharo"
version: v0.8.3
canonical: https://kotharo.com/docs/autonomy-levels/
---

# Autonomy levels

The autonomy level sets how often the team stops to ask you. There are three: `guided`, `balanced` and `autonomous`. `balanced` is the default. `/kotharo:setup` asks for a level when none is set.

## The levels

- **guided**: stops at plan and merge in every lane, and at scope and design in a new feature. It asks **Ship it?** before the merge stop, and asks before every action on the list below, including a deploy to dev.
- **balanced**: the lane's stops as set, with one end card that ships. It asks before every action on the list below.
- **autonomous**: commits, pushes the feature branch, opens the pull request, removes its own worktree and deploys to dev without asking. Small fixes and clear tickets stop only at merge.

[Lanes and stops](https://kotharo.com/docs/lanes-and-stops/#where-each-lane-stops) shows each lane's stops at each level.

## Actions a level can let run

These are the actions a level, or your own settings, can let the team take without asking:

| Action | What it is |
|---|---|
| `commit-local` | Commit on the feature branch, without pushing |
| `push-feature-branch` | Push the ticket's feature branch |
| `open-pr` | Open the pull request |
| `remove-own-worktree` | Remove a worktree the team made for the ticket |
| `deploy-dev` | Deploy to a dev environment |

Each one the team takes without asking is logged as a dated line in the ticket's `docs/work/<KEY>/handoff.md`. A shared dev environment never deploys without asking, whatever the level.

## What always asks

Whatever the level and whatever any settings file says, the team asks you before it:

- merges into `main` or another long-lived branch;
- force-pushes;
- rewrites history that was pushed;
- deletes a remote branch or tag;
- deploys to production;
- runs a migration on a shared environment;
- installs a dependency;
- creates, edits, moves or reassigns a ticket;
- goes past anything a risk gate on the ticket holds.

This list is fixed in Kotharo's code, so no settings file can change it. Naming one of these in `autonomy.allow` is an error.

## Set the level

For one repo, for everyone on it:

```
/kotharo:config set autonomy.level autonomous --repo
```

Or just for you, in every repo, with `--user`. `/kotharo:config show --origin autonomy.level` says which file sets it now.

## Fine-tune single actions

`autonomy.allow` lets single actions run without asking, and `autonomy.ask` makes them ask, on top of the level. Ask always wins, and every layer's `ask` adds up. For example, in the repo's `.claude/kotharo.toml`:

```text
[autonomy]
level = "autonomous"
ask = ["deploy-dev"]
```

## Who can loosen it

A team profile can only tighten: it can set `guided` and add to `ask`. A looser level or a new `allow` takes effect only from your own `~/.claude/kotharo.toml` or the repo's committed `.claude/kotharo.toml`, never from a team profile or from `.claude/kotharo.local.toml`. A stricter rule in your `CLAUDE.md`, the repo's `CLAUDE.md` or the team profile wins over the level.

At any level other than `balanced`, or with overrides, each session starts with a short note that tells Claude the level and what it may do without asking.

Next: [Teaching mode](https://kotharo.com/docs/teaching-mode/). [All docs](https://kotharo.com/docs/)

Written for Kotharo v0.8.3.
