Skip to content

feat: add per-conversation effort control - #238

Open
FrundlesTian wants to merge 2 commits into
overwirehq:mainfrom
FrundlesTian:feat/effort-command
Open

FrundlesTian wants to merge 2 commits into
overwirehq:mainfrom
FrundlesTian:feat/effort-command

Conversation

@FrundlesTian

Copy link
Copy Markdown
Collaborator

Description

Adds per-conversation Claude reasoning-effort control now that EffortLevel is available in the Agent SDK.

  • adds /effort low|medium|high|xhigh|max, /effort to inspect the current value, and /effort default to remove the override
  • forwards the selected effort through the facade to ClaudeAgentOptions for every user-triggered Claude path in agentic and classic modes
  • preserves independent effort state for project-topic conversations and exposes it in /status
  • updates command menus, help text, README, docs, and changelog

TaskBudget is intentionally out of scope for this PR. Its token ceiling and interaction with the existing max_budget_usd guard should be designed separately before exposing it to users.

Related issue

Related to #233 (implements the agreed effort-only slice; leaves TaskBudget for follow-up).

Type of change

  • Bug fix
  • New feature
  • Breaking change (documented in CHANGELOG under "Changed" or "Removed")
  • Documentation or tooling only

How it was tested

  • Tests added or updated
  • make test and make lint pass locally
  • Tested by hand against a running bot

Equivalent local checks run in an isolated Python 3.13 environment:

  • pytest --no-cov — 598 passed
  • black --check src tests
  • isort --check-only src tests
  • flake8 src tests
  • mypy src/bot/utils/effort.py

The repository-wide mypy src currently reports 540 pre-existing errors on main; this change introduces none in the new helper module.

Checklist

  • One concern per PR; unrelated changes are split out
  • CHANGELOG.md has an entry under [Unreleased]
  • If pyproject.toml dependencies changed, poetry lock was run and the updated poetry.lock is committed (not applicable; no dependency changes)
  • Documentation updated (README.md, docs/, .env.example, CLAUDE.md) where settings or commands changed
  • New settings default to current behaviour (not applicable; no new setting and unset effort preserves the SDK default)
  • If AI tools helped write this change, I reviewed every line and the hand-testing above is mine

@FrundlesTian

Copy link
Copy Markdown
Collaborator Author

Rebased this branch onto the latest `main` (through #239) to resolve the merge conflict and get a clean re-run of CI/review.

  • Conflict was limited to `CHANGELOG.md`'s `[Unreleased]` section (main's CI-fix entries vs. this PR's `Added` entry) — resolved by keeping both.
  • No code changes; this is a pure rebase (`9c87a74` → `c642250`).
  • Verified locally before pushing: `pytest --no-cov` (598 passed), `black --check`, `isort --check-only`, `flake8`, `mypy src/bot/utils/effort.py`, and `poetry check --lock` — all clean.
  • Force-pushed with `--force-with-lease` to update this PR branch.

The earlier `review` check failure was the fork-checkout issue that #239 fixed (this PR predated that fix); it should run cleanly now that the branch is rebased past it.

@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown

No merge-blocking issues found in the current diff.

Classic mode registers 15 commands and agentic mode now includes
/effort and /restart, which CLAUDE.md hadn't been updated to reflect.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@FrundlesTian

Copy link
Copy Markdown
Collaborator Author

Fixed in fd72027: updated CLAUDE.md's classic-mode command count (13 → 15) and added /effort and /restart to the agentic mode commands list at line 133, matching what README.md/docs already had.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant