Project interview
Skill KhurrumMahmood/senior-vibe-engineer/.claude/skills/project-interview
Build the human-approved project profile that complements /adapt-project discovery. Reads repository facts first, then interviews the user about purpose, maturity, critical workflows, risk posture, desired direction, intentional tradeoffs, known-bad legacy patterns, and do-not-break surfaces. Writes draft artifacts under reports/project-interview/scan-<TS>/ by default; durable .engineering/project/profile.yml, profile.md, and open-questions.md require --apply.From its SKILL.md
npx -y skills add KhurrumMahmood/senior-vibe-engineer --skill project-interviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
9.8 KB, ~1.9k tokens by cl100k_base, as published. Nobody here has run it
/project-interview
Create the durable project profile that tells engineering-skills what
the project is trying to be. /adapt-project can discover facts, but it
cannot safely infer purpose, priorities, risk posture, intentional
tradeoffs, or whether a repeated pattern is healthy.
The deliverable is a draft or applied profile:
.engineering/project/profile.yml— machine-readable, human-approved project intent..engineering/project/profile.md— readable summary..engineering/project/open-questions.md— unresolved questions agents should revisit.
How success is judged
- The run writes a draft scan under
${ARTIFACT_ROOT}/reports/project-interview/scan-<TS>/by default, or additionally writes.engineering/project/only when--applywas explicitly requested. profile.yml,profile.md,open-questions.md, andevidence.jsonexist in the same scan directory, and the final reply pastes the exactevidence_gate.py checkoutput for that scan.- The stock-selected skill resolves both helpers from its own
scripts/directory and runs under isolated stdlib Python; no repository-levelscripts/, toolkit venv, or sibling skill is required. --no-host-writeruns never write inside${PROJECT_ROOT}. The command must use an${ARTIFACT_ROOT}outside the host project, and every later read/check uses that same artifact root.- User answers are captured in the draft profile, or unresolved topics are
left in
open-questions.md; do not claim human approval without a visible user answer.
Forms
/project-interview
/project-interview --project-root /path/to/repo
/project-interview --project-root /path/to/repo --artifact-root /private/tmp/adapt/foo --no-host-write
/project-interview --apply
Default behavior writes a draft under
reports/project-interview/scan-<TS>/. --apply writes durable files
under .engineering/project/. --no-host-write is the dogfood mode and
requires --artifact-root outside the host project.
Pipeline
-
Resolve the installed skill and artifact roots for this run:
PROJECT_ROOT="${PROJECT_ROOT:-$(pwd)}" ARTIFACT_ROOT="${ARTIFACT_ROOT:-${PROJECT_ROOT}}" PYTHON_BIN="${PYTHON_BIN:-python3}" if [ -n "${PROJECT_INTERVIEW_SKILL_DIR:-}" ]; then SKILL_DIR="${PROJECT_INTERVIEW_SKILL_DIR}" elif [ -f ".agents/skills/project-interview/SKILL.md" ]; then SKILL_DIR="$(cd .agents/skills/project-interview && pwd)" elif [ -f ".claude/skills/project-interview/SKILL.md" ]; then SKILL_DIR="$(cd .claude/skills/project-interview && pwd)" else echo "error: cannot find installed project-interview skill" >&2 exit 2 fiIf the user invoked
--no-host-write, setARTIFACT_ROOTto a directory outsidePROJECT_ROOTbefore running the helper. Reuse the exact sameARTIFACT_ROOTfor every later read and evidence gate. -
Run repo-fact discovery to seed the interview:
SCAN_DIR="$("${PYTHON_BIN}" -I -S \ "${SKILL_DIR}/scripts/project_interview.py" draft \ --project-root "${PROJECT_ROOT}" \ --artifact-root "${ARTIFACT_ROOT}")"Add
--no-host-writewhen the user requested it. The helper performs objective, lightweight discovery only and always writes an unapproved draft. Do not pass--applyhere; durable apply happens only after visible human answers are captured and confirmed. -
Read the printed scan directory:
test -d "${SCAN_DIR}" || { echo "missing scan: ${SCAN_DIR}" >&2; exit 2; }Read
${SCAN_DIR}/profile.yml,${SCAN_DIR}/profile.md, and${SCAN_DIR}/open-questions.md. -
Ask only questions that cannot be answered from the repo and that materially change future agent behavior:
- What is the project for, and who is it for?
- Which workflows are correctness-critical?
- Is this prototype, feature-shop, durable, or regulated work?
- Where should agents slow down?
- Which current patterns are intentional tradeoffs?
- Which common current patterns are known bad and must not be standardized?
- What should the project become next?
-
Update the profile draft with the user's answers if the run is interactive. Set
user_approved: trueonly after visible answers and confirmation; repository facts never count as human approval. If the user is unavailable, keepuser_approved: falseand leave the answers as open questions. Updateprofile.yml,profile.md, andopen-questions.mdtogether so the evidence shapes describe the same state. -
Run the evidence gate:
"${PYTHON_BIN}" -I -S "${SKILL_DIR}/scripts/evidence_gate.py" check \ --skill project-interview \ --scan-dir "${SCAN_DIR}"Paste the gate output in the final reply. A claim that the artifacts exist is not enough.
-
If and only if the user invoked
--apply, the evidence gate passed, and the visible answers supportuser_approved: true, apply the three profile artifacts:"${PYTHON_BIN}" -I -S \ "${SKILL_DIR}/scripts/project_interview.py" apply \ --project-root "${PROJECT_ROOT}" \ --scan-dir "${SCAN_DIR}"--applyand--no-host-writeare mutually exclusive intents. The helper refuses apply whileuser_approvedis not true and rejects a symlinked.engineering/projectdestination.
How Future Skills Use The Profile
/which-skilltunes recommendations by maturity and risk posture.- Planning skills treat critical workflows and intentional tradeoffs as prior constraints.
/adapt-project --applyshould prefer user-approved profile entries over inferred facts./prevent-regressionprioritizes guards for do-not-break surfaces./engineering-fitnesscan grade profile completeness once that skill ships.
Vibe-Coded Or Legacy Projects
The interview must explicitly ask what not to standardize. In a
messy project, repeated patterns are often scars, not examples. Capture
those under open-questions.md or the profile's standardization policy
so future agents do not turn accidental consistency into doctrine.
When things go sideways
| Symptom | Action |
|---|---|
--no-host-write fails because the artifact root is inside the project | Stop, choose an artifact root outside ${PROJECT_ROOT}, and rerun; do not retry without --no-host-write |
| The draft helper exits 2 | Paste stderr, fix the invocation or write-mode conflict, and do not claim a profile was produced |
| The printed scan directory is missing | Stop and report the printed path; do not fall back to a repo-local reports directory |
| Evidence gate reports missing tokens | Leave the run incomplete; name the missing token and scan directory in the user reply |
| User is unavailable for interview answers | Keep the generated draft and move unanswered items to open-questions.md; do not mark the profile approved |
Apply reports user_approved is not true | Keep the draft, ask for the missing human answers or confirmation, and never flip approval from repository inference |
--apply was requested but durable .engineering/project/ writes fail | Keep the draft scan as evidence, paste the write failure, and do not claim durable profile files were written |
Replay case
For artifact-root or evidence-gate changes, replay the dogfood form with a temporary artifact root:
ARTIFACT_ROOT="$(mktemp -d)"
PROJECT_ROOT="$(git rev-parse --show-toplevel)"
SKILL_DIR="${PROJECT_INTERVIEW_SKILL_DIR:-${PROJECT_ROOT}/.claude/skills/project-interview}"
PYTHON_BIN="${PYTHON_BIN:-python3}"
SCAN_DIR="$("${PYTHON_BIN}" -I -S \
"${SKILL_DIR}/scripts/project_interview.py" draft \
--project-root "$(git rev-parse --show-toplevel)" \
--artifact-root "${ARTIFACT_ROOT}" \
--timestamp project-interview-smoke \
--no-host-write)"
"${PYTHON_BIN}" -I -S "${SKILL_DIR}/scripts/evidence_gate.py" check \
--skill project-interview \
--scan-dir "${SCAN_DIR}"
The replay passes only when the helper prints the scan directory under
${ARTIFACT_ROOT} and the evidence gate prints OK: 3/3 required evidence shapes present.
What ships with it: 2 files
18.7 KB alongside SKILL.md, 2 of them executable
scripts/
- evidence_gate.pyruns3.9 KB
- project_interview.pyruns14.8 KB