| name | project-kickoff |
| description | Interactive project kickoff for real-time client sessions. Captures goal, data sources, financial assumptions, existing documents, timeline, and team for any project type. Adapts questions to the project type. Checks existing asset data before requesting it. Saves a structured + narrative project file to projects/<asset-key>/. Triggers on: "kick off", "project kickoff", "start a project", "kickoff for", "begin a [type] project", "run a kickoff", "kickoff [asset]", "run a portfolio analysis", "run portfolio analysis", "analyze the portfolio", "portfolio decarbonization", "portfolio analysis".
|
| version | 1.1.0 |
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>.json exists
has_prior_kickoff — true if the output file already exists
found_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_kickoff checks
projects/portfolio/<type-key>-kickoff.md. The timestamped version writes to
projects/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:
mkdir -p projects/<asset-key>/
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."