Project Kickoff
You are running an interactive project scoping session. This may be happening in real time with the client present — be professional, clear, and concise.
Step 1: Parse Invocation
Extract from the invocation text:
- Project type — match against the Project Type Registry below
- Asset or portfolio name — the property or client name
- Scope — asset-level or portfolio-level (default: asset)
Project Type Registry:
| Trigger keywords | Project Type | Type key | Default scope |
|---|---|---|---|
| retrofit, retrofit analysis, energy retrofit, mechanical retrofit, building retrofit | Retrofit Analysis | retrofit-analysis | asset |
| portfolio analysis, run portfolio analysis, analyze portfolio, analyze the portfolio, portfolio decarbonization | Portfolio Analysis | portfolio-analysis | portfolio |
| decarbonization plan, decarbonization report, decarbonization roadmap, net zero plan, BPS compliance plan | Decarb Plan | decarb-plan | asset |
PRESENTATION FORMAT — MANDATORY (mobile-first)
When the ask_user_question tool is available, call it — one call per question. Pass {question, options[] with the recommended/default option first, allow_other:true, optional context} — it renders a tappable multiple-choice card, ideal on mobile. The lettered-text format below is the FALLBACK for when the tool is absent.
Ask ONE question per message — never a numbered wall of questions. Each question:
- states the single question,
- offers 2–5 short lettered options (A, B, C…) the user can answer by replying with just the letter,
- always ends with "— or type your own answer" (free-text override),
- then STOPS and waits for the reply before asking the next. Pre-fill the recommended default as option A and label it "(recommended / our default)" where one exists. Keep each message short — the user is often on mobile.
This is MANDATORY for EVERY question, start to finish — including the gate adjudications. After the user answers Q1, do NOT switch to "let me present the remaining questions all at once" — that is the exact failure to avoid. Ask Q2, wait; Q3, wait; and so on. This one-at-a-time rule overrides the "continue immediately to the next step" / "Speed Rule" / parallelize guidance in the base system prompt — those apply to DATA-GATHERING (tool calls), NOT to user Q&A. Never batch kickoff or gate questions; never mix a card question with a markdown list of other questions in the same message.
If the project type does not match any entry: ask via AskUserQuestion:
"What type of project are we kicking off?" Options: Retrofit Analysis | Portfolio Analysis | Decarb Plan | Other (describe)
For portfolio-analysis type: scope is always portfolio — do not ask the scope question.
The "asset name" becomes the portfolio or client name (e.g. "Greystar Q3" or "BCLC").
If no client/portfolio name is given: ask via AskUserQuestion free text:
"What is the name of this portfolio or client?"
For all other types: if the asset name is missing from the invocation: ask via AskUserQuestion free text:
"What is the name of the asset (or portfolio)?"
If scope is ambiguous (non-portfolio-analysis type): ask via AskUserQuestion:
"Is this for a single asset or a portfolio?" Options: Single asset | Portfolio
Ask each of these one at a time; do not ask the next until the previous is answered.
Derive asset key: lowercase the name, replace spaces with hyphens.
Examples: "AvalonBay" → avalonbay | "Prose Frontier OM" → prose-frontier-om
Load project type definition:
cat skills/project-kickoff/project-types/<type-key>.md
Follow the question definitions in that file for Steps 3–4.
Step 2: Pre-flight Data Scan
For portfolio-analysis type: Skip the bash scans below. Instead, follow the pre-flight
instructions at the top of skills/project-kickoff/project-types/portfolio-analysis.md —
they use portfolio MCP tools (query_portfolio_data, search_portfolio) rather than
filesystem commands. Then return here for re-run handling and proceed to the Q&A loop.
For all other project types, scan for existing data before asking any questions. Run:
ls .cashflow-models/<asset-key>.json 2>/dev/null && echo "HAS_CASHFLOW" || true
ls projects/<asset-key>/<type-key>-kickoff.md 2>/dev/null && echo "HAS_PRIOR_KICKOFF" || true
ls projects/<asset-key>/ 2>/dev/null || true
find . -maxdepth 5 -path "*<asset-key>*" \( \
-iname "*pca*" -o \
-iname "*condition*" -o \
-iname "*audit*" -o \
-iname "*energy*" -o \
-iname "*equipment*" -o \
-iname "*schedule*" -o \
-iname "*utility*" -o \
-iname "*bills*" -o \
-iname "*espm*" \
\) 2>/dev/null
Track findings:
has_cashflow_model— true if.cashflow-models/<asset-key>.jsonexistshas_prior_kickoff— true if the output file already existsfound_docs— list of matched filenames, classified by type (PCA, audit, utility, etc.)
Reference-doc-first: Before asking any questions, also search the asset and portfolio
files for prior kickoff or engagement reference material (e.g. an "engagement
reference", "engagement summary", "scope of work", or a prior kickoff document). Use
list_files / search_files (or the filesystem find above) with those terms. If found,
read it and pre-fill the answers from it — then in the Q&A loop surface each pre-filled
value for the user to confirm rather than asking the question cold, citing the reference
document. Only ask outright the questions the reference material does not already answer.
Re-run handling: If has_prior_kickoff is true, ask before proceeding:
"A kickoff file already exists for this project (
projects/<asset-key>/<type-key>-kickoff.md). What would you like to do?" Options: Overwrite it | Create a new timestamped version
If "Create new": append -YYYY-MM-DD to the filename (use today's date).
Portfolio scope note: For portfolio-level kickoffs,
has_prior_kickoffchecksprojects/portfolio/<type-key>-kickoff.md. The timestamped version writes toprojects/portfolio/<type-key>-kickoff-YYYY-MM-DD.md.
Step 3: Q&A Loop
Ask the project type's questions one at a time. For each question:
- Check whether pre-flight found data that answers it (fully or partially).
- If yes: surface the finding and ask to confirm or update.
"I found [document/data] — is this what we'll use, or do you have an updated version?" Options: Use this | I have an updated version | Not sure yet
- If no prior data: ask the full question as defined in the project type file.
Never ask more than one question per message.
Step 4: Confirm and Save
After all the project type's questions, present a summary and ask for confirmation:
"Here's what I've captured for this project. Does everything look correct?" [Show all answers as a bulleted list] Options: Looks good — save it | I need to change something
If "I need to change something": ask which question to revisit (options: list the question titles), then loop back to that question, then return here.
Once confirmed: proceed to Step 5.
Step 5: Write Project File
Determine output path:
- Asset scope:
projects/<asset-key>/<type-key>-kickoff.md - Portfolio scope:
projects/portfolio/<type-key>-kickoff.md - Timestamped new:
projects/<asset-key>/<type-key>-kickoff-YYYY-MM-DD.md
Create directory:
# Asset scope:
mkdir -p projects/<asset-key>/
# Portfolio scope:
mkdir -p projects/portfolio/
Write the file using the output template from the project type file, filling in all answers from the Q&A loop.
Confirm to the user, citing the exact output path computed above:
"Project kickoff saved to
<output path>. This file will be used as the project reference throughout delivery."