get-shit-done/references/user-profiling.md
This reference document defines detection heuristics for behavioral profiling across 8 dimensions. The gsd-user-profiler agent applies these rules when analyzing extracted session messages. Do not invent dimensions or scoring rules beyond what is defined here.
dimension_id: communication_style
What we're measuring: How the developer phrases requests, instructions, and feedback -- the structural pattern of their messages to Claude.
Rating spectrum:
| Rating | Description |
|---|---|
terse-direct | Short, imperative messages with minimal context. Gets to the point immediately. |
conversational | Medium-length messages mixing instructions with questions and thinking-aloud. Natural, informal tone. |
detailed-structured | Long messages with explicit structure -- headers, numbered lists, problem statements, pre-analysis. |
mixed | No dominant pattern; style shifts based on task type or project context. |
Signal patterns:
Detection heuristics:
terse-directconversationaldetailed-structuredmixedmixed with context-dependent noteConfidence scoring:
Example quotes:
Context-dependent patterns:
When communication style varies systematically by project or task type, report the split rather than forcing a single rating. Example: "context-dependent: terse-direct for bug fixes and CLI tooling, detailed-structured for architecture and frontend work." Phase 3 orchestration resolves context-dependent splits by presenting the split to the user.
dimension_id: decision_speed
What we're measuring: How quickly the developer makes choices when Claude presents options, alternatives, or trade-offs.
Rating spectrum:
| Rating | Description |
|---|---|
fast-intuitive | Decides immediately based on experience or gut feeling. Minimal deliberation. |
deliberate-informed | Requests comparison or summary before deciding. Wants to understand trade-offs. |
research-first | Delays decision to research independently. May leave and return with findings. |
delegator | Defers to Claude's recommendation. Trusts the suggestion. |
Signal patterns:
Detection heuristics:
fast-intuitivedeliberate-informedresearch-firstdelegatorConfidence scoring:
Example quotes:
Context-dependent patterns:
Decision speed often varies by stakes. A developer may be fast-intuitive for styling choices but research-first for database or auth decisions. When this pattern is clear, report the split: "context-dependent: fast-intuitive for low-stakes (styling, naming), deliberate-informed for high-stakes (architecture, security)."
dimension_id: explanation_depth
What we're measuring: How much explanation the developer wants alongside code -- their preference for understanding vs. speed.
Rating spectrum:
| Rating | Description |
|---|---|
code-only | Wants working code with minimal or no explanation. Reads and understands code directly. |
concise | Wants brief explanation of approach with code. Key decisions noted, not exhaustive. |
detailed | Wants thorough walkthrough of the approach, reasoning, and code. Appreciates structure. |
educational | Wants deep conceptual explanation. Treats interactions as learning opportunities. |
Signal patterns:
Detection heuristics:
code-onlyconcisedetailededucationalConfidence scoring:
Example quotes:
Context-dependent patterns:
Explanation depth often correlates with domain familiarity. A developer may want code-only for well-known tech but educational for new domains. Report splits when observed: "context-dependent: code-only for React/TypeScript, detailed for database optimization."
dimension_id: debugging_approach
What we're measuring: How the developer approaches problems, errors, and unexpected behavior when working with Claude.
Rating spectrum:
| Rating | Description |
|---|---|
fix-first | Pastes error, wants it fixed. Minimal diagnosis interest. Results-oriented. |
diagnostic | Shares error with context, wants to understand the cause before fixing. |
hypothesis-driven | Investigates independently first, brings specific theories to Claude for validation. |
collaborative | Wants to work through the problem step-by-step with Claude as a partner. |
Signal patterns:
Detection heuristics:
fix-firstdiagnostichypothesis-drivencollaborativeConfidence scoring:
Example quotes:
Context-dependent patterns:
Debugging approach may vary by urgency. A developer might be fix-first under deadline pressure but hypothesis-driven during regular development. Note temporal patterns if detected.
dimension_id: ux_philosophy
What we're measuring: How the developer prioritizes user experience, design, and visual quality relative to functionality.
Rating spectrum:
| Rating | Description |
|---|---|
function-first | Get it working, polish later. Minimal UX concern during implementation. |
pragmatic | Basic usability from the start. Nothing ugly or broken, but no design obsession. |
design-conscious | Design and UX are treated as important as functionality. Attention to visual detail. |
backend-focused | Primarily builds backend/CLI. Minimal frontend exposure or interest. |
Signal patterns:
Detection heuristics:
function-firstpragmaticdesign-consciousbackend-focusedConfidence scoring:
Example quotes:
Context-dependent patterns:
UX philosophy is inherently project-dependent. A developer building a CLI tool is necessarily backend-focused for that project. When possible, distinguish between project-driven and preference-driven patterns. If the developer only has backend projects, note that the rating reflects available data: "backend-focused (note: all analyzed projects are backend/CLI -- may not reflect frontend preferences)."
dimension_id: vendor_philosophy
What we're measuring: How the developer approaches choosing and evaluating libraries, frameworks, and external services.
Rating spectrum:
| Rating | Description |
|---|---|
pragmatic-fast | Uses what works, what Claude suggests, or what's fastest. Minimal evaluation. |
conservative | Prefers well-known, battle-tested, widely-adopted options. Risk-averse. |
thorough-evaluator | Researches alternatives, reads docs, compares features and trade-offs before committing. |
opinionated | Has strong, pre-existing preferences for specific tools. Knows what they like. |
Signal patterns:
Detection heuristics:
pragmatic-fastconservativethorough-evaluatoropinionatedConfidence scoring:
Example quotes:
Context-dependent patterns:
Vendor philosophy may shift based on project importance or domain. Personal projects may use pragmatic-fast while professional projects use thorough-evaluator. Report the split if detected.
dimension_id: frustration_triggers
What we're measuring: What causes visible frustration, correction, or negative emotional signals in the developer's messages to Claude.
Rating spectrum:
| Rating | Description |
|---|---|
scope-creep | Frustrated when Claude does things that were not asked for. Wants bounded execution. |
instruction-adherence | Frustrated when Claude doesn't follow instructions precisely. Values exactness. |
verbosity | Frustrated when Claude over-explains or is too wordy. Wants conciseness. |
regression | Frustrated when Claude breaks working code while fixing something else. Values stability. |
Signal patterns:
Detection heuristics:
scope-creepinstruction-adherenceverbosityregressionConfidence scoring:
Example quotes:
Context-dependent patterns:
Frustration triggers tend to be consistent across projects (personality-driven, not project-driven). However, their intensity may vary with project stakes. If multiple frustration triggers are observed, report the primary (most frequent) and note secondaries.
dimension_id: learning_style
What we're measuring: How the developer prefers to understand new concepts, tools, or patterns they encounter.
Rating spectrum:
| Rating | Description |
|---|---|
self-directed | Reads code directly, figures things out independently. Asks Claude specific questions. |
guided | Asks Claude to explain relevant parts. Prefers guided understanding. |
documentation-first | Reads official docs and tutorials before diving in. References documentation. |
example-driven | Wants working examples to modify and learn from. Pattern-matching learner. |
Signal patterns:
Detection heuristics:
self-directedguideddocumentation-firstexample-drivenConfidence scoring:
Example quotes:
Context-dependent patterns:
Learning style often varies with domain expertise. A developer may be self-directed in familiar domains but guided or example-driven in new ones. Report the split if detected: "context-dependent: self-directed for TypeScript/Node, example-driven for Rust/systems programming."
Use the combined format for each evidence entry:
Signal: [pattern interpretation -- what the quote demonstrates] / Example: "[trimmed quote, ~100 characters]" -- project: [project name]
-- project: [name]The profiler agent must never select quotes containing any of the following patterns:
sk- (API key prefixes)Bearer (auth tokens)password (credentials)secret (secrets)token (when used as a credential value, not a concept discussion)api_key or API_KEY (API key references)/Users/john/..., /home/john/...)When sensitive content is found and excluded, report as metadata in the analysis output:
{
"sensitive_excluded": [
{ "type": "api_key_pattern", "count": 2 },
{ "type": "file_path_with_username", "count": 1 }
]
}
This metadata enables defense-in-depth auditing. Layer 2 (regex filter in the write-profile step) provides a second pass, but the profiler should still avoid selecting sensitive quotes.
Weight natural language messages higher than:
[DEBUG], [INFO], [ERROR])These message types are genuine but carry less behavioral signal. Deprioritize them when selecting evidence quotes.
Recent sessions (last 30 days) should be weighted approximately 3x compared to older sessions when analyzing patterns.
Developer styles evolve. A developer who was terse six months ago may now provide detailed structured context. Recent behavior is a more accurate reflection of current working style.
| Total Genuine Messages | Mode | Behavior |
|---|---|---|
| > 50 | full | Full analysis across all 8 dimensions. Questionnaire optional (user can choose to supplement). |
| 20-50 | hybrid | Analyze available messages. Score each dimension with confidence. Supplement with questionnaire for LOW/UNSCORED dimensions. |
| < 20 | insufficient | All dimensions scored LOW or UNSCORED. Recommend questionnaire fallback as primary profile source. Note: "insufficient session data for behavioral analysis." |
When a specific dimension has insufficient data (even if total messages exceed thresholds):
UNSCORED[]0When operating in hybrid mode, the questionnaire fills gaps for dimensions where session analysis produced LOW or UNSCORED confidence. The questionnaire-derived ratings use:
If session analysis and questionnaire agree on a dimension, confidence can be elevated (e.g., session LOW + questionnaire MEDIUM agreement = MEDIUM).
The profiler agent must return JSON matching this exact schema, wrapped in <analysis> tags.
{
"profile_version": "1.0",
"analyzed_at": "ISO-8601 timestamp",
"data_source": "session_analysis",
"projects_analyzed": ["project-name-1", "project-name-2"],
"messages_analyzed": 0,
"message_threshold": "full|hybrid|insufficient",
"sensitive_excluded": [
{ "type": "string", "count": 0 }
],
"dimensions": {
"communication_style": {
"rating": "terse-direct|conversational|detailed-structured|mixed",
"confidence": "HIGH|MEDIUM|LOW|UNSCORED",
"evidence_count": 0,
"cross_project_consistent": true,
"evidence_quotes": [
{
"signal": "Pattern interpretation describing what the quote demonstrates",
"quote": "Trimmed quote, approximately 100 characters",
"project": "project-name"
}
],
"summary": "One to two sentence description of the observed pattern",
"claude_instruction": "Imperative directive for Claude: 'Match structured communication style' not 'You tend to provide structured context'"
},
"decision_speed": {
"rating": "fast-intuitive|deliberate-informed|research-first|delegator",
"confidence": "HIGH|MEDIUM|LOW|UNSCORED",
"evidence_count": 0,
"cross_project_consistent": true,
"evidence_quotes": [],
"summary": "string",
"claude_instruction": "string"
},
"explanation_depth": {
"rating": "code-only|concise|detailed|educational",
"confidence": "HIGH|MEDIUM|LOW|UNSCORED",
"evidence_count": 0,
"cross_project_consistent": true,
"evidence_quotes": [],
"summary": "string",
"claude_instruction": "string"
},
"debugging_approach": {
"rating": "fix-first|diagnostic|hypothesis-driven|collaborative",
"confidence": "HIGH|MEDIUM|LOW|UNSCORED",
"evidence_count": 0,
"cross_project_consistent": true,
"evidence_quotes": [],
"summary": "string",
"claude_instruction": "string"
},
"ux_philosophy": {
"rating": "function-first|pragmatic|design-conscious|backend-focused",
"confidence": "HIGH|MEDIUM|LOW|UNSCORED",
"evidence_count": 0,
"cross_project_consistent": true,
"evidence_quotes": [],
"summary": "string",
"claude_instruction": "string"
},
"vendor_philosophy": {
"rating": "pragmatic-fast|conservative|thorough-evaluator|opinionated",
"confidence": "HIGH|MEDIUM|LOW|UNSCORED",
"evidence_count": 0,
"cross_project_consistent": true,
"evidence_quotes": [],
"summary": "string",
"claude_instruction": "string"
},
"frustration_triggers": {
"rating": "scope-creep|instruction-adherence|verbosity|regression",
"confidence": "HIGH|MEDIUM|LOW|UNSCORED",
"evidence_count": 0,
"cross_project_consistent": true,
"evidence_quotes": [],
"summary": "string",
"claude_instruction": "string"
},
"learning_style": {
"rating": "self-directed|guided|documentation-first|example-driven",
"confidence": "HIGH|MEDIUM|LOW|UNSCORED",
"evidence_count": 0,
"cross_project_consistent": true,
"evidence_quotes": [],
"summary": "string",
"claude_instruction": "string"
}
}
}
profile_version: Always "1.0" for this schema versionanalyzed_at: ISO-8601 timestamp of when the analysis was performeddata_source: "session_analysis" for session-based profiling, "questionnaire" for questionnaire-only, "hybrid" for combinedprojects_analyzed: List of project names that contributed messagesmessages_analyzed: Total number of genuine user messages processedmessage_threshold: Which threshold mode was triggered (full, hybrid, insufficient)sensitive_excluded: Array of excluded sensitive content types with counts (empty array if none found)claude_instruction: Must be written in imperative form directed at Claude. This field is how the profile becomes actionable.
For each dimension, assess whether the observed pattern is consistent across the projects analyzed:
cross_project_consistent: true -- Same rating would apply regardless of which project is analyzed. Evidence from 2+ projects shows the same pattern.cross_project_consistent: false -- Pattern varies by project. Include a context-dependent note in the summary.When cross_project_consistent is false, the summary must describe the split:
The rating field should reflect the dominant pattern (most evidence). The summary describes the nuance.
Context-dependent splits are resolved during Phase 3 orchestration. The orchestrator presents the split to the developer and asks which pattern represents their general preference. Until resolved, Claude uses the dominant pattern with awareness of the context-dependent variation.
Reference document version: 1.0 Dimensions: 8 Schema: profile_version 1.0