Detect and capture technical preferences, naming conventions, and architectural practices from user messages into Packmind standards. Trigger when user prescribes HOW to code through direct statements (e.g., "Use snake_case for columns", "Always use async/await") or suggestive patterns like questions ("Could we use X instead?"), code review feedback ("This would be clearer with X"), and comparative statements ("Use X instead of Y"). Does NOT trigger for feature requests, bug reports, or general implementation tasks without coding preferences.
70
86%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
This skill helps detect technical preferences in user messages and captures them systematically in .claude/signal-capture.yaml for integration into coding standards.
TRIGGER THIS SKILL IMMEDIATELY WHEN THE USER:
TRIGGER AS SOON AS YOU DETECT THE PREFERENCE - don't wait until the end of your response. Ask for validation immediately.
MANDATORY MESSAGE CHECK: For every user message, ask yourself: "Is the user telling me HOW to code?" If yes → trigger this skill.
User: "Could we just ensure that standardFile exists instead of using optional chaining?"
AI: [Detects this is a suggestive pattern indicating a preference]
AI: [Implements the change but FORGETS to capture the preference as a rule] ❌
CORRECT BEHAVIOR:
AI: [Detects suggestive pattern]
AI: [Immediately triggers skill]
AI: [Asks user: "I detected a technical preference. Add this rule to tests-redaction?"]
AI: [If approved, logs to .claude/signal-capture.yaml]
AI: [Continues with the implementation]TRIGGER CONDITIONS - User prescribes HOW to code:
NON-TRIGGER CONDITIONS - User asks WHAT to build or fix (without HOW):
⚠️ EXCEPTION: If any of the above includes principle references (KISS, DRY, SOLID, best practices), it BECOMES a trigger. Ask for specific rules before proceeding.
When a technical preference is detected in the user's message:
Present the detected preference to the user for approval:
I detected a technical preference. Add this rule to [STANDARD_NAME]?
Proposed rule: "[REFORMULATED_RULE]"
Format guidelines for the proposed rule:
Wait for user approval before proceeding. If user refuses, continue with the original task without updating standards.
When the user references abstract principles (KISS, DRY, SOLID, best practices) without explicit rules, ask for specifics before capturing:
I noticed you mentioned [PRINCIPLE]. To capture this as a standard, could you specify concrete rules? For example:
- [Suggest 2-3 specific rules relevant to the context]
Which rules would you like to add, or type "skip" to continue without capturing.
This applies to:
Language Independence: Signal detection works regardless of the input language. Common principle names (KISS, DRY, SOLID) are universal. For localized terms, recognize equivalents like:
.claude/signal-capture.yamlIf approved, append the change to .claude/signal-capture.yaml:
- newRule: '<rule text>' # omit this field for DELETED operations
oldRule: '<previous text>' # required for UPDATED and DELETED operations
operation: ADDED | UPDATED | DELETED
standard: '<short-name>' # e.g., typescript-code-standards, tests-redaction
date: '<ISO date>' # e.g., 2025-12-19
sourceFile: '<file path where signal was captured>' # file being worked on when rule was captured
language: '<language>' # omit for DELETED operations
goodExample: | # omit for DELETED operations
<valid code example>
badExample: | # omit for DELETED operations
<invalid code example>YAML Logging Rules:
Operations:
ADDED: New rule being added (requires: newRule, standard, date, sourceFile, language, goodExample, badExample)UPDATED: Existing rule being modified (requires: newRule, oldRule, standard, date, sourceFile, language, goodExample, badExample)DELETED: Rule being removed (requires: oldRule, standard, date, sourceFile)Examples:
Standard Names:
typescript-code-standards, tests-redaction, changelog, api-design, react-patternsSource File:
After logging, confirm to the user:
Rule logged to
.claude/signal-capture.yamlfor the [STANDARD_NAME] standard.
Then continue with the original task.
User message: "All API response types should have a 'data' property wrapper"
Detection: New architectural practice detected
Validation prompt:
I detected a technical preference. Add this rule to api-design?
Proposed rule: "Wrap all API responses in a data property for consistency"
If approved, log:
- newRule: 'Wrap all API responses in a data property for consistency'
operation: ADDED
standard: 'api-design'
date: '2025-12-19'
sourceFile: 'src/api/users.ts'
language: 'TYPESCRIPT'
goodExample: |
return {
data: { users: [...] },
meta: { total: 100 }
}
badExample: |
return {
users: [...],
total: 100
}User message: "Actually, let's update our interface naming - only prefix public interfaces with I, not internal ones"
Detection: Modification to existing naming convention
Validation prompt:
I detected a technical preference. Update the rule in typescript-code-standards?
Old rule: "Prefix interfaces with I" New rule: "Prefix public interfaces with I (internal interfaces don't need prefix)"
If approved, log:
- newRule: "Prefix public interfaces with I (internal interfaces don't need prefix)"
oldRule: 'Prefix interfaces with I'
operation: UPDATED
standard: 'typescript-code-standards'
date: '2025-12-19'
sourceFile: 'src/types/user.ts'
language: 'TYPESCRIPT'
goodExample: |
// Public
export interface IUserService { }
// Internal
interface UserCache { }
badExample: |
// Public
export interface UserService { }
// Internal
interface IUserCache { }User message: "Remove the rule about using JSDoc comments everywhere, it's too verbose"
Detection: Rule removal requested
Validation prompt:
I detected a request to remove a rule from typescript-code-standards?
Rule to remove: "Add JSDoc comments to all exported functions"
If approved, log:
- oldRule: 'Add JSDoc comments to all exported functions'
operation: DELETED
standard: 'typescript-code-standards'
date: '2025-12-19'
sourceFile: 'CLAUDE.md'User message: "Could we just ensure that standardFile and recipeFile exist instead of those optional chaining?"
Detection: Suggestive pattern revealing a testing practice preference (use assertions instead of optional chaining for test data setup)
Validation prompt:
I detected a technical preference. Add this rule to tests-redaction?
Proposed rule: "Use assert to verify test data exists in beforeEach setup rather than optional chaining in test assertions for clearer failure messages and type narrowing"
If approved, log:
- newRule: 'Use assert to verify test data exists in beforeEach setup rather than optional chaining in test assertions for clearer failure messages and type narrowing'
operation: ADDED
standard: 'tests-redaction'
date: '2026-01-08'
sourceFile: 'packages/integration-tests/src/coding-agents-deployments/claude-deployment.spec.ts'
language: 'TYPESCRIPT'
goodExample: |
let recipeFile: FileModification;
beforeEach(() => {
const found = files.find(f => f.path.startsWith('.claude/'));
assert(found, 'Recipe file should exist');
recipeFile = found;
});
it('includes content', () => {
expect(recipeFile.content).toContain('---');
});
badExample: |
let recipeFile: FileModification | undefined;
beforeEach(() => {
recipeFile = files.find(f => f.path.startsWith('.claude/'));
});
it('includes content', () => {
expect(recipeFile?.content).toContain('---');
});Signal capture should happen seamlessly:
The goal is to build a knowledge base of coding preferences over time without interrupting the development flow.
REMEMBER: This skill is MANDATORY when users express technical preferences. Unlike other capture skills, this one requires user validation before logging. When you detect a preference, you MUST ask for approval - don't skip this step. Every captured preference helps build a comprehensive knowledge base of coding standards.
e198635
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.