FLEXIBLE skill for North Star goal tracking with Serena MCP persistence. Parses vague goals into measurable criteria, tracks progress percentages, maintains goal history, integrates with wave execution. Prevents goal drift and context loss through structured storage. Essential for multi-session projects.
Converts vague goals into measurable objectives with milestones and tracks progress percentages. Automatically triggers when users state project goals or ask about progress, ensuring objectives survive context compaction through Serena storage.
/plugin marketplace add krzemienski/shannon-framework/plugin install shannon@shannon-frameworkThis skill is limited to using the following tools:
examples/north-star-example.mdtests/RED_PHASE_BASELINE.mdtests/REFACTOR_PHASE_PRESSURE.mdtests/TDD_REPORT.mdThis skill implements Shannon Framework's North Star goal tracking system through structured goal parsing, progress monitoring, and Serena MCP persistence. It transforms vague aspirations into measurable objectives and ensures goals survive context compaction.
Core Value: Guarantees goal alignment across multi-session projects by maintaining persistent, measurable goal state with history tracking.
Use this skill in these situations:
MANDATORY (Must Use):
RECOMMENDED (Should Use):
CONDITIONAL (May Use):
DO NOT rationalize skipping goal management because:
Required:
mode (string): Operation mode
"set": Create new goal or update existing"list": Display all active goals"show": Display specific goal details"update": Update goal progress or metadata"complete": Mark goal as complete"clear": Remove goals (archive)"history": Show goal history"restore": Restore goal from checkpointMode-Specific Inputs:
For "set" mode:
goal_text (string): User's goal description (can be vague)priority (string): "north-star" | "high" | "medium" | "low" (default: "medium")deadline (optional string): ISO date (YYYY-MM-DD)For "update" mode:
goal_id (string): Goal identifier from Serenaprogress (optional integer): 0-100 percentagenotes (optional string): Progress notesFor "complete" mode:
goal_id (string): Goal to mark completeFor "show" mode:
goal_id (string): Goal to displayTrigger: Token usage > 90% OR PreCompact hook active
Purpose: Prevent goal loss during context compaction by using fast-path storage
Process:
Next Session Recovery:
Priority: Goal storage completes BEFORE PreCompact checkpoint
Step 1: Parse Goal Text
Step 1.5: Resolve Ambiguous References
Step 2: Extract Measurable Criteria
Step 3: Check for Existing Goal
search_nodes with query="shannon/goals"Step 4: Create Goal Entity
create_entities{
"name": "goal-{timestamp}",
"entityType": "shannon-goal",
"observations": [
{
"goal_id": "GOAL-20251103T143000",
"goal_text": "Build e-commerce platform with auth, payments, catalog",
"priority": "north-star",
"status": "active",
"progress": 0,
"created_at": "2025-11-03T14:30:00.000Z",
"updated_at": "2025-11-03T14:30:00.000Z",
"milestones": [
{
"name": "User Authentication",
"description": "Users can register and login",
"weight": 40,
"status": "pending",
"completion_criteria": "Functional auth tests pass"
},
{
"name": "Payment Processing",
"description": "Users can checkout with credit cards",
"weight": 30,
"status": "pending",
"completion_criteria": "Stripe integration tests pass"
},
{
"name": "Product Catalog",
"description": "Products displayed with search",
"weight": 30,
"status": "pending",
"completion_criteria": "Catalog functional tests pass"
}
],
"deadline": null,
"wave_links": []
}
]
}
Step 5: Create Relations
create_relationsStep 6: Confirm to User
Step 1: Query Goals
search_nodes with query="shannon-goal active"Step 2: Sort by Priority
Step 3: Format Output
ID | Goal | Priority | Progress | Status
----------------|--------------------------------|-------------|----------|--------
GOAL-202511... | E-commerce platform | North Star | 66% | Active
GOAL-202511... | Add social login | High | 0% | Active
Step 4: Highlight North Star
Step 1: Retrieve Goal
open_nodes with goal_idStep 2: Update Progress
progress provided: Set directly (manual override)Step 3: Update Milestone Status
Step 3.5: Health Check Completed Milestones
Step 4: Store Updated Goal
add_observationsStep 5: Check Completion
Step 1: Retrieve Goal
open_nodesStep 2: Archive Goal
Step 3: Show Goal Velocity
Step 4: Store in History
add_observationsStep 1: Query Completed Goals
search_nodes with status="completed"Step 2: Calculate Metrics
Step 3: Display Timeline
Step 1: Load Checkpoint
Step 2: Reconcile Goals
Step 3: Restore Goal State
🚨 PROTOCOL ENFORCEMENT 🚨
This section addresses every rationalization pattern from RED phase baseline testing:
Detection: User states simple goal, skill skipped due to perceived clarity
Violation: Accept vague goal without parsing or structure
Counter-Argument:
Protocol: Parse ALL goals, regardless of perceived simplicity. Structure ensures alignment.
Detection: Single-session project, relying on memory instead of storage
Violation: Skip Serena storage, keep goal in context window
Counter-Argument:
Protocol: Store ALL goals in Serena, period. Memory is not reliable. Context window is temporary.
Detection: User states goal but doesn't request tracking explicitly
Violation: Skip goal management because request is implicit not explicit
Counter-Argument:
Protocol: Goal tracking is framework responsibility. Parse and store automatically whenever goal is stated.
Detection: User provides specific-sounding goal, parsing skipped
Violation: Accept goal without milestone extraction
Counter-Argument:
Protocol: Parse all goals to extract milestones. Even "clear" goals need structure for measurement.
Detection: Single goal, complexity low, storage skipped
Violation: Skip Serena storage for "simple" single-goal projects
Counter-Argument:
Protocol: Store all goals, even if only one. Context loss is independent of goal count.
Detection: Wave execution without explicit goal validation
Violation: Execute waves without checking goal-wave alignment
Counter-Argument:
Protocol: Before wave execution, validate wave deliverables match goal milestones. Update goal after wave.
Detection: Goal uses qualitative terms without metrics Examples: "More scalable", "Better performance", "Higher quality"
Violation: Accept goal without forcing quantification
Counter-Argument:
Protocol: For qualitative goals, force quantification:
This skill is FLEXIBLE type but has mandatory invocation points:
set modelist or show modeupdate modeViolation Detection: If you find yourself thinking any of these:
STOP. You are rationalizing. Return to workflow. Parse and store the goal.
For "set" mode:
{
"success": true,
"goal_id": "GOAL-20251103T143000",
"goal_text": "Build e-commerce platform with auth, payments, catalog",
"priority": "north-star",
"milestones": [
{
"name": "User Authentication",
"weight": 40,
"status": "pending"
},
{
"name": "Payment Processing",
"weight": 30,
"status": "pending"
},
{
"name": "Product Catalog",
"weight": 30,
"status": "pending"
}
],
"progress": 0,
"storage": "serena://shannon/goals/GOAL-20251103T143000",
"next_action": "Execute Wave 1 for User Authentication milestone"
}
For "list" mode:
{
"success": true,
"goals": [
{
"goal_id": "GOAL-20251103T143000",
"goal_text": "Build e-commerce platform",
"priority": "north-star",
"progress": 66,
"status": "active",
"next_milestone": "Product Catalog"
},
{
"goal_id": "GOAL-20251103T150000",
"goal_text": "Add social login",
"priority": "high",
"progress": 0,
"status": "active"
}
],
"north_star": "GOAL-20251103T143000"
}
For "update" mode:
{
"success": true,
"goal_id": "GOAL-20251103T143000",
"progress": 66,
"progress_change": "+30%",
"milestones_completed": ["User Authentication", "Payment Processing"],
"milestones_remaining": ["Product Catalog"],
"estimated_completion": "2025-11-10 (based on velocity)"
}
This skill succeeds if:
Validation:
def validate_goal_management(goal_id):
# Check 1: Goal exists in Serena
goal = serena.open_nodes([goal_id])
assert goal is not None
# Check 2: Has structured milestones
data = json.loads(goal.observations[0])
assert "milestones" in data
assert len(data["milestones"]) > 0
assert all("weight" in m for m in data["milestones"])
# Check 3: Progress calculable
progress = calculate_progress(data["milestones"])
assert 0 <= progress <= 100
# Check 4: Can restore after compaction
# (Simulate compaction by creating new context)
restored_goal = serena.search_nodes("shannon-goal active")
assert goal_id in [g.name for g in restored_goal]
Purpose: Prevent circular dependencies in milestone structure
When: Goal creation (set mode)
Process:
Example:
Purpose: Detect and alert on implicit goal expansion (scope creep)
Trigger: User adds features to active goal context
Process:
Example:
Benefits:
Wrong:
User: "Build a good platform"
Claude: "Got it, building a good platform."
[No parsing, no milestones, no storage]
Right:
User: "Build a good platform"
Claude: "Parsing goal... 'good' implies:
- User authentication (40%)
- Payment processing (30%)
- Product catalog (30%)
Is this correct? [Goal stored in Serena as GOAL-202511...]"
Why: Vague goals lead to scope creep and drift. Always parse into measurable criteria, even if goal seems clear.
Wrong:
Single goal project, complexity low.
"I'll keep it in context, no need for Serena storage."
Right:
Even single-goal projects get interrupted.
Storing goal in Serena: shannon/goals/GOAL-202511...
Progress survives context compaction.
Why: Context compaction doesn't discriminate by complexity. Always store in Serena, regardless of goal count.
Wrong:
Executing Wave 2: Auth system implementation.
[No check if auth aligns with goal milestones]
Right:
Validating Wave 2 against goal GOAL-202511...
Goal milestone: "User Authentication" (40% weight)
Wave 2 deliverables: Email/password auth
✅ Alignment verified. Proceeding with wave.
Why: Waves can drift without explicit validation. Always validate wave deliverables match goal milestones before execution.
Input:
{
"mode": "set",
"goal_text": "Launch MVP with user accounts and payment processing",
"priority": "north-star"
}
Process:
Output:
{
"success": true,
"goal_id": "GOAL-20251103T143000",
"goal_text": "Launch MVP with user accounts and payment processing",
"priority": "north-star",
"milestones": [
{"name": "User Accounts", "weight": 50, "status": "pending"},
{"name": "Payment Processing", "weight": 50, "status": "pending"}
],
"progress": 0,
"next_action": "Execute Wave 1 for User Accounts milestone"
}
Input:
{
"mode": "update",
"goal_id": "GOAL-20251103T143000",
"notes": "Wave 1 complete: Auth tests passing"
}
Process:
Output:
{
"success": true,
"goal_id": "GOAL-20251103T143000",
"progress": 50,
"progress_change": "+50%",
"milestones_completed": ["User Accounts"],
"milestones_remaining": ["Payment Processing"],
"next_action": "Execute Wave 2 for Payment Processing"
}
Input:
{
"mode": "list"
}
Process:
Output:
Active Goals:
⭐ North Star Goal:
ID: GOAL-20251103T143000
Goal: Launch MVP with user accounts and payment processing
Progress: 50% (1/2 milestones)
Next: Payment Processing
Other Goals:
ID: GOAL-20251103T150000
Goal: Add social login (Facebook, Google)
Priority: High
Progress: 0%
How to verify this skill worked correctly:
search_nodes("shannon-goal"), verify goal existsIn SKILL.md (this file):
In examples/ (for deep details):
examples/north-star-example.md: Complete goal lifecycleexamples/multi-goal-example.md: Priority managementexamples/wave-integration-example.md: Goal-wave alignmentshannon-plugin/core/PROJECT_MEMORY.md@context-preservation, @wave-orchestration, @phase-planning/shannon:check_mcps for Serena MCP configuration/shannon:north_star, /shannon:checkpoint (both use this skill)Skill Type: FLEXIBLE - Adapts to user's goal complexity and project scale Version: 4.0.0 Last Updated: 2025-11-03 Status: Core
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.