Feedback
Manages OrchestKit feedback, usage analytics, learning preferences, and privacy settings. Use when reviewing patterns, pausing learning, or managing consent.
Auto-activated — this skill loads automatically when Claude detects matching context.
Feedback - Manage Learning System
View and manage the OrchestKit feedback system that learns from your usage.
Overview
- Checking feedback system status
- Pausing/resuming learning
- Resetting learned patterns
- Exporting feedback data
- Managing privacy settings
- Enabling/disabling anonymous analytics sharing
- Viewing privacy policy
- Filing bug reports as GitHub issues
Usage
/ork:feedback # Same as status
/ork:feedback status # Show current state
/ork:feedback pause # Pause learning
/ork:feedback resume # Resume learning
/ork:feedback reset # Clear learned patterns
/ork:feedback export # Export feedback data
/ork:feedback settings # Show/edit settings
/ork:feedback opt-in # Enable anonymous sharing
/ork:feedback opt-out # Disable anonymous sharing
/ork:feedback privacy # View privacy policy
/ork:feedback export-analytics # Export anonymous analytics for review
/ork:feedback bug # File a bug report as a GitHub issue
/ork:feedback bug [description] # File with pre-filled descriptionSubcommands
| Subcommand | Description |
|---|---|
status (default) | Show current feedback system state, learned patterns, agent performance |
pause | Temporarily pause learning without clearing data |
resume | Resume paused learning |
reset | Clear all learned patterns (requires "RESET" confirmation) |
export | Export all feedback data to .claude/feedback/export-\{date\}.json |
settings | Show/edit settings (usage: /ork:feedback settings <key> <value>) |
opt-in | Enable anonymous analytics sharing (GDPR-compliant consent) |
opt-out | Disable anonymous analytics sharing (revokes consent) |
privacy | Display the full privacy policy |
export-analytics | Export anonymous analytics to file for review before sharing |
bug | File a bug report as a GitHub issue with auto-collected context |
Output: Each subcommand displays formatted status, confirmation prompts, or exported file paths. Load Read("$\{CLAUDE_SKILL_DIR\}/references/subcommand-reference.md") for detailed actions and expected output for each subcommand. Load Read("$\{CLAUDE_SKILL_DIR\}/references/bug-report-reference.md") for the bug filing workflow.
Consent and Security
Load Read("$\{CLAUDE_SKILL_DIR\}/rules/consent-and-security.md") for GDPR consent management, security restrictions, and analytics data sharing policies.
Related Skills
ork:skill-evolution: Evolve skills based on feedback
File Locations
Load Read("$\{CLAUDE_SKILL_DIR\}/references/file-locations.md") for storage details.
Load Read("$\{CLAUDE_SKILL_DIR\}/references/privacy-policy.md") for full privacy documentation.
Rules (1)
Enforce GDPR consent requirements and block dangerous commands from auto-approval — HIGH
Consent Management and Security Rules
Consent Management
Consent is managed per GDPR requirements:
- Explicit opt-in required - No data shared until you actively consent
- Audit trail - All consent actions logged in
consent-log.json - Easy revocation - Opt-out is as easy as opt-in
- Version tracking - Consent version tracked for policy changes
Security Note
The following commands are NEVER auto-approved regardless of learning:
rm -rf,sudo,chmod 777- Commands with
--forceor--no-verify - Commands involving passwords, secrets, or credentials
Analytics Data Sharing
Anonymous analytics include only aggregated, non-identifiable data:
| Data Type | What's Included | What's NOT Included |
|---|---|---|
| Skills | Usage counts, success rates | File paths, code content |
| Agents | Spawn counts, success rates | Project names, decisions |
| Hooks | Trigger/block counts | Command content, paths |
The following are blocked by design and never included in analytics:
- Project names, paths, or directory structure
- File contents, code, or diffs
- Decision content or context
- User identity, email, or credentials
- Memory data
- URLs, IP addresses, or hostnames
- Any strings that could identify the project or user
Incorrect — Auto-approving dangerous commands:
# Pre-push hook auto-approves all commands
git push --force origin main # DANGEROUS
rm -rf /important/directory # DESTRUCTIVECorrect — Blocking dangerous commands from auto-approval:
# Security check in hook
if [[ "$cmd" =~ (rm -rf|sudo|chmod 777|--force|--no-verify) ]]; then
echo "BLOCKED: Command requires manual approval"
exit 1
fiReferences (4)
Bug Report Reference
Bug Report Reference
Workflow for /ork:feedback bug — filing GitHub issues with auto-collected context.
Flow
Step 1: Gather Description
If no description argument provided, use AskUserQuestion:
AskUserQuestion(questions=[
{
"question": "What went wrong?",
"header": "Bug Description",
"options": [
{"label": "Skill issue", "description": "A skill (/ork:*) didn't work as expected"},
{"label": "Agent issue", "description": "A spawned agent produced wrong results or failed"},
{"label": "Hook issue", "description": "A hook blocked something it shouldn't, or missed something"},
{"label": "Build/install issue", "description": "Plugin build, installation, or setup problem"},
{"label": "Other", "description": "Something else went wrong"}
],
"multiSelect": false
}
])Then ask the user to describe the issue in their own words if they haven't already.
Step 2: Collect Environment Context (automatic)
Read these files — never prompt the user for info that's already available:
# Version from package.json
Read(file_path="{project_dir}/package.json") # extract "version" field
# OS info
Bash(command="uname -s -r")
# Claude Code version (if available)
Bash(command="claude --version 2>/dev/null || echo 'unknown'")
# Git branch
Bash(command="git branch --show-current 2>/dev/null || echo 'unknown'")From .claude/feedback/metrics.json (if exists):
- Last skill used and its success rate
- Last agent spawned and its success rate
Step 3: Check for Duplicates
Before creating, search existing issues:
gh issue list -R yonatangross/orchestkit \
--search "{keywords from description}" \
--state open \
--json number,title,url \
--limit 5If potential duplicates found, show them to the user:
- "Found N similar open issues. Is yours one of these?"
- If yes, comment on the existing issue instead of creating a new one
- If no, proceed to create
Step 4: PII Sanitization
Before including any auto-collected context, strip:
- Absolute paths containing
/Users/or/home/— replace with~ - Email addresses
- URLs with tokens or API keys
- Anything matching
password,secret,token,keyin values - Git remote URLs (may contain tokens)
Step 5: Create the Issue
gh issue create -R yonatangross/orchestkit \
--title "Bug: {concise_title}" \
--label "bug" \
--body "$(cat <<'EOF'
## Bug Report
**Description:** {user_description}
**Category:** {skill|agent|hook|build|other}
## Steps to Reproduce
{user_provided_steps_or "1. [Please describe steps to reproduce]"}
## Expected Behavior
{user_provided_or "N/A"}
## Actual Behavior
{user_description_of_what_happened}
## Environment
| Field | Value |
|-------|-------|
| OrchestKit | {version} |
| Claude Code | {cc_version} |
| OS | {os_info} |
| Branch | {branch} |
## Context
{if metrics available:}
- Last skill: `{skill_name}` ({success_rate}% success rate)
- Last agent: `{agent_name}` ({success_rate}% success rate)
---
*Filed via `/ork:feedback bug`*
EOF
)"Step 6: Confirm to User
Show the created issue URL and number:
Bug report filed!
Issue: #123
URL: https://github.com/yonatangross/orchestkit/issues/123
Title: Bug: {title}
Track progress or add details at the URL above.Fallback: gh Not Authenticated
If gh auth status fails:
- Write issue body to
.claude/feedback/pending-bugs/bug-\{timestamp\}.md - Tell the user:
Could not create GitHub issue (gh CLI not authenticated).
Bug report saved to:
.claude/feedback/pending-bugs/bug-20260226-143000.md
To file manually:
1. Run: gh auth login
2. Then: gh issue create -R yonatangross/orchestkit --body-file .claude/feedback/pending-bugs/bug-20260226-143000.md --title "Bug: {title}" --label bugPrivacy Rules
- NEVER include file contents, code snippets, or conversation history in the issue
- ONLY include: version numbers, OS type, skill/agent names, success rates
- All paths sanitized to relative or
~ - User reviews the issue body before submission (show it, ask "Create this issue?")
File Locations
Feedback File Locations
All feedback data is stored locally in the project.
Storage Paths
.claude/feedback/
├── preferences.json # User preferences and settings
├── metrics.json # Skill and agent usage metrics
├── learned-patterns.json # Auto-approve patterns and code style
├── satisfaction.json # Session satisfaction tracking
├── consent-log.json # GDPR consent audit trail (#59)
├── analytics-sent.json # Transmission history (if enabled)
├── analytics-exports/ # Anonymous analytics exports for review
│ └── analytics-export-*.json
└── pending-bugs/ # Bug reports saved when gh CLI unavailable
└── bug-*.mdFile Descriptions
preferences.json
{
"version": "1.0",
"enabled": true,
"learnFromEdits": true,
"learnFromApprovals": true,
"learnFromAgentOutcomes": true,
"shareAnonymized": false,
"consentedAt": null,
"consentVersion": null,
"syncGlobalPatterns": true,
"retentionDays": 90,
"pausedUntil": null
}consent-log.json (GDPR Audit Trail)
Records all consent actions for GDPR compliance. Created by consent-manager.sh.
{
"version": "1.0",
"events": [
{
"action": "granted",
"version": "1.0",
"timestamp": "2026-01-14T10:00:00Z"
},
{
"action": "revoked",
"timestamp": "2026-01-15T14:00:00Z"
}
]
}Event Actions:
granted- User opted in (includes policy version)declined- User said "No Thanks" on first promptrevoked- User opted out after previously opting in
metrics.json
{
"version": "1.0",
"updated": "2026-01-14T10:00:00Z",
"skills": { ... },
"hooks": { ... },
"agents": { ... }
}learned-patterns.json
{
"version": "1.0",
"updated": "2026-01-14T10:00:00Z",
"permissions": { ... },
"codeStyle": { ... }
}analytics-export-*.json
Anonymous analytics exports for user review before sharing.
{
"timestamp": "2026-01-14",
"plugin_version": "4.12.0",
"skill_usage": {
"<skill-id>": { "uses": 12, "success_rate": 0.92 }
},
"agent_performance": {
"<agent-id>": { "spawns": 8, "success_rate": 0.88 }
},
"hook_metrics": {
"<hook-name>": { "triggered": 45, "blocked": 3 }
},
"summary": {
"unique_skills_used": 8,
"unique_agents_used": 3,
"hooks_configured": 5,
"total_skill_invocations": 45,
"total_agent_spawns": 12
},
"metadata": {
"exported_at": "2026-01-14T12:00:00Z",
"format_version": "1.0",
"note": "Review before sharing"
}
}Gitignore
All files in .claude/feedback/ are gitignored by default.
Add to your .gitignore:
.claude/feedback/Global Patterns
Cross-project patterns are stored at:
~/.claude/global-patterns.jsonThis file is shared across all projects when syncGlobalPatterns is enabled.
Scripts
consent-manager.sh (#59)
Manages GDPR-compliant consent for anonymous analytics.
.claude/scripts/consent-manager.shKey functions:
has_consent()- Check if user has consentedhas_been_asked()- Check if user was ever promptedrecord_consent()- Record opt-in with timestamprecord_decline()- Record "No Thanks" responserevoke_consent()- Record opt-out (revocation)get_consent_status()- Get full consent state as JSONshow_opt_in_prompt()- Display interactive promptshow_privacy_policy()- Display full privacy policyshow_consent_status()- Display human-readable status
analytics-lib.sh
Prepares anonymous analytics data.
.claude/scripts/analytics-lib.shKey functions:
prepare_anonymous_report()- Aggregate anonymized dataget_shareable_metrics()- Get only safe-to-share metricsvalidate_no_pii(data)- Verify no PII in dataexport_analytics(filepath)- Export to file for user reviewopt_in_analytics()- Enable anonymous sharingopt_out_analytics()- Disable anonymous sharing
analytics-sender.sh (#59 - Optional)
Handles optional network transmission (disabled by default).
.claude/scripts/analytics-sender.shKey functions:
is_transmission_enabled()- Check if network send is enabledsend_analytics_report()- Send to configured endpointshow_transmission_status()- Show send history
Note: Network transmission requires:
- User consent (
has_consent()= true) - Endpoint configured (
ORCHESTKIT_ANALYTICS_ENDPOINT) - Network enabled (
enableNetworkTransmissionin preferences)
Schemas
.claude/schemas/
├── feedback.schema.json # Metrics, patterns, preferences schemas
└── consent.schema.json # Consent log schema (#59)Privacy Policy
Privacy Policy Reference
Anonymous analytics privacy documentation for OrchestKit Claude Plugin
Overview
OrchestKit offers optional anonymous analytics to help improve the plugin. This is strictly opt-in - no data is collected without explicit user consent.
What We Collect
When you opt in, we collect only aggregated, non-identifiable metrics:
| Data Type | Example | Purpose |
|---|---|---|
| Skill usage counts | "api-design: 45 uses" | Identify popular skills |
| Skill success rates | "92% success" | Improve underperforming skills |
| Agent spawn counts | "backend-architect: 8 spawns" | Agent utilization |
| Agent success rates | "88% tasks completed" | Agent effectiveness |
| Hook trigger counts | "git-branch-protection: 120 triggers" | Hook tuning |
| Hook block counts | "5 commands blocked" | Security effectiveness |
| Plugin version | "4.12.0" | Version adoption |
| Report date | "2026-01-14" | Trend analysis |
What We Never Collect
The following are explicitly blocked from collection:
- Your code or file contents
- Project names, paths, or directory structure
- User names, emails, or personal information
- IP addresses (stripped at network layer)
- Memory data or conversation history
- Architecture decisions or design documents
- API keys, tokens, or credentials
- Git history or commit messages
- Session IDs or user identifiers
- Any data that could identify you or your projects
PII Detection
Before any data export, we scan for:
# Blocked patterns (excerpt from analytics-lib.sh)
/Users/, /home/, /var/, /tmp/ # File paths
@ # Email indicators
http://, https:// # URLs
password, secret, token, api_key # Credentials
username, user_id, email # Identifiers
[0-9]{1,3}\.[0-9]{1,3}... # IP addressesIf any PII pattern is detected, the export is aborted.
Consent Management
Granting Consent
# Via command
/ork:feedback opt-in
# What happens:
# 1. consent-log.json records: {"action": "granted", "version": "1.0", "timestamp": "..."}
# 2. preferences.json sets: shareAnonymized = trueRevoking Consent
# Via command
/ork:feedback opt-out
# What happens:
# 1. consent-log.json records: {"action": "revoked", "timestamp": "..."}
# 2. preferences.json sets: shareAnonymized = false
# 3. No further data collection occursChecking Status
/ork:feedback status
# Shows: consent state, timestamp, policy versionData Flow
Session Activity
│
▼
┌──────────────┐
│ Local Metrics│ ← Stored in .claude/feedback/metrics.json
│ (always) │
└──────┬───────┘
│
▼
┌──────────────────┐
│ Consent Check │ ← has_consent() must return true
└──────┬───────────┘
│
▼ (only if consented)
┌──────────────────┐
│ PII Validation │ ← validate_no_pii() scans all data
└──────┬───────────┘
│
├── PII Found → ABORT
│
└── Clean → Export/SendTransmission (Optional)
If network transmission is enabled:
- HTTPS only - encrypted in transit
- No cookies - no session tracking
- No IP logging - server strips client IP
- Best effort - no retries on failure
- Open source server - auditable code
Default behavior is local export only with no network calls.
Data Retention
| Stage | Retention |
|---|---|
| Local metrics | User-controlled (default 90 days) |
| Server raw reports | Deleted after aggregation (max 30 days) |
| Aggregate statistics | Indefinite (no PII) |
GDPR Compliance
This implementation follows GDPR requirements:
- Explicit consent - opt-in only, no pre-checked boxes
- Informed consent - clear disclosure of what's collected
- Easy withdrawal - opt-out as easy as opt-in
- Audit trail - consent-log.json records all actions
- Data minimization - only collect what's needed
- Purpose limitation - only used for plugin improvement
Files
| File | Purpose |
|---|---|
.claude/feedback/preferences.json | Contains shareAnonymized flag |
.claude/feedback/consent-log.json | Audit trail of consent actions |
.claude/feedback/metrics.json | Local metrics (always stored) |
.claude/feedback/analytics-exports/ | Exported reports for review |
Commands Reference
| Command | Description |
|---|---|
/ork:feedback opt-in | Enable anonymous sharing |
/ork:feedback opt-out | Disable sharing (revoke consent) |
/ork:feedback status | Show current consent status |
/ork:feedback export | Export data for review |
/ork:feedback privacy | Display full privacy policy |
Contact
- Repository: https://github.com/yonatangross/orchestkit-claude-plugin
- Issues: https://github.com/yonatangross/orchestkit-claude-plugin/issues
Subcommand Reference
Feedback Subcommand Reference
Detailed actions and expected output for each /ork:feedback subcommand.
status (default)
Show the current feedback system state.
Output:
Feedback System Status
-----------------------------
Learning: Enabled
Anonymous sharing: Disabled
Data retention: 90 days
Learned Patterns:
- Auto-approves: npm install, npm test, git push (3 commands)
- Code style: async/await preferred, TypeScript strict mode
Agent Performance:
- backend-architect: 94% success (28 spawns) [improving]
- test-generator: 72% success (18 spawns) [declining]
Context Savings: ~8k tokens/session (estimated)
Storage: .claude/feedback/ (45 KB)pause
Temporarily pause all learning without clearing data.
Action:
- Set
pausedUntilin preferences to a far future date - Confirm to user
Output:
Feedback learning paused
Your existing patterns are preserved.
Resume with: /ork:feedback resumeresume
Resume paused learning.
Action:
- Clear
pausedUntilin preferences - Confirm to user
Output:
Feedback learning resumed
The system will continue learning from your usage.reset
Clear all learned patterns (requires confirmation).
Action:
- Show what will be deleted
- Ask for confirmation (user must type "RESET")
- If confirmed, clear patterns file but keep preferences
Output (before confirmation):
WARNING: This will clear all learned patterns:
- 5 auto-approve permission rules
- 3 code style preferences
- Agent performance history
Your preferences (enabled, sharing, retention) will be kept.
To confirm, respond with exactly: RESET
To cancel, respond with anything else.Output (after confirmation):
Feedback data reset
- Cleared 5 permission patterns
- Cleared 3 style preferences
- Cleared agent metrics
Learning will start fresh from now.export
Export all feedback data to a JSON file.
Action:
- Read all feedback files
- Combine into single export
- Write to
.claude/feedback/export-\{date\}.json
Output:
Exported feedback data to:
.claude/feedback/export-2026-01-14.json
Contains:
- 5 learned permission patterns
- 3 code style preferences
- 8 skill usage metrics
- 4 agent performance records
File size: 12 KBsettings
Show current settings with option to change.
Output:
Feedback Settings
-----------------------------
enabled: true (master switch)
learnFromEdits: true (learn from code edits)
learnFromApprovals: true (learn from permissions)
learnFromAgentOutcomes: true (track agent success)
shareAnonymized: false (share anonymous stats)
retentionDays: 90 (data retention period)
To change a setting, use:
/ork:feedback settings <key> <value>
Example:
/ork:feedback settings retentionDays 30opt-in
Enable anonymous analytics sharing. Records GDPR-compliant consent.
Action:
- Record consent in consent-log.json with timestamp and policy version
- Set shareAnonymized = true in preferences
- Confirm to user
Output:
Anonymous analytics sharing enabled.
What we share (anonymized):
- Skill usage counts and success rates
- Agent performance metrics
- Hook trigger counts
What we NEVER share:
- Your code or file contents
- Project names or paths
- Personal information
- Memory data
Disable anytime: /ork:feedback opt-outopt-out
Disable anonymous analytics sharing. Revokes consent.
Action:
- Record revocation in consent-log.json with timestamp
- Set shareAnonymized = false in preferences
- Confirm to user
Output:
Anonymous analytics sharing disabled.
Your feedback data stays completely local.
No usage data is shared.
Re-enable anytime: /ork:feedback opt-inprivacy
Display the full privacy policy for anonymous analytics.
Action:
- Display comprehensive privacy documentation
- Show what's collected, what's never collected
- Explain data protection measures
Output:
═══════════════════════════════════════════════════════════════════
ORCHESTKIT ANONYMOUS ANALYTICS PRIVACY POLICY
═══════════════════════════════════════════════════════════════════
WHAT WE COLLECT (only with your consent)
────────────────────────────────────────────────────────────────────
✓ Skill usage counts - e.g., "api-design used 45 times"
✓ Skill success rates - e.g., "92% success rate"
✓ Agent spawn counts - e.g., "backend-architect spawned 8 times"
✓ Agent success rates - e.g., "88% tasks completed successfully"
✓ Hook trigger counts - e.g., "git-branch-protection triggered 120 times"
✓ Hook block counts - e.g., "blocked 5 potentially unsafe commands"
✓ Plugin version - e.g., "4.12.0"
✓ Report date - e.g., "2026-01-14" (date only, no time)
WHAT WE NEVER COLLECT
────────────────────────────────────────────────────────────────────
✗ Your code or file contents
✗ Project names, paths, or directory structure
✗ User names, emails, or any personal information
✗ IP addresses (stripped at network layer)
✗ Memory data or conversation history
✗ Architecture decisions or design documents
✗ API keys, tokens, or credentials
✗ Git history or commit messages
✗ Any data that could identify you or your projects
YOUR RIGHTS
────────────────────────────────────────────────────────────────────
• Opt-out anytime: /ork:feedback opt-out
• View your data: /ork:feedback export-analytics
• Check status: /ork:feedback status
• View this policy: /ork:feedback privacybug
File a bug report as a GitHub issue with auto-collected environment context.
Usage:
/ork:feedback bug
/ork:feedback bug Something broke when I ran /ork:verifyAction:
- Prompt for category (skill/agent/hook/build/other) via AskUserQuestion
- Collect description from user (or use argument if provided)
- Auto-collect environment: OrchestKit version, CC version, OS, git branch
- Auto-collect last skill/agent from metrics.json (if available)
- Sanitize all context (strip PII, absolute paths, credentials)
- Search for duplicate issues via
gh issue list --search - Show issue preview and ask for confirmation
- Create issue via
gh issue createwith structured template - If
ghnot authenticated, save to.claude/feedback/pending-bugs/for later
Output:
Bug report filed!
Issue: #456
URL: https://github.com/yonatangross/orchestkit/issues/456
Title: Bug: verify skill fails on monorepo with pnpm workspaces
Track progress or add details at the URL above.Output (gh not authenticated):
Could not create GitHub issue (gh CLI not authenticated).
Bug report saved to:
.claude/feedback/pending-bugs/bug-20260226-143000.md
To file manually:
1. Run: gh auth login
2. Then: gh issue create -R yonatangross/orchestkit \
--body-file .claude/feedback/pending-bugs/bug-20260226-143000.md \
--title "Bug: ..." --label bugSee Bug Report Reference for full workflow details.
export-analytics
Export anonymous analytics data to a file for review before sharing.
Usage:
/ork:feedback export-analytics [path]If no path is provided, exports to .claude/feedback/analytics-exports/ with a timestamp.
Output:
Analytics exported to: .claude/feedback/analytics-exports/analytics-export-20260114-120000.json
Contents preview:
-----------------
Date: 2026-01-14
Plugin Version: 4.12.0
Summary:
Skills used: 8
Skill invocations: 45
Agents used: 3
Agent spawns: 12
Hooks configured: 5
Please review the exported file before sharing.Export Format:
{
"timestamp": "2026-01-14",
"plugin_version": "4.12.0",
"skill_usage": {
"api-design-framework": { "uses": 12, "success_rate": 0.92 }
},
"agent_performance": {
"backend-system-architect": { "spawns": 8, "success_rate": 0.88 }
},
"hook_metrics": {
"git-branch-protection": { "triggered": 45, "blocked": 3 }
},
"summary": {
"unique_skills_used": 8,
"unique_agents_used": 3,
"hooks_configured": 5,
"total_skill_invocations": 45,
"total_agent_spawns": 12
},
"metadata": {
"exported_at": "2026-01-14T12:00:00Z",
"format_version": "1.0",
"note": "Review before sharing"
}
}Explore
explore — Deep codebase exploration with parallel agents. Use when exploring a repo, discovering architecture, finding files, or analyzing design patterns.
Figma Design Handoff
Figma-to-code design handoff patterns including Figma Variables to design tokens pipeline, component spec extraction, Dev Mode inspection, Auto Layout to CSS Flexbox/Grid mapping, and visual regression with Applitools. Use when converting Figma designs to code, documenting component specs, setting up design-dev workflows, or comparing production UI against Figma designs.
Last updated on