{"id":49486081,"url":"https://github.com/glav/teamautobot","last_synced_at":"2026-05-01T01:30:53.886Z","repository":{"id":344067670,"uuid":"1179465453","full_name":"glav/teamautobot","owner":"glav","description":"A revision built from learnings from teambot and other agent TUI's that suit my workflow","archived":false,"fork":false,"pushed_at":"2026-04-30T05:56:09.000Z","size":1633,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-30T07:20:13.429Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/glav.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-12T03:49:32.000Z","updated_at":"2026-04-30T05:56:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/glav/teamautobot","commit_stats":null,"previous_names":["glav/teamautobot"],"tags_count":0,"template":false,"template_full_name":"glav/template-python","purl":"pkg:github/glav/teamautobot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glav%2Fteamautobot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glav%2Fteamautobot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glav%2Fteamautobot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glav%2Fteamautobot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/glav","download_url":"https://codeload.github.com/glav/teamautobot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glav%2Fteamautobot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32482460,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-01T01:30:51.056Z","updated_at":"2026-05-01T01:30:53.875Z","avatar_url":"https://github.com/glav.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TeamAutobot\n\n**TeamAutobot** is an AI agent orchestration system for goal-driven software work. It is being built as an evolution of TeamBot v1's linear pipeline into a planner-led, multi-agent system with stateful agents, a task graph, an event log, and file-backed observability.\n\nFor the full design, see [`docs/teamautobot-design.md`](docs/teamautobot-design.md).\n\n## Start here\n\n### 1) Set up the repo\n\nRequires [uv](https://docs.astral.sh/uv/) for dependency management.\n\n```bash\nuv sync\ncp .env-sample .env  # fill in values if you plan to use Azure OpenAI\n```\n\n### 2) Sanity-check the CLI\n\n```bash\nuv run python -m teamautobot.cli status --json\n```\n\nExpected output shape:\n\n```json\n{\n  \"env_loaded\": true,\n  \"name\": \"TeamAutobot\",\n  \"python\": \"3.12.x\",\n  \"runtime\": \"ready\",\n  \"version\": \"\u003ccurrent version\u003e\"\n}\n```\n\nThe main success signal is `\"runtime\": \"ready\"`. `env_loaded` tells you whether\nTeamAutobot found and loaded a `.env` file; it can still be `false` if you are\nonly using deterministic/local flows and have not configured Azure OpenAI yet.\n\n### 3) Run the fastest first demos\n\n```bash\nuv run python -m teamautobot.cli demo --json\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --json\n```\n\n- `demo` is the narrow **single-agent** path.\n- `planner full-team-demo` is the broader **planner + multi-agent** path.\n- Runs write artifacts under `.teamautobot/demo-runs/` and `.teamautobot/planner-runs/`.\n\n### 4) Inspect a recorded planner run\n\n```bash\nuv run python -m teamautobot.cli planner replay --run-dir .teamautobot/planner-runs/\u003crun-id\u003e\n```\n\nUse the `run_dir` returned by a previous planner command.\n\n## Working demo MVP\n\nThe locked `working-demo-todo-summary` demo proves that TeamAutobot can take a\nrepo-owned objective, mutate only the intended source and test files in a copied\nscratch workspace, pass review, run acceptance, and publish replayable final\nsummary artifacts.\n\nThe ship-blocking verifier for this MVP is the deterministic smoke test:\n\n```bash\nuv run pytest tests/test_planner.py::test_run_full_team_demo_working_demo_todo_summary_smoke_path -q\n```\n\nThat smoke path uses the scripted/fake live harness and is the required\nvalidation surface. The live walkthrough below is optional and additive.\n\n### Reset the scratch workspace\n\n```bash\nuv run python -m teamautobot.cli planner prepare-working-demo \\\n  --fixture working-demo-todo-summary \\\n  --json\n```\n\nBy default this creates or resets:\n\n```text\n.teamautobot/working-demo-workspaces/working-demo-todo-summary\n```\n\n### Run the optional live walkthrough\n\n```bash\nuv run python -m teamautobot.cli planner full-team-demo \\\n  --provider azure_openai \\\n  --objective-file objectives/working-demo-todo-summary.md \\\n  --workspace-dir .teamautobot/working-demo-workspaces/working-demo-todo-summary \\\n  --json\n```\n\n### Inspect the resulting run\n\n```bash\nuv run python -m teamautobot.cli planner replay \\\n  --run-dir .teamautobot/planner-runs/\u003crun-id\u003e \\\n  --json\n```\n\n## First real repo objective\n\nThe working demo above proves the end-to-end planner flow against a tiny fixture. When you want to\nrun TeamAutobot against the **actual TeamAutobot repo**, use a dedicated git-backed scratch\nworkspace instead of pointing the live run at your primary checkout.\n\nThe objective file for this flow should be a tracked, clean repo artifact under the repo-owned\n`objectives/` directory. `objectives/real-repo-workspace-metadata.md` is the current proven\nexample for this safe scratch-workspace path.\n\n### Create from an objective\n\n```bash\nuv run python -m teamautobot.cli planner create \\\n  --objective-file objectives/real-repo-workspace-metadata.md \\\n  --json\n```\n\n`planner create` is the first-class safe path for asking TeamAutobot to produce repo changes from\nan objective. It preflights the live provider, prepares a detached git worktree, runs the live\nfull-team workflow with `azure_openai` by default, validates any captured `live_commit_candidate`\nagainst your target checkout, and reports next commands for harvesting or approval-gated committing.\nIt does not copy candidate files into your primary checkout or create a commit by itself. Use\n`--skip-provider-preflight` only after manually confirming the provider deployment is reachable. If\nthe live run fails, the response includes a compact `failure_summary` with failed task messages and\ntargeted troubleshooting commands for common provider-configuration failures; other `planner create`\nresponses keep `failure_summary: null` so JSON consumers can handle the field consistently.\n\nWhen Azure OpenAI preflight fails, inspect `provider_preflight.effective_model` and\n`provider_preflight.model_source` to see whether the deployment came from `--model` or\nthe `AZURE_OPENAI_MODEL_DEPLOYMENT` environment variable; verify alternatives with\n`uv run python -m teamautobot.cli azure-openai complete --model \u003cdeployment\u003e --input \"Reply with OK.\" --json`,\nthen rerun `planner create --model \u003cdeployment\u003e` with the working deployment.\n\n### Prepare a safe git-backed scratch workspace\n\n```bash\nuv run python -m teamautobot.cli planner prepare-repo-workspace \\\n  --objective-file objectives/real-repo-workspace-metadata.md \\\n  --json\n```\n\nBy default this creates or resets a collision-safe workspace path derived from the repo-relative\nobjective path:\n\n```text\n.teamautobot/live-workspaces/real-repo-workspace-metadata\n```\n\nThe prepared workspace is a detached `git worktree` at the current `HEAD`, so live review tools\nsuch as `git_status` and `show_file_diff` still work while your main checkout stays untouched.\n\n### Run the first real repo objective\n\n```bash\nuv run python -m teamautobot.cli planner full-team-demo \\\n  --provider azure_openai \\\n  --objective-file objectives/real-repo-workspace-metadata.md \\\n  --workspace-dir .teamautobot/live-workspaces/real-repo-workspace-metadata \\\n  --json\n```\n\nUse `planner replay` or `planner dashboard` with the returned `run_dir` to inspect the result the\nsame way you would for the working-demo fixture flow.\n\n## What to read next\n\n| Need | Go here |\n|------|---------|\n| Architecture and current design | [`docs/teamautobot-design.md`](docs/teamautobot-design.md) |\n| Repo map, conventions, workflow pointers | [`AGENTS.md`](AGENTS.md) |\n| Objective template for planner/full-team runs | [`docs/sdd-objective-template.md`](docs/sdd-objective-template.md) |\n| ADRs and implementation plans | [`docs/decision-records/`](docs/decision-records/) and [`docs/plans/`](docs/plans/) |\n\n## Core concepts\n\n- **Goal Planner** decomposes objectives into a task graph, assigns work, and can re-plan after milestones.\n- **Agent Pool** treats roles as templates rather than fixed slots, so builders can fan out when the graph allows it.\n- Runtime ids such as `builder-1` and `builder-2` should be treated as instances of the `builder` template rather than as separate long-term roles.\n- **Event Bus** records typed activity across planning, execution, review, and observability surfaces.\n- **Context Store** is intended to prefer summaries first, then deeper artifacts and retrieval on demand.\n\n## Command guide\n\nUse `uv run python -m teamautobot.cli --help` or\n`uv run python -m teamautobot.cli \u003ccommand\u003e --help` when you want the full\nflag surface without keeping every option expanded inline in this README.\n\n### Everyday commands\n\n| Use case | Command |\n|----------|---------|\n| Prepare a real repo scratch workspace | `uv run python -m teamautobot.cli planner prepare-repo-workspace --objective-file objectives/real-repo-workspace-metadata.md --json` |\n| Create from a real repo objective | `uv run python -m teamautobot.cli planner create --objective-file objectives/real-repo-workspace-metadata.md --json` |\n| CLI status | `uv run python -m teamautobot.cli status --json` |\n| Single-agent deterministic demo | `uv run python -m teamautobot.cli demo --json` |\n| Planner-only demo | `uv run python -m teamautobot.cli planner demo --json` |\n| Builder-reviewer gate demo | `uv run python -m teamautobot.cli planner review-demo --json` |\n| Full-team deterministic happy path | `uv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --json` |\n\n### Observability and operator commands\n\n| Use case | Command |\n|----------|---------|\n| Replay one run | `uv run python -m teamautobot.cli planner replay --run-dir .teamautobot/planner-runs/\u003crun-id\u003e` |\n| Compare two runs | `uv run python -m teamautobot.cli planner replay-compare --left-run-dir .teamautobot/planner-runs/\u003cbaseline-run-id\u003e --right-run-dir .teamautobot/planner-runs/\u003ccomparison-run-id\u003e` |\n| Follow latest run state | `uv run python -m teamautobot.cli planner follow --run-dir .teamautobot/planner-runs/\u003crun-id\u003e` |\n| Tail live run snapshots | `uv run python -m teamautobot.cli planner follow --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --tail` |\n| Stream operator dashboard | `uv run python -m teamautobot.cli planner dashboard --run-dir .teamautobot/planner-runs/\u003crun-id\u003e` |\n| Request a pause between tasks | `uv run python -m teamautobot.cli planner intervene --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --action pause --json` |\n| Answer a paused human clarification | `uv run python -m teamautobot.cli planner respond --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --answer \"...\" --json` |\n| Redirect a paused live work task | `uv run python -m teamautobot.cli planner redirect --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --task-id implement-feature-slice --message \"Use notes/live-implementation.md only\" --json` |\n| Resume a paused run | `uv run python -m teamautobot.cli planner resume --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --json` |\n| Request durable-guidance promotion approval | `uv run python -m teamautobot.cli planner promote-feedback --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --review-task-id review-implementation --feedback-index 1 --rule-id implementation-evidence --title \"Require implementation evidence\" --json` |\n| Request live git commit approval | `uv run python -m teamautobot.cli planner request-live-commit --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --message \"Ship the live workspace changes\" --json` |\n| Request a policy-bypass override to continue a blocked full-team run | `uv run python -m teamautobot.cli planner request-policy-override --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --json` |\n| Approve a pending planner approval request | `uv run python -m teamautobot.cli planner approve --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --approval-id \u003capproval-id\u003e --json` |\n| Deny a pending planner approval request | `uv run python -m teamautobot.cli planner deny --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --approval-id \u003capproval-id\u003e --reason \"Keep this guidance local for now\" --json` |\n\n### Quality commands\n\n```bash\nuv sync --group dev\nuv run pytest\nuv run ruff check .\nuv run ruff format .\n```\n\n## Detailed usage\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eSingle-agent demo and Azure OpenAI live demo\u003c/strong\u003e\u003c/summary\u003e\n\nThe default `demo` path is deterministic. A narrow live slice is available with Azure OpenAI:\n\n```bash\nuv run python -m teamautobot.cli demo --json\nuv run python -m teamautobot.cli demo --provider azure_openai --workspace-dir . --task \"Summarize README changes into notes/live-demo.md\" --json\nuv run python -m teamautobot.cli demo --provider azure_openai --workspace-dir . --objective-file docs/sdd-objective-template.md --json\n```\n\nCurrent live-demo scope is intentionally limited: the agent only gets bounded\nworkspace and repo-inspection tools (`list_files`, `read_file`, `search_text`,\n`git_status`, `show_file_diff`, `run_pytest`, `write_file`, and\n`replace_in_file`). No shell or network tools are exposed through this path.\nRepo-aware inspection covers bounded UTF-8 content search across workspace\nfiles (honoring `.gitignore` rules via `search_text`), bounded repo status\nsummaries (`git_status`), git-backed per-file diffs for both tracked and\nuntracked files (`show_file_diff`), and targeted pytest validation with cache\nwrites disabled (`run_pytest`). None of these tools expose shell execution,\nnetwork access, or operations outside the configured workspace.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ePlanner and full-team flows\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\nuv run python -m teamautobot.cli planner demo --json\nuv run python -m teamautobot.cli planner review-demo --json\nuv run python -m teamautobot.cli planner review-demo --json --review-decision rejected\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --json\nuv run python -m teamautobot.cli planner full-team-demo --objective-file objectives/my-feature.md --json\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --review-decision rejected --json\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --acceptance-status failed --json\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --dynamic-replanning --json\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --dynamic-replanning --builder-count 3 --json\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --review-decision rejected --dynamic-replanning --json\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --checkpoint-policy record-only --json\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --durable-guidance-path .agent/standards/durable-guidance.json --json\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a deterministic feature slice\" --task-additional-capability-categories implement-feature-slice=testing --task-allowed-capability-categories implement-feature-slice=implementation,testing --json\nuv run python -m teamautobot.cli planner create --objective-file objectives/my-feature.md --json\nuv run python -m teamautobot.cli planner promote-feedback --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --review-task-id review-implementation --feedback-index 1 --rule-id implementation-evidence --title \"Require implementation evidence\" --json\nuv run python -m teamautobot.cli planner validate-live-candidate --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --target-dir . --json\nuv run python -m teamautobot.cli planner harvest-live-candidate --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --target-dir . --json\nuv run python -m teamautobot.cli planner request-live-commit --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --message \"Ship the live workspace changes\" --json\nuv run python -m teamautobot.cli planner request-policy-override --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --json\nuv run python -m teamautobot.cli planner approve --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --approval-id \u003capproval-id\u003e --json\nuv run python -m teamautobot.cli planner deny --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --approval-id \u003capproval-id\u003e --reason \"Keep this guidance local for now\" --json\n```\n\nImportant current behavior:\n\n- `planner full-team-demo` is still deterministic by default.\n- With `--dynamic-replanning`, the planner can insert additional tasks such as acceptance and summary work after milestones.\n- With `--builder-count N`, a run builds a per-run runtime roster with `builder-1` through `builder-N` instead of relying only on the default two builders. Extra builders are used for the optional research slice and later acceptance work when the plan shape allows it.\n- With `--checkpoint-policy record-only`, the run records checkpoint metadata artifacts without creating git commits.\n- `planner create` wraps the safe real-repo path: preflight the live provider, prepare a detached worktree, run the live full-team workflow with `azure_openai` by default, validate any live commit candidate, and return harvest/approval next actions without mutating the primary checkout.\n- When `--objective-file` contains structured objective text, the run output includes parsed objective fields, uses `success_criteria` when present, and accepts an optional `## Task Capability Overrides` section with per-task `### \u003ctask-id\u003e` subsections. That section should contain only those subsections plus HTML comments, and each task subsection must use only `**Additional Capability Categories**:` and/or `**Allowed Capability Categories**:` labels with capability list items; freeform prose or unknown labels are rejected by the parser.\n- `--task-additional-capability-categories TASK_ID=CATEGORY[,CATEGORY...]` widens one task's default capability categories, while `--task-allowed-capability-categories TASK_ID=CATEGORY[,CATEGORY...]` narrows them. Repeat each flag for different task ids using capability values from `analysis`, `coordination`, `documentation`, `implementation`, `planning`, `review`, and `testing`.\n- Objective-file capability overrides use the same category values and planner task ids as those CLI flags. When both surfaces specify the same task field, the CLI value wins.\n- Unknown task ids supplied through objective-file or CLI capability overrides are rejected after the planner builds the current task graph, not during CLI argument parsing.\n- Full-team demo JSON payloads include `runtime_agents`, `runtime_agent_ids`, `builder_count`, and `runtime_allocation`. Replay, follow, and dashboard views project the compact runtime roster via `runtime_agent_ids`, `persona_template_ids`, `builder_count`, and `runtime_allocation` so operators can distinguish concrete run-local agents from their persona templates.\n- The `draft-execution-plan` task artifact now exposes `task_breakdown`, `runtime_agent_ids`, `persona_template_ids`, and `runtime_allocation`; downstream consumers that previously read `team_template_ids` should switch to those explicit runtime/persona fields.\n- Full-team runs load repo-owned durable guidance from `.agent/standards/durable-guidance.json` by default (or `--durable-guidance-path`), capture promotable structured review feedback into run-scoped planner artifacts, and surface loaded rule provenance in run payloads, replay, follow, and dashboard views.\n- Completed hybrid-live full-team runs in a git workspace capture a `live_commit_candidate` artifact that records the proposed commit message and the exact run-written paths; no git commit is created automatically.\n- Static full-team runs that stop at a rejected review or failed acceptance gate now persist a resumable `policy_override_candidate`; continuing past that gate stays fail-closed and requires `planner request-policy-override`, `planner approve`, and then `planner resume`.\n- `planner promote-feedback` now records a pending approval request for one captured review feedback item instead of mutating durable guidance immediately.\n- `planner request-live-commit` turns the captured live commit candidate into a pending approval request, optionally overriding the proposed commit message.\n- `planner request-policy-override` turns that persisted gate-failure candidate into a pending approval request so an operator can explicitly authorize continuing a blocked full-team run.\n- `planner approve` resolves the pending request and either writes the durable-guidance update, creates the approved live git commit, or authorizes a matching policy-bypass resume; `planner deny` records a fail-closed outcome without changing repo guidance, creating a repo commit, or unblocking a gated run.\n- Unedited placeholder text from the objective template is rejected before planning.\n\nCheckpoint-aware JSON output includes fields such as `checkpoint_policy`, `checkpoint_count`, `checkpoint_paths`, and structured `checkpoint_steps`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eHybrid-live full-team slice\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\nuv run python -m teamautobot.cli planner full-team-demo --objective \"Add a narrow live feature slice\" --provider azure_openai --workspace-dir . --json\n```\n\nThis is still a thin hybrid-live slice, not a fully live planner runtime. `implement-feature-slice`, `implement-acceptance-tests`, and live review tasks now run against the configured `--workspace-dir`: implementation, acceptance-test, and remediation tasks get bounded repo-aware search, status inspection, per-file diff inspection, targeted pytest validation, prerequisite-agent clarification via `request_clarification`, first-class human clarification via `request_human_clarification`, operator redirect context via `planner redirect`, and UTF-8 workspace writes; agent clarifications trigger a bounded target-agent sub-run that emits `agent.question` / `agent.answer` events and persists its own clarification artifact before the requesting task continues, while human clarifications emit `intervention.requested`, pause the planner run, and wait for an operator response. Review tasks get the same bounded inspection and validation tools in read-only mode plus structured review submission; and `run-acceptance-validation` runs a bounded real verification command that prefers explicit `acceptance_test_paths` from the live acceptance artifact, otherwise falls back to inferred pytest-style `test_*.py` / `*_test.py` writes, and finally falls back to `uv run pytest -q`. Planning, replay, follow, dashboard, and intervention stay on the planner-managed path.\n\nWhen that live workspace is also a git repository and the run finishes successfully with run-written paths, TeamAutobot records a `live_commit_candidate` artifact for those paths. Use `planner validate-live-candidate` to verify content IDs, run the pre-harvest quality gate, and report which paths would be copied without mutating the target checkout. Use `planner harvest-live-candidate` after validation to copy the candidate files into another checkout for review, or keep creating an actual git commit approval-gated through `planner request-live-commit` followed by `planner approve`; the approval path re-runs the same candidate validation before recording a request and again before creating the git commit.\n\nFor live acceptance validation, `--workspace-dir` should generally point at the repository root so the bounded pytest command runs against the intended workspace.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eReplay, compare, follow, dashboard, and intervene\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\nuv run python -m teamautobot.cli planner replay --run-dir .teamautobot/planner-runs/\u003crun-id\u003e\nuv run python -m teamautobot.cli planner replay --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --event-type replan.triggered --json\nuv run python -m teamautobot.cli planner replay-compare --left-run-dir .teamautobot/planner-runs/\u003cbaseline-run-id\u003e --right-run-dir .teamautobot/planner-runs/\u003ccomparison-run-id\u003e\nuv run python -m teamautobot.cli planner replay-compare --left-run-dir .teamautobot/planner-runs/\u003cbaseline-run-id\u003e --right-run-dir .teamautobot/planner-runs/\u003ccomparison-run-id\u003e --json\nuv run python -m teamautobot.cli planner follow --run-dir .teamautobot/planner-runs/\u003crun-id\u003e\nuv run python -m teamautobot.cli planner follow --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --tail\nuv run python -m teamautobot.cli planner follow --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --tail --json\nuv run python -m teamautobot.cli planner dashboard --run-dir .teamautobot/planner-runs/\u003crun-id\u003e\nuv run python -m teamautobot.cli planner dashboard --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --json\nuv run python -m teamautobot.cli planner intervene --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --action pause\nuv run python -m teamautobot.cli planner intervene --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --action pause --json\nuv run python -m teamautobot.cli planner respond --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --answer \"Use notes/live-implementation.md only\" --json\nuv run python -m teamautobot.cli planner redirect --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --task-id implement-feature-slice --message \"Use notes/live-implementation.md only\" --json\nuv run python -m teamautobot.cli planner resume --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --json\nuv run python -m teamautobot.cli planner promote-feedback --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --review-task-id review-implementation --feedback-index 1 --rule-id implementation-evidence --title \"Require implementation evidence\" --json\nuv run python -m teamautobot.cli planner request-live-commit --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --message \"Ship the live workspace changes\" --json\nuv run python -m teamautobot.cli planner request-policy-override --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --json\nuv run python -m teamautobot.cli planner approve --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --approval-id \u003capproval-id\u003e --json\nuv run python -m teamautobot.cli planner deny --run-dir .teamautobot/planner-runs/\u003crun-id\u003e --approval-id \u003capproval-id\u003e --reason \"Keep this guidance local for now\" --json\n```\n\nCurrent behavior summary:\n\n- **Replay** reads recorded planner artifacts and `events.jsonl` and can emit either text or JSON views.\n- **Replay compare** compares two full recorded runs; deltas are always computed as **right minus left**.\n- **Follow** is the first live-observability surface. By default it emits one snapshot; with `--tail`, it polls until the run reaches `completed`, `error`, or `paused`.\n- **Dashboard** builds on the same file-backed follow model, but presents an operator-oriented frame stream.\n- Full-team run payloads, replay, follow, and dashboard surface the durable guidance session artifact path, loaded durable rule ids/rules, captured review feedback candidates, `live_commit_candidate`, `policy_override_candidate`, `pending_approval_request`, and `latest_approval_outcome` so later runs can replay the full operator decision path.\n- Replay, follow, and dashboard also summarize persisted tool invocation records from `artifacts/tool-invocations/`, including status/adapter counts and recent calls.\n- **Intervene --action pause** records a pause request that takes effect after the current task finishes; it does not interrupt in-flight work.\n- **Respond** records the human answer for a paused full-team run that is waiting on `request_human_clarification`; it does not resume the run by itself.\n- **Redirect** records a bounded operator redirect for a paused live `full-team-demo` work task (`implement-feature-slice`, `implement-acceptance-tests`, or live remediation work). It intentionally rejects runs that are not paused live full-team runs, non-work-task ids, and paused runs that already have a pending human clarification cycle.\n- **Promote feedback** records a pending approval request to promote one captured review feedback item into durable repo guidance stored in `.agent/standards/durable-guidance.json` (or a caller-specified `--durable-guidance-path`).\n- **Harvest live candidate** verifies the captured `live_commit_candidate` content IDs, runs a fail-closed quality gate for high-confidence generated-content problems, and copies only those recorded paths from the live workspace into a target git checkout, without creating a commit.\n- **Request live commit** records a pending approval request for the captured `live_commit_candidate` and can override the proposed commit message for the eventual git commit.\n- **Request policy override** records a pending approval request for a persisted `policy_override_candidate` when a static full-team run stopped at a rejected review or failed acceptance gate.\n- **Approve** resolves the pending request and applies the durable-guidance change, live git commit, or policy-bypass resume authorization, depending on the approval kind; **Deny** resolves it without applying repo state.\n- **Resume** continues a paused planner run in the same run directory when a persisted paused-run state artifact is available. It currently supports paused `demo`, `review-demo`, and `full-team-demo` runs; full-team runs with a pending human clarification must be answered with `planner respond` first, and full-team runs paused for a persisted gate-failure `policy_override_candidate` must be approved before resume will continue them.\n- While a run is still `in_progress`, **Follow** and **Dashboard** surface a `pending_intervention_request` when a pause request has been written but not yet consumed by the runtime.\n- While a full-team run is paused for human input, **Follow** and **Dashboard** surface a `pending_human_intervention_request` describing the outstanding clarification.\n- While a paused or resumed live full-team run has a recorded redirect that has not yet been consumed, **Follow** and **Dashboard** surface `pending_operator_redirect`.\n- When a completed live git-backed run has captured run-written paths, **Replay**, **Follow**, and **Dashboard** surface `live_commit_candidate` even before approval is requested.\n- When a static full-team run stops at a rejected review or failed acceptance gate, **Replay**, **Follow**, and **Dashboard** surface `policy_override_candidate` until the authorized resume consumes it.\n- While a run has a pending planner approval, **Replay**, **Follow**, and **Dashboard** surface `pending_approval_request`; after resolution they surface `latest_approval_outcome`.\n- After a paused run is resumed, **Follow** and **Dashboard** treat the latest `system.resumed` event as returning the run to `in_progress` until the next terminal event arrives.\n\nWhen hybrid-live task artifacts exist, `replay`, `replay-compare`, `follow`,\nand `dashboard` also surface live metadata such as `live_mode`,\n`workspace_dir`, `implementation_written_paths`,\n`acceptance_test_written_paths`, and `acceptance_test_paths`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAzure OpenAI configuration\u003c/strong\u003e\u003c/summary\u003e\n\nAzure OpenAI uses the v1 Responses API via the standard `openai.OpenAI` client.\n\nConfigure:\n\n- `AZURE_OPENAI_ENDPOINT`\n- `AZURE_OPENAI_MODEL_DEPLOYMENT`\n- `AZURE_OPENAI_AUTH_MODE` as `auto`, `api_key`, or `rbac`\n- `AZURE_OPENAI_API_KEY` when using API-key auth\n\nUseful commands:\n\n```bash\nuv run python -m teamautobot.cli azure-openai status --json\nuv run python -m teamautobot.cli azure-openai complete --input \"Say hello\" --model gpt-4.1-nano --json\n```\n\nIn `auto` mode, TeamAutobot prefers API-key auth when a key is present and otherwise falls back to Microsoft Entra ID / RBAC via `DefaultAzureCredential`.\n\nUse `azure-openai status` to verify local configuration without making a live API call.\n\n\u003c/details\u003e\n\n## Notes on recorded runs\n\n- `planner replay`, `follow`, `dashboard`, and `intervene` all expect a real recorded planner run directory.\n- `planner resume` expects a planner run directory that contains a persisted paused-run state artifact from an earlier paused planner run (`demo`, `review-demo`, or `full-team-demo`). Static full-team runs that stopped at a rejected review or failed acceptance gate now also persist that resume state, but resume stays blocked until a matching `planner request-policy-override` request is approved.\n- `planner replay` reads existing run artifacts such as `events.jsonl`, `artifacts/planner/plan.json`, `artifacts/planner/execution-summary.json`, and `artifacts/tool-invocations/*.json` when present.\n- If `execution-summary.json` is not present yet, `planner follow` can still succeed when the run directory already contains a valid plan snapshot and readable event log.\n\nFor deeper architecture, workflow, and repository guidance, see [`AGENTS.md`](AGENTS.md) and [`docs/teamautobot-design.md`](docs/teamautobot-design.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglav%2Fteamautobot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglav%2Fteamautobot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglav%2Fteamautobot/lists"}