Spec-kit workflow command: speckit-onboard-mentor
/onboard mentor [--feature <name>]
--feature: restrict the suggestion to a specific feature (default: all open features)You are executing the /onboard mentor command of the spec-kit-onboard extension.
.onboard/profile.json. If it does not exist, create it with default values and instruct: "Run /onboard start to personalize your profile."features/*/tasks.md of the features in scope (all, or the one specified by ).--featurefeatures/*/spec.md of the features in scope (for briefing context).level, tasks_completed, explained_artifacts, trails_generated, quiz_history[-1].gaps (if any).Build the list of candidate tasks:
[ ])blocked-by or depends-on that are still open)tasks_completed in the profileIf no eligible task is found, respond: "No tasks available right now. All open tasks are blocked by dependencies or have already been completed."
For each eligible task, calculate a score:
score = 0
// Level fit
IF level == "junior" AND task.complexity == "low": score += 3
IF level == "junior" AND task.complexity == "medium": score += 1
IF level == "junior" AND task.complexity == "high": score += 0
IF level == "mid" AND task.complexity == "medium": score += 3
IF level == "mid" AND task.complexity == "high": score += 1
IF level == "mid" AND task.complexity == "low": score += 1
IF level == "senior": score += complexity_value
// complexity_value: low=1, medium=2, high=3
// Natural progression
IF task is a direct follow-up of a task already in tasks_completed: score += 4
// "direct follow-up" = task whose depends-on points to a completed task
// Quiz gaps (avoids tasks in areas where dev showed gaps)
IF task.topics or task.feature intersects quiz_history[-1].gaps: score -= 1
// Already-read artifacts
IF the spec of the task's feature is in explained_artifacts: score += 2
// Trail already generated
IF the task's feature is in trails_generated: score += 1
Complexity inference: if the task does not explicitly declare complexity, estimate it based on the number of acceptance criteria listed:
lowmediumhighTiebreaker: in case of a score tie, select the task with the lowest index (order in tasks.md).
With the selected task, generate the briefing:
✦ mentor — suggested next task
[task-id] · [title] [features/<feature>]
──────────────────────────────────────────
What to do: [plain-language description of what the task requires]
Read before starting:
[list of most relevant artifacts — file + section, if applicable]
What you already know that's relevant:
[items from the dev's history (completed tasks, read artifacts) that connect to this task]
[if none: omit this section]
Watch out for:
[known risks: spec constraints, hook dependencies, relevant architectural decisions]
[if no risks identified: omit this section]
When done, run: /onboard badge
Level calibration:
junior: "What to do" in plain language with analogy if needed. "Read before starting" lists more artifacts. "Watch out for" explains the risk in a didactic way.mid: direct technical language. Focuses on what is non-obvious.senior: 1–2 line summary per section. Omits anything trivial.Check .speckit/extensions.json for jira or azure-devops extensions.
If jira is installed:
jira: <issue-key> (e.g., jira: AUTH-42) or inferred from the task title. Jira: [issue-key] — [issue summary]
Status: [jira status] | Assignee: [assignee or "unassigned"]
→ [issue URL]
Jira: no linked issue found for this task.Jira: integration unavailable. and continue.If azure-devops is installed:
ado: <item-id> (e.g., ado: 1234) or inferred from the task title. Azure DevOps: [item-id] — [item title]
State: [state] | Assigned to: [assignee or "unassigned"]
→ [item URL]
Azure DevOps: no linked work item found for this task.Azure DevOps: integration unavailable. and continue.If neither is installed: skip this step entirely.
Always end with:
Would you like me to expand on any aspect before you start?
Update .onboard/profile.json:
mentor_suggestions_followed by 1.consecutive_mentor_follows by 1.
consecutive_mentor_follows should only be incremented when the dev actually implements the suggested task. Since this command cannot know that, increment the counter here and let the after-implement hook check whether the completed task matches the last mentor suggestion.last_mentor_suggestion: "feature/task-id").mentor-streak: if consecutive_mentor_follows >= 3, move "mentor-streak" from locked to earned.last_updated.If mentor-streak was unlocked:
🏅 Badge unlocked: mentor-streak — Followed the mentor 3 times in a row!