Project Charter
Generate a Project+ charter + preliminary scope statement .docx. Draft-first: parse what the user gave, fill schema with facts + TBDs, run the script. Only interview if the user explicitly asks.
Hard rules
- Never invent. No made-up numbers, dates, names, metrics, constraints, or stakeholders. Anything unknown →
[TBD — <reason>]. Fabricated charter content becomes fabricated requirements downstream.
- Preserve exact time/date wording. "October" stays "October" — never "October 31" or "end of October". "Q2" stays "Q2" — never "June 30". "$150k" stays "$150k" — never "$150,000". If you find yourself converting an imprecise phrase into a specific date to complete a SMART objective, stop and mark that date portion
[TBD].
- Out-of-scope must not be empty. If the user didn't state exclusions, use
[TBD — ask sponsor what adjacencies should be excluded] as a single bullet. Empty exclusions = charter bug.
- ≤3 sentences per field. Project+ convention.
Run it
Pipe JSON directly to the script (one call, no temp file):
python3 scripts/create_charter.py --output "<dir>/<ProjectName>_Charter_v1.docx" <<'JSON'
{ ...schema... }
JSON
Script handles all formatting, TBD highlighting, Draft Gaps box at top, and open_questions.md when TBDs ≥ 5.
JSON schema
{
"header": {
"project_name": "string",
"project_manager": "string or [TBD]",
"sponsor": "string or [TBD]",
"date": "YYYY-MM-DD",
"version": "v1"
},
"vision": "1–2 sentence problem statement and why this project exists",
"objectives": [
{
"statement": "SMART statement",
"leading_indicator": "early predictive signal",
"lagging_indicator": "realized outcome metric"
}
],
"scope": {
"summary": "2–3 sentence scope description",
"in_scope": ["bullet"],
"out_of_scope": ["bullet"]
},
"preliminary_scope": {
"deliverables": ["bullet"],
"acceptance_criteria": ["bullet"],
"assumptions": ["bullet"],
"constraints": {
"budget": "string or [TBD]",
"timeline": "string or [TBD]",
"resources": "string or [TBD]",
"technical_or_regulatory": "string or [TBD]"
}
},
"stakeholders": [{"name_or_group": "string", "role": "string"}],
"implementation": {
"milestones": [{"name": "string", "target_date": "string or [TBD]"}],
"risks": [{"risk": "string", "impact": "H/M/L", "likelihood": "H/M/L", "response": "string"}],
"dependencies": ["bullet"]
}
}
Arrays may be empty. Any string may be [TBD — reason].
1---2name: project-charter3description: Generate a sponsor-ready project charter and preliminary scope statement as a .docx. Use whenever a user is starting a new project and needs to formally frame it — triggers include "project charter", "charter doc", "scope statement", "preliminary scope", "initiating a project", "PID", "authorize the project", or any context where a PM needs to capture vision, scope, deliverables, success criteria, and sponsor approval in one document. Enforces Project+ conventions and prevents fabrication of numbers, dates, or constraints the user never stated.4---56# Project Charter78Generate a Project+ charter + preliminary scope statement .docx. Draft-first: parse what the user gave, fill schema with facts + TBDs, run the script. Only interview if the user explicitly asks.910## Hard rules11121. **Never invent.** No made-up numbers, dates, names, metrics, constraints, or stakeholders. Anything unknown → `[TBD — <reason>]`. Fabricated charter content becomes fabricated requirements downstream.132. **Preserve exact time/date wording.** *"October"* stays *"October"* — never *"October 31"* or *"end of October"*. *"Q2"* stays *"Q2"* — never *"June 30"*. *"$150k"* stays *"$150k"* — never *"$150,000"*. If you find yourself converting an imprecise phrase into a specific date to complete a SMART objective, stop and mark that date portion `[TBD]`.143. **Out-of-scope must not be empty.** If the user didn't state exclusions, use `[TBD — ask sponsor what adjacencies should be excluded]` as a single bullet. Empty exclusions = charter bug.154. **≤3 sentences per field.** Project+ convention.1617## Run it1819Pipe JSON directly to the script (one call, no temp file):2021```bash22python3 scripts/create_charter.py --output "<dir>/<ProjectName>_Charter_v1.docx" <<'JSON'23{ ...schema... }24JSON25```2627Script handles all formatting, TBD highlighting, Draft Gaps box at top, and `open_questions.md` when TBDs ≥ 5.2829## JSON schema3031```json32{33 "header": {34 "project_name": "string",35 "project_manager": "string or [TBD]",36 "sponsor": "string or [TBD]",37 "date": "YYYY-MM-DD",38 "version": "v1"39 },40 "vision": "1–2 sentence problem statement and why this project exists",41 "objectives": [42 {43 "statement": "SMART statement",44 "leading_indicator": "early predictive signal",45 "lagging_indicator": "realized outcome metric"46 }47 ],48 "scope": {49 "summary": "2–3 sentence scope description",50 "in_scope": ["bullet"],51 "out_of_scope": ["bullet"]52 },53 "preliminary_scope": {54 "deliverables": ["bullet"],55 "acceptance_criteria": ["bullet"],56 "assumptions": ["bullet"],57 "constraints": {58 "budget": "string or [TBD]",59 "timeline": "string or [TBD]",60 "resources": "string or [TBD]",61 "technical_or_regulatory": "string or [TBD]"62 }63 },64 "stakeholders": [{"name_or_group": "string", "role": "string"}],65 "implementation": {66 "milestones": [{"name": "string", "target_date": "string or [TBD]"}],67 "risks": [{"risk": "string", "impact": "H/M/L", "likelihood": "H/M/L", "response": "string"}],68 "dependencies": ["bullet"]69 }70}71```7273Arrays may be empty. Any string may be `[TBD — reason]`.