feat(kickstart): split agent into 4 phase-aligned sub-agents#2189
Open
bosesuneha wants to merge 2 commits into
Open
feat(kickstart): split agent into 4 phase-aligned sub-agents#2189bosesuneha wants to merge 2 commits into
bosesuneha wants to merge 2 commits into
Conversation
Splits the monolithic kickstart agent (Discover→Deploy) into four sub-agents owning distinct phases: kickstart — Welcome, Discover, Configure (orchestrator) kickstart-builder — Design, Generate kickstart-reviewer — Review kickstart-deployer — Pre-Deploy, Deploy Sub-agents are hidden from the agent picker (user-invocable: false) and reached via send:false handoffs so every transition is a user-confirmed checkpoint. Shared state lives in <workspace>/.kickstart/state.json, schema in skills/kickstart-state. Tool surface minimised per agent: only builder writes files; only deployer touches live cluster/registry.
Removes the `model: ['Claude Sonnet 4', 'GPT-4o']` line from kickstart, kickstart-builder, and kickstart-deployer (and the matching Models row in AGENTS.md). Agents now inherit whatever model the user has selected in the Copilot Chat picker, matching kickstart-reviewer and avoiding stale model pinning as new models ship.
Contributor
There was a problem hiding this comment.
Pull request overview
This PR refactors the Kickstart Copilot experience by splitting the previously monolithic kickstart agent into four phase-aligned sub-agents, with cross-handoff continuity provided via a shared workspace state file (.kickstart/state.json) and a new state-contract skill.
Changes:
- Added a new shared skill (
kickstart-state) defining the.kickstart/state.jsonschema plus read/write helpers. - Introduced two new internal sub-agents (
kickstart-builder,kickstart-deployer) and rewired handoffs so phases are owned by specialized agents. - Updated
package.jsoncontributions and refreshed docs (AGENTS.md,kickstart-guide.md) to reflect the new topology.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 12 comments.
Show a summary per file
| File | Description |
|---|---|
skills/kickstart-state/SKILL.md |
New shared state contract and jq-based merge helpers for cross-agent handoffs. |
package.json |
Registers the new agents and the new kickstart-state skill. |
kickstart-guide.md |
Updates the guide to describe the new 4-agent topology and shared state. |
agents/kickstart.agent.md |
Slims the orchestrator to phases 1–2 and adds handoffs to builder/reviewer/deployer. |
agents/kickstart-builder.agent.md |
New agent for phases 3–4 (design/generate) and forward handoff to reviewer. |
agents/kickstart-reviewer.agent.md |
Updates reviewer wiring to hand off forward/back based on review outcome. |
agents/kickstart-deployer.agent.md |
New agent for phases 6–7 (pre-deploy/deploy) with destructive runtime tools. |
AGENTS.md |
Documents the new agent topology and ownership model. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+111
to
+120
| For nested updates, pass an object that mirrors the schema: | ||
|
|
||
| ```bash | ||
| jq '. * { | ||
| app: { name: "myapp", language: "python", port: 8000 }, | ||
| phase: "configure", | ||
| lastAgent: "kickstart", | ||
| updatedAt: "'"$(date -u +%FT%TZ)"'" | ||
| }' .kickstart/state.json > "$tmp" && mv "$tmp" .kickstart/state.json | ||
| ``` |
|
|
||
| You are the **Builder** sub-agent. Your job is to take the app profile and Azure resource decisions made by `kickstart` and produce all deployment artifacts. | ||
|
|
||
| You own **Phase 3 (Design)** and **Phase 4 (Generate)** only. You do not run `az`, `kubectl`, or any destructive command. You write files. |
|
|
||
| ## Phase 3 — Design | ||
|
|
||
| Follow `/kickstart-design`. Present the target architecture summary using `app.*` and `azure.*` from state. Reference `/kickstart-aks-automatic`, `/kickstart-gateway-api`, `/kickstart-workload-identity`, `/kickstart-aks-terminology` as needed. |
|
|
||
| ## Phase 4 — Generate | ||
|
|
||
| Follow `/kickstart-generate`. Also load `/kickstart-deployment-safeguards`, `/kickstart-acr-integration`, `/kickstart-bicep-authoring`, `/kickstart-github-actions-workflow`, `/kickstart-github-actions-oidc`, `/kickstart-file-generation`, and `/kickstart-kaito-gpu` if the workload is GPU. |
Comment on lines
+66
to
+88
| ### 6d. kubelogin Check | ||
| ```bash | ||
| which kubelogin || az aks install-cli | ||
| ``` | ||
| Set `cluster.kubeloginInstalled: true`. | ||
|
|
||
| ### 6e. Control-Plane Probe | ||
| ```bash | ||
| az aks get-credentials --resource-group <rg> --name <cluster> --overwrite-existing | ||
| kubectl auth can-i get namespaces | ||
| ``` | ||
| On failure → user needs **Azure Kubernetes Service Cluster User Role**. Halt and provide fix. | ||
| Set `cluster.controlPlaneOk: true`. | ||
|
|
||
| ### 6f. Data-Plane RBAC Probes | ||
| ```bash | ||
| kubectl auth can-i create deployments --namespace <namespace> | ||
| kubectl auth can-i create services --namespace <namespace> | ||
| kubectl auth can-i create configmaps --namespace <namespace> | ||
| ``` | ||
| Self-remediation branching per `/kickstart-handoff`. On 403, follow `/kickstart-pim-activation`. After admin assignment, poll every 15s up to 3 min. | ||
| Set `cluster.dataPlaneOk: true`. | ||
|
|
| { | ||
| "name": "kickstart-reviewer", | ||
| "description": "Internal agent: Reviews Kickstart-generated deployment artifacts for correctness, security, and AKS Automatic compliance. Invoked by kickstart only.", | ||
| "description": "Internal agent: Reviews Kickstart-generated deployment artifacts for correctness, security, and AKS Automatic compliance. Invoked by kickstart-builder only.", |
| }, | ||
| { | ||
| "name": "kickstart-deployer", | ||
| "description": "Internal agent: Runs pre-deploy permission and tooling checks then deploys to AKS. Invoked by kickstart-reviewer only.", |
Comment on lines
103
to
+106
| ## Skill Taxonomy | ||
|
|
||
| All 30 skills use `disable-model-invocation: true` — they only fire when explicitly invoked via `/skill-name` by an agent. | ||
| All 31 skills use `disable-model-invocation: true` — they only fire when explicitly invoked via `/skill-name` by an agent. | ||
|
|
Comment on lines
+255
to
257
| │ ├── kickstart-aks-automatic/SKILL.md # Domain skills | ||
| │ ├── kickstart-gateway-api/SKILL.md | ||
| │ ├── kickstart-workload-identity/SKILL.md |
Comment on lines
+78
to
84
| 31 skills in `skills/` provide domain knowledge and shared contracts to the agents. All use `disable-model-invocation: true` (only fire when explicitly invoked). Categorized as: | ||
|
|
||
| - **Shared contract (1)**: `kickstart-state` — defines `.kickstart/state.json` schema and read/write helpers | ||
| - **Phase skills (6)**: One per phase — step-by-step playbooks | ||
| - **Domain skills (19)**: AKS Automatic, Gateway API, Workload Identity, Bicep, networking, cost estimation, etc. | ||
| - **Domain skills (19)**: AKS Automatic, Gateway API, Workload Identity, Bicep, networking, cost estimation, PIM activation, etc. | ||
| - **Behavioral skills (4)**: Phase acceleration, teach-then-ask, collaborator voice, file generation batching | ||
| - **Validation skill (1)**: Safeguard checklist (DS001–DS013) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Splits the monolithic
kickstartagent (~1200 lines, prone to losing context mid-flow) into four phase-aligned sub-agents that hand off to each other through a shared state file.Topology
Sub-agents are hidden from the agent picker (
user-invocable: false) and reached only via handoff. All handoffs aresend: falseso the user confirms before each transition.Design properties
kickstart-builderwrites deployment artifacts but cannot touch the live clusterkickstart-revieweris read-only (noeditFiles, no destructive az/kubectl)kickstart-deployerhas destructive runtime tools but cannot write artifactskickstartkeeps both for early-phase work and serves as the escalation fallback.kickstart/state.jsonon entry and writes on exit (newskills/kickstart-state/SKILL.mddefines the schema, jq read/write helpers, and ownership table).kickstart/state.json, auto-appended to.gitignoreFiles
New
agents/kickstart-builder.agent.md— Phases 3-4agents/kickstart-deployer.agent.md— Phases 6-7 (the only destructive runtime agent)skills/kickstart-state/SKILL.md— shared state schema + helpersModified
agents/kickstart.agent.md— slimmed to orchestrator owning Phases 1-2agents/kickstart-reviewer.agent.md— handoff wiring updatespackage.json— register the two new agents and the state skillAGENTS.md,kickstart-guide.md— topology rewritesTesting
Declarative-only change. Validated:
package.jsonparses