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.
This 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