Claude Agent SDK sibling implementation of the portfolio-optimiser method: an open Python framework that finds cost savings inside each project in a portfolio.
Find a file
Kjell Tore Guttormsen 9a4caeb419 feat(loop): S8 — D7 agentic loop: budget meter, maker-checker gate, informed refinement
Spec §3 steps 2–5 + §8, TDD-ed offline (scripted, honesty-marked stand-in):
- budget.py: BudgetMeter over TerminationContract — provider-reported usage
  only (missing usage fails closed), structured BudgetExceeded stop event.
- loop.py: ModelClient protocol; blind parse-retry generation (never silent
  repair); round-capped debate with turn safety net and mandated VERDICT
  line; opt-in-reject checker gate (explicit REJECT overrides a validated
  outcome, validator rejection stands); most-recent-reason-verbatim informed
  refinement under max_attempts; validator_decision stamped BEFORE override,
  checker_decision as its own result field (§9, never conflated).
- 45 new tests (121 total, no API key); four detach proofs run RED and
  reverted green: checker override, informed block, surfaced checker output,
  stamp-before-override.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QdSfQdND84oeq2mbjueLTS
2026-07-03 07:21:02 +02:00
shared Merge commit '97a9172311' as 'shared' 2026-07-03 06:00:11 +02:00
src/portfolio_optimiser_claude feat(loop): S8 — D7 agentic loop: budget meter, maker-checker gate, informed refinement 2026-07-03 07:21:02 +02:00
tests feat(loop): S8 — D7 agentic loop: budget meter, maker-checker gate, informed refinement 2026-07-03 07:21:02 +02:00
.gitignore feat: initial commit — repo bootstrap (D7 sibling on Claude Agent SDK) 2026-07-03 06:00:09 +02:00
CHANGELOG.md feat: initial commit — repo bootstrap (D7 sibling on Claude Agent SDK) 2026-07-03 06:00:09 +02:00
CLAUDE.md feat(scaffold): S5 — D7 sibling scaffold: SDK dep, fail-fast startup contracts, CLAUDE.md 2026-07-03 06:06:03 +02:00
pyproject.toml feat(scaffold): S5 — D7 sibling scaffold: SDK dep, fail-fast startup contracts, CLAUDE.md 2026-07-03 06:06:03 +02:00
README.md feat: initial commit — repo bootstrap (D7 sibling on Claude Agent SDK) 2026-07-03 06:00:09 +02:00
uv.lock feat(scaffold): S5 — D7 sibling scaffold: SDK dep, fail-fast startup contracts, CLAUDE.md 2026-07-03 06:06:03 +02:00

portfolio-optimiser-claude

Sibling implementation of the portfolio-optimiser method on the Claude Agent SDK (decision D7). An open, generic Python framework that finds cost savings inside each project in a portfolio of independent projects: agents generate candidate measures, a mandatory deterministic validator gates the numbers, domain experts judge via HITL, and the system learns from the verdicts.

The method itself is framework-neutral and lives in portfolio-optimiser-commons (consumed here as a git subtree under shared/): the method spec, the OKF bundle navigation contract, the golden/conformance suite (the only oracle for the validator), and the shared expert-reviewer persona skill. This repo implements that spec on the Claude Agent SDK — it does not reverse-engineer the MAF sibling.

Disclaimer: this is a purely technical framework. The deployer owns DPIA, risk assessment, and the legal basis for any processing. The framework ships only the technical preconditions (local-only operation, provenance, no silent egress).

Status

Scaffold (S5): repo, contracts, and shared core in place — no agent runs yet.

Development

uv sync          # install dependencies
uv run pytest    # test suite (runs without any API key)
uv run ruff check . && uv run ruff format --check .
uv run mypy src