Skip to content

Instantly share code, notes, and snippets.

@vicainelli
Last active August 25, 2026 10:42
Show Gist options
  • Select an option

  • Save vicainelli/e767b8b0d694baf720b1f661a1b73e9e to your computer and use it in GitHub Desktop.

Select an option

Save vicainelli/e767b8b0d694baf720b1f661a1b73e9e to your computer and use it in GitHub Desktop.
Agent Plan JSON Schema

Generate a plan as a valid JSON object using the provided schema.

Rules:

  • Return only JSON.
  • Do not include markdown.
  • Break the work into phases, tasks, and subtasks.
  • Every phase, task, subtask, risk, milestone, question, and action must have a stable ID.
  • Tasks should be small enough to be assigned or tracked individually.
  • Subtasks should describe concrete actions, not vague goals.
  • Include dependencies using IDs from earlier tasks or subtasks when possible.
  • Include acceptance criteria for each task and subtask.
  • Include open questions if information is missing.
  • Include next actions that can be started immediately.
  • If assumptions are necessary, list them explicitly.
{
"plan_id": "PLAN-001",
"title": "Launch a Small Business Website",
"summary": "A phased plan for creating, testing, and launching a simple business website.",
"objective": "Publish a professional website that explains the business, captures leads, and is easy to maintain.",
"assumptions": [
"The business already has a name and basic branding.",
"The site will include no more than five core pages.",
"The website will use an existing website builder or CMS."
],
"constraints": [
"Keep the first version simple.",
"Avoid custom software development unless necessary."
],
"success_criteria": [
"Website is live on the chosen domain.",
"All core pages are published.",
"Contact form submissions are successfully received.",
"Site works on desktop and mobile."
],
"phases": [
{
"phase_id": "P1",
"title": "Define Requirements",
"goal": "Clarify what the website needs to accomplish.",
"order": 1,
"tasks": [
{
"task_id": "T1.1",
"title": "Identify core website goals",
"description": "Define the primary business outcomes the website should support.",
"status": "not_started",
"priority": "high",
"estimated_effort": "1 hour",
"dependencies": [],
"outputs": [
"List of primary website goals"
],
"acceptance_criteria": [
"At least three website goals are documented.",
"Each goal is tied to a business outcome."
],
"risks": [
{
"risk_id": "R1.1.1",
"description": "Goals may be too vague to guide design decisions.",
"mitigation": "Rewrite each goal as a measurable outcome."
}
],
"subtasks": [
{
"subtask_id": "ST1.1.1",
"title": "List desired visitor actions",
"description": "Identify what visitors should do, such as calling, submitting a form, or booking a consultation.",
"status": "not_started",
"dependencies": [],
"acceptance_criteria": [
"At least three desired visitor actions are listed."
]
},
{
"subtask_id": "ST1.1.2",
"title": "Rank goals by importance",
"description": "Prioritize goals so the site design can emphasize the most important outcomes.",
"status": "not_started",
"dependencies": ["ST1.1.1"],
"acceptance_criteria": [
"Goals are ranked from highest to lowest priority."
]
}
]
}
]
}
],
"open_questions": [
{
"question_id": "Q1",
"question": "What platform will the website be built on?",
"why_it_matters": "The platform affects design options, cost, hosting, and maintenance.",
"blocking": false
}
],
"milestones": [
{
"milestone_id": "M1",
"title": "Requirements Approved",
"description": "Website goals, pages, and success criteria are confirmed.",
"related_task_ids": ["T1.1"],
"completion_criteria": [
"Core goals are documented.",
"Required pages are identified.",
"Open blocking questions are resolved."
]
}
],
"next_actions": [
{
"action_id": "A1",
"description": "List the top three business outcomes the website should support.",
"related_task_id": "T1.1"
}
]
}
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "AgentPlan",
"type": "object",
"required": [
"plan_id",
"title",
"summary",
"objective",
"assumptions",
"constraints",
"success_criteria",
"phases",
"open_questions",
"milestones",
"next_actions"
],
"properties": {
"plan_id": {
"type": "string"
},
"title": {
"type": "string"
},
"summary": {
"type": "string"
},
"objective": {
"type": "string"
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"constraints": {
"type": "array",
"items": {
"type": "string"
}
},
"success_criteria": {
"type": "array",
"items": {
"type": "string"
}
},
"phases": {
"type": "array",
"items": {
"type": "object",
"required": ["phase_id", "title", "goal", "order", "tasks"],
"properties": {
"phase_id": {
"type": "string"
},
"title": {
"type": "string"
},
"goal": {
"type": "string"
},
"order": {
"type": "integer",
"minimum": 1
},
"tasks": {
"type": "array",
"items": {
"type": "object",
"required": [
"task_id",
"title",
"description",
"status",
"priority",
"estimated_effort",
"dependencies",
"outputs",
"acceptance_criteria",
"risks",
"subtasks"
],
"properties": {
"task_id": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"not_started",
"in_progress",
"blocked",
"completed",
"cancelled"
]
},
"priority": {
"type": "string",
"enum": ["low", "medium", "high", "critical"]
},
"estimated_effort": {
"type": "string"
},
"dependencies": {
"type": "array",
"items": {
"type": "string"
}
},
"outputs": {
"type": "array",
"items": {
"type": "string"
}
},
"acceptance_criteria": {
"type": "array",
"items": {
"type": "string"
}
},
"risks": {
"type": "array",
"items": {
"type": "object",
"required": ["risk_id", "description", "mitigation"],
"properties": {
"risk_id": {
"type": "string"
},
"description": {
"type": "string"
},
"mitigation": {
"type": "string"
}
}
}
},
"subtasks": {
"type": "array",
"items": {
"type": "object",
"required": [
"subtask_id",
"title",
"description",
"status",
"dependencies",
"acceptance_criteria"
],
"properties": {
"subtask_id": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"not_started",
"in_progress",
"blocked",
"completed",
"cancelled"
]
},
"dependencies": {
"type": "array",
"items": {
"type": "string"
}
},
"acceptance_criteria": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
}
}
}
},
"open_questions": {
"type": "array",
"items": {
"type": "object",
"required": ["question_id", "question", "why_it_matters", "blocking"],
"properties": {
"question_id": {
"type": "string"
},
"question": {
"type": "string"
},
"why_it_matters": {
"type": "string"
},
"blocking": {
"type": "boolean"
}
}
}
},
"milestones": {
"type": "array",
"items": {
"type": "object",
"required": [
"milestone_id",
"title",
"description",
"related_task_ids",
"completion_criteria"
],
"properties": {
"milestone_id": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"related_task_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"completion_criteria": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"next_actions": {
"type": "array",
"items": {
"type": "object",
"required": ["action_id", "description", "related_task_id"],
"properties": {
"action_id": {
"type": "string"
},
"description": {
"type": "string"
},
"related_task_id": {
"type": "string"
}
}
}
}
}
}
Generate a plan as a valid JSON object using the provided schema.
Rules:
- Return only JSON.
- Do not include markdown.
- Break the work into phases, tasks, and subtasks.
- Every phase, task, subtask, risk, milestone, question, - and action must have a stable ID.
- Tasks should be small enough to be assigned or t- racked individually.
- Subtasks should describe concrete actions, not vague goals.
- Include dependencies using IDs from earlier tasks or subtasks when possible.
- Include acceptance criteria for each task and subtask.
- Include open questions if information is missing.
- Include next actions that can be started immediately.
- If assumptions are necessary, list them explicitly.
Save it as plan-945C361C-A6D9-475C-99FC-B677905FE387.json file in the root
Schema: https://gist.githubusercontent.com/vicainelli/e767b8b0d694baf720b1f661a1b73e9e/raw/2b475934ab5592092626478ffd088d5433abccf2/plan-schema.json
Output example: https://gist.githubusercontent.com/vicainelli/e767b8b0d694baf720b1f661a1b73e9e/raw/2b475934ab5592092626478ffd088d5433abccf2/output-example.json
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment