Multi-provider model routing, prompt templates, session state, and metrics for the Dabbler AI-led-workflow.
Project description
Dabbler AI Orchestration
An AI-led coding-session workflow for VS Code. Structured AI sessions with cross-provider verification, automatic cost tracking, git- worktree-aware session-set state, and a Session Set Explorer in the activity bar.
What this repo is for
The framework treats AI coding work as a sequence of sessions —
bounded slices that run to completion in one orchestrator
conversation, end with a verification + commit, and stop. A
session set is an ordered chain of sessions that delivers one
feature, refactor, or aspect of the solution. Each set lives at
docs/session-sets/<slug>/ with a small predictable shape (spec.md,
session-state.json, activity-log.json, change-log.md).
Inside each session, the orchestrator (Claude Code, Codex,
GitHub Copilot, or Gemini Code Assist) does mechanics — file edits,
shell, git — and dispatches every reasoning task (code review,
security review, analysis, architecture, documentation, test
generation, end-of-session verification) through ai_router.route().
The router picks the cheapest capable model per task type, escalates
on poor responses, and runs cross-provider verification by a
different provider to catch provider-specific blind spots.
Every routed call is appended to ai_router/router-metrics.jsonl, so
per-set, per-task, and per-model spend is fully auditable. The
Session Set Explorer extension is the at-a-glance companion: it reads
the same files the router writes and renders three groups in the
activity bar (In Progress, Not Started, Done), with
worktree auto-discovery so parallel sessions surface across sibling
workspaces. Full execution mechanics live at
docs/ai-led-session-workflow.md;
deeper feature descriptions live at
docs/repository-reference.md.
Highlights
- Session sets and sessions — Work is organized into bounded sessions inside ordered session sets, each with its own folder of artifacts the extension reads to render the activity-bar inventory. Deep dive.
- Cost-minded orchestration — The router routes each task to the cheapest capable tier, escalates on poor responses, and uses a per-task-type effort overrides. Real metrics from contrasting projects show 73% savings vs Opus-only on a CLI/library project (990 calls) and 32% savings on a full-stack UI app with UAT/E2E gates (370 calls) — see docs/sample-reports/ for the full reports. Deep dive.
- Cross-provider verification — Every session ends with a
mandatory independent verification by a model from a different
provider. The verifier returns structured JSON
(
{"verdict": "VERIFIED" | "ISSUES_FOUND", "issues": [...]}); the orchestrator surfaces disagreements for human adjudication rather than self-resolving. Deep dive. - Git integration + parallel session sets — Every session ends
with
git add -A && git commit && git push. Multiple session sets can run in parallel via isolated git worktrees onsession-set/<slug>branches, with the last session merging back into main cleanly. Deep dive. - Robust fallbacks — Tier escalation on empty/truncated/refused responses; two-attempt verifier fallback when a provider's HTTPS layer fails; documented escalation ladder if both verifier attempts fail. The work is preserved in git for human review either way. Deep dive.
- UAT + E2E support (tri-state, opt-in). Specs declare
requiresUATandrequiresE2Eastrue | false | "suggested".trueenforces a UAT checklist + matching Playwright coverage as a close-out gate;falseskips both surfaces;"suggested"asks you at session start whether you want E2E tests, UAT checklist, both, or neither, records your choice, and gates close-out accordingly. No-UI repos default to the universal core (build, test, verify, commit) with no UAT/E2E surface area. Deep dive. - Full and Lightweight tiers. Specs declare
tier: full(default) ortier: lightweight. The tier changes one thing only — whether the AI router makes metered API calls. Lightweight is router-off, not Python-off: both tiers use a.venv+dabbler-ai-router, the samesession-state.jsonlifecycle, the same close-out gate, and the same Session Set Explorer. Full adds cost-minded routing and automatic cross-provider verification; Lightweight makes zero metered calls and verifies per-set (copyable review prompts pasted into a different assistant, a dedicated different-engine verification session, or opt out). The single source of truth is docs/concepts/tier-model.md. Deep dive.
Quick start
- Install the extension from the VS Code Marketplace:
- VS Code → Extensions view (
Ctrl+Shift+X) → searchDabbler AI Orchestration→ Install. - Or from a terminal:
code --install-extension DarndestDabbler.dabbler-ai-orchestration. - Or directly from the Marketplace listing.
- Offline / firewall fallback: each tagged release attaches the
.vsixas a downloadable asset on the GitHub Releases page; pick the latest, then Extensions → ... → Install from VSIX....
- VS Code → Extensions view (
- Open your workspace. Any folder with — or destined for — a
docs/session-sets/directory. The activity-bar Session Set Explorer icon appears automatically once that path is present. - Run
Dabbler: Install ai-routerfrom the command palette (Ctrl+Shift+P). The command auto-detects (or offers to create) a workspace.venv/, runspip install dabbler-ai-routerinside it, and materializesai_router/router-config.yamlfor tuning.
Then set API keys as environment variables (one-time):
ANTHROPIC_API_KEY, GEMINI_API_KEY, OPENAI_API_KEY — the
Prerequisites section below has
the sign-up links and notes which providers are required.
Subsequent updates: Dabbler: Update ai-router from the command
palette.
CLI fallback —
python -m venv .venv && .venv/Scripts/pip install dabbler-ai-router, thenfrom ai_router import routefrom your orchestrator script.
For new projects: the Getting Started form
If you're starting a new project — greenfield, or an existing local
project that hasn't yet adopted the workflow — the recommended
starting point is Dabbler: Get Started from the command palette.
The Session Set Explorer's Getting Started form walks you through tier
choice (Full vs. Lightweight — see
docs/concepts/tier-model.md), the
Full-tier verification budget / NTE step (saved to
ai_router/budget.yaml —
schema), and a one-click project
scaffold: the .venv with the router package, the AI-agent
instruction files, and the docs/session-sets/ home. From there the
form hands you copyable prompts for drafting
docs/planning/project-plan.md and decomposing it into session sets
with your AI agent. The four-tier budget mapping is documented in
docs/ai-led-session-workflow.md → Cost-budgeted verification modes.
Setting up without VS Code? See the manual-setup note in docs/quick-start.md. (The former conversational "adoption bootstrap" path was retired in extension 0.32.0 once the form gained its budget step; docs/adoption-bootstrap.md remains as a redirect stub for older clients.)
Prerequisites: tools and accounts
You need VS Code, at least one orchestrator agent installed as a VS Code extension, and API-key accounts for all three model providers (the router calls all three so cross-provider verification has somewhere to route to).
VS Code
- Download: code.visualstudio.com
- Getting-started docs:
code.visualstudio.com/docs —
the Extensions view (
Ctrl+Shift+X) is what you'll use to install the Session Set Explorer in the Quick start above.
Orchestrator agents (install at least one)
Pick whichever AI agent you want to drive sessions; the framework is provider-agnostic and you can switch mid-set.
- Claude Code (Anthropic) — reads CLAUDE.md. Install via claude.com/product/claude-code; docs at docs.claude.com/en/docs/claude-code/overview.
- Codex (OpenAI) — reads AGENTS.md. See openai.com/codex and the open-source CLI repo at github.com/openai/codex.
- GitHub Copilot — reads AGENTS.md. See github.com/features/copilot; Marketplace listing at GitHub.copilot.
- Gemini Code Assist (Google) — reads GEMINI.md. See codeassist.google (free tier available); docs at cloud.google.com/gemini/docs/codeassist/overview.
API keys (all three required)
The router calls all three providers and cross-provider verification needs at least two providers live to be meaningful. Expect to set up all three.
ANTHROPIC_API_KEY— console.anthropic.com (Settings → API Keys, requires billing).GEMINI_API_KEY— aistudio.google.com (Get API key in the left rail; free tier is generous).OPENAI_API_KEY— platform.openai.com (create a project, add a payment method, mint a key).
Set each as a Windows User environment variable; macOS / Linux export
them in your shell profile. Optionally,
pushover.net's PUSHOVER_API_KEY and
PUSHOVER_USER_KEY enable end-of-session phone notifications — if
unset, the orchestrator skips the notify and prints to console as
usual.
More
For technical reference (deep feature descriptions, the UAT/E2E flag matrix, a worked end-of-session output example, and the repository file map), see docs/repository-reference.md.
For runtime mechanics (trigger phrases, the 10-step procedure, the authoritative rule list every orchestrator obeys), see docs/ai-led-session-workflow.md.
For sample manager-report output from real projects at scale, see docs/sample-reports/.
For worked examples of cross-provider AI consultation in practice — what each provider explored, where they agreed and meaningfully differed, and what makes the pattern worth using — see docs/case-studies/.
License
This repo is released under the MIT License. See LICENSE for the full text. Copyright © 2026 darndestdabbler.
A duplicate
LICENSElives at tools/dabbler-ai-orchestration/LICENSE alongside the extension'spackage.json. The duplication is required:vsce packageexpects the file beside the manifest and has no flag to point elsewhere. Both files must be kept in sync.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dabbler_ai_router-0.21.1.tar.gz.
File metadata
- Download URL: dabbler_ai_router-0.21.1.tar.gz
- Upload date:
- Size: 409.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31ba81a1a1b5631b68e0f721a190d774b0443237ec989e561dfc43cbf560d7a7
|
|
| MD5 |
68d78987deaab331c1e252487993e557
|
|
| BLAKE2b-256 |
6d250317f5bc1d503966f07733b8625ed4521aa0914ce53a1f19e85f1539c560
|
Provenance
The following attestation bundles were made for dabbler_ai_router-0.21.1.tar.gz:
Publisher:
release.yml on darndestdabbler/dabbler-ai-orchestration
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dabbler_ai_router-0.21.1.tar.gz -
Subject digest:
31ba81a1a1b5631b68e0f721a190d774b0443237ec989e561dfc43cbf560d7a7 - Sigstore transparency entry: 1827099978
- Sigstore integration time:
-
Permalink:
darndestdabbler/dabbler-ai-orchestration@f5602bee4816154834c6f80b957110fe46e40ccf -
Branch / Tag:
refs/tags/v0.21.1 - Owner: https://github.com/darndestdabbler
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f5602bee4816154834c6f80b957110fe46e40ccf -
Trigger Event:
push
-
Statement type:
File details
Details for the file dabbler_ai_router-0.21.1-py3-none-any.whl.
File metadata
- Download URL: dabbler_ai_router-0.21.1-py3-none-any.whl
- Upload date:
- Size: 445.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
08d8df2b40871bf09878b6eabc95d294577ee854e601f55f90b9644173c19046
|
|
| MD5 |
c0894962fa4b5c771471cb6658e9dbe1
|
|
| BLAKE2b-256 |
649a901bb3265d05a6bb7ded686413e8b5bea8972fbd37b85ec6644baa9fb625
|
Provenance
The following attestation bundles were made for dabbler_ai_router-0.21.1-py3-none-any.whl:
Publisher:
release.yml on darndestdabbler/dabbler-ai-orchestration
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dabbler_ai_router-0.21.1-py3-none-any.whl -
Subject digest:
08d8df2b40871bf09878b6eabc95d294577ee854e601f55f90b9644173c19046 - Sigstore transparency entry: 1827100173
- Sigstore integration time:
-
Permalink:
darndestdabbler/dabbler-ai-orchestration@f5602bee4816154834c6f80b957110fe46e40ccf -
Branch / Tag:
refs/tags/v0.21.1 - Owner: https://github.com/darndestdabbler
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f5602bee4816154834c6f80b957110fe46e40ccf -
Trigger Event:
push
-
Statement type: