Adds the profile recommendation step to /ultrabrief-local Phase 4. The brief stays universal (same questions, same template); the new step is purely a processing-decision layer that records which profile downstream commands should apply. What lands: - agents/profile-recommender.md — new sonnet agent that scores available profiles against the finalized brief (keyword + NFR-signal matching, axis bumps, hallucination gate that forbids inventing profile names). Emits a fenced JSON block with ranked entries. - templates/ultrabrief-template.md — frontmatter gains recommended_profile, profile_match, profile_rationale (default values applied when only `default` is available — true at M1). - commands/ultrabrief-local.md — Phase 4 gains Step 4h with explicit branches: short-circuit when only `default` exists; AskUserQuestion confirmation when top score ≥ 0.7; explicit fallback message when below threshold; manual selection sub-question on user override. Persists the three frontmatter fields to brief.md after user confirmation. JSON parser failure falls back to `default` with `profile_match: fallback` rather than blocking — silent fallback is the worst outcome, but a *visible* fallback is acceptable. - scripts/profile-loader.mjs — adds selectRecommendation(ranked, opts) + RECOMMENDATION_THRESHOLD=0.7 export. Single source of truth for the threshold logic so the command spec and the helper agree. - scripts/profile-loader.test.mjs — 10 new tests for selectRecommendation (default-only, empty/malformed input, above/below threshold, custom threshold, max-by-score, missing fields). Total now 36/36. - README.md / CLAUDE.md / marketplace landing — docs reflect M0 + M1 shipped, M2 + M3 still pending. In practice nothing changes for users at M1 because only `default` is available — Step 4h takes the short-circuit path and writes `profile_match: default-only`. M2 ships the additional profiles that make the recommender meaningful. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
5.1 KiB
| type | brief_version | created | task | slug | project_dir | research_topics | research_status | auto_research | interview_turns | source | recommended_profile | profile_match | profile_rationale | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ultrabrief | 2.0 |
|
{one-line task description} |
|
.claude/projects/{YYYY-MM-DD}-{slug}/ |
|
pending | false |
|
|
default | default-only | Single profile available; no recommendation made. |
Task: {title}
Generated by
/ultrabrief-localon {YYYY-MM-DD}. This brief is the contract between requirements and planning./ultraplan-localreads it to produce the implementation plan. Every decision in the plan must trace back to content in this brief.
Intent
Why are we doing this? What is the motivation, user need, or strategic context? 3-5 sentences. Load-bearing for the plan — every implementation decision must trace back to this intent.
{Intent paragraph. Answers "why bother?".}
Goal
What does success look like concretely? What state will the system be in when this is done? 1 paragraph. Specific enough to disagree with.
{Goal paragraph.}
Non-Goals
What is explicitly out of scope? Prevents plan-critic and scope-guardian from flagging gaps for things we deliberately do not do.
- {non-goal 1}
- {non-goal 2}
Constraints
Technical, time, or resource limitations. Hard boundaries the plan must respect.
- {constraint 1}
- {constraint 2}
Preferences
Preferred patterns, frameworks, libraries, or approaches. Soft constraints (the plan may deviate with justification).
- {preference 1}
- {preference 2}
Non-Functional Requirements
Performance, security, accessibility, scalability, or other quality attributes. Quantified where possible.
- {NFR 1 — e.g., "p95 response time < 200ms"}
- {NFR 2 — e.g., "Zero new npm dependencies"}
Success Criteria
Falsifiable, command-checkable conditions that define "done". Each must be verifiable by running a specific command or observing a specific system behavior.
- {criterion — e.g., "All existing tests pass:
npm testexits 0"} - {criterion — e.g., "New endpoint returns 200:
curl -s localhost:3000/api/health | jq .status→"ok""} - {criterion — e.g., "No TypeScript errors:
npx tsc --noEmitexits 0"}
Do NOT write vague criteria:
- "It should work" (not testable)
- "The feature is implemented" (not falsifiable)
- "Performance is acceptable" (no baseline given)
Research Plan
Explicit research topics that must be answered before /ultraplan-local can
produce a high-confidence plan. Each topic is phrased as a research question ready
to feed into /ultraresearch-local. Topics may be empty (N=0) for trivial tasks
where the codebase alone is sufficient context.
{If research_topics = 0, write a single line: "No external research needed — the codebase and this brief contain sufficient context for planning."}
Topic 1: {Short title}
- Why this matters: {How the plan depends on this answer. Which steps or decisions cannot be made confidently without it.}
- Research question: "{Exact question to feed to /ultraresearch-local.
One sentence, ends in
?.}" - Suggested invocation:
/ultraresearch-local --project {project_dir} --external "{question}" - Required for plan steps: {which kinds of steps will consume this — e.g., "migration strategy", "library selection", "threat model"}
- Confidence needed: {high | medium | low}
- Estimated cost: {quick — inline research | standard — agent swarm | deep — with contrarian + gemini}
- Scope hint: {local | external | both}
Topic 2: {Short title}
- Why this matters: ...
- Research question: "..."
- Suggested invocation:
/ultraresearch-local --project {project_dir} ... - Required for plan steps: ...
- Confidence needed: ...
- Estimated cost: ...
- Scope hint: ...
Open Questions / Assumptions
Things still uncertain after the interview. These are carried as [ASSUMPTION]
entries into the plan and flagged to the user for review.
- {question or assumption 1}
- {question or assumption 2}
Prior Attempts
What has been tried before and what happened. Leave blank for fresh tasks. Prior attempts are load-bearing — they prevent the plan from repeating known failures.
{Prior attempts narrative, or "None — fresh task."}
Metadata
- Created: {YYYY-MM-DD}
- Interview turns: {N}
- Auto-research opted in: {yes | no}
- Source: {ultrabrief interview | manual}
How to continue
Manual (default):
# Run each research topic (order does not matter):
/ultraresearch-local --project {project_dir} --external "{Topic 1 question}"
/ultraresearch-local --project {project_dir} --external "{Topic 2 question}"
# Then plan:
/ultraplan-local --project {project_dir}
# Then execute:
/ultraexecute-local --project {project_dir}
Auto (opt-in during /ultrabrief-local): research and planning run
automatically; only execution is manual.