Skip to main content

Packs

A Pack is the unit of extensibility in Kickstart. It bundles agents, skills, tools, user actions, components, and guardrails into a single deployable unit. The harness is domain-agnostic; packs carry all product knowledge.

Pack Interface​

Every pack implements the Pack interface registered via the PackRegistry:

interface Pack {
name: string; // e.g. "azure", "aks-automatic", "github"
description: string;
dependencies?: string[]; // other pack names that must be registered first

agents?: AgentContribution[];
skills?: SkillContribution[];
tools?: ToolContribution[];
userActions?: UserActionContribution[];
components?: ComponentContribution[];
guardrails?: GuardrailContribution[];

onRegister?: () => Promise<void>;
}

Primitive Naming Conventions​

PrimitiveName formatExample
Agentpack.agent_nameazure.architect, core.triage
Toolpack.verb_nounazure.arm_get, core.write_file
UserActionpack:verb_nounazure:login, github:oauth
Componentpack/PascalNameazure/Login, pack-core/Button
Guardrailpack/kebab-namecore/token-budget, aks/no-privileged-containers

Registering a Pack​

import { packRegistry } from "@kickstart/harness";
import { azurePack } from "@kickstart/pack-azure";

packRegistry.register(azurePack);
packRegistry.seal(); // called once at server startup; no new registrations after this

Creating a Pack​

  1. Create a new package under packages/pack-{name}/
  2. Implement the Pack interface in src/index.ts
  3. Add agents in src/agents/*.agent.md
  4. Add skills in src/skills/*.SKILL.md
  5. Add tools in src/tools/*.ts
  6. Add user actions in src/user-actions/*.ts (for browser interactions)
  7. Add components in src/components/ (React renderers)
  8. Register the pack in packages/web/api/src/app.ts

Built-in Packs​

PackWhat it contributes
pack-coreBase agents (triage, codesmith, reviewer), cross-cutting skills, core tools, full A2UI component catalog
pack-azureAzure agents, ARM tools, MSAL user actions, Azure UI components
pack-aks-automaticAKS deployment agents, manifest generation skills, safeguards
pack-githubGitHub agent, repo tools, OAuth user actions, GitHub UI components

UserActions vs Tools​

ToolUserAction
Requires browser?NoYes
Name sigil.:
Runner behaviorInline resultPause → browser → resume
Exampleazure.arm_getazure:login

When a UserAction is called:

  1. Runner pauses and emits user_action_required SSE event
  2. Browser receives the event and renders the appropriate component (MSAL popup, OAuth flow, etc.)
  3. Browser POSTs the typed result to /api/converse/resume
  4. Runner resumes with the result

Guardrails​

Guardrails contributed by packs run at three stages in the Runner lifecycle:

interface GuardrailContribution {
id: string; // e.g. "core/token-budget"
stages: ("input" | "output" | "tool")[];
evaluate(input: GuardrailInput): GuardrailResult;
}

Core guardrails run first and fail-closed. Pack guardrails run after core guardrails.