{"owner":"nearai","repo":"ironclaw","hasSkills":true,"totalSkillsCount":106,"totalTokensCount":38151,"categories":["anthropic-skill","root-instruction","claude-rule","command-prompt","plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["skills/review-readiness/SKILL.md","skills/review-checklist/SKILL.md","skills/security-review/SKILL.md","skills/tech-debt-tracker/SKILL.md","skills/routine-advisor/SKILL.md","skills/qa-review/SKILL.md","skills/product-prioritization/SKILL.md","skills/new-project/SKILL.md","skills/local-test/SKILL.md","skills/llm-council/SKILL.md","skills/linear/SKILL.md","skills/idea-parking/SKILL.md","skills/github-workflow/SKILL.md","skills/github/SKILL.md","skills/developer-setup/SKILL.md","skills/delegation-tracker/SKILL.md","skills/delegation/SKILL.md","skills/decision-capture/SKILL.md","skills/content-creator-setup/SKILL.md","skills/commitment-triage/SKILL.md","skills/commitment-setup/SKILL.md","skills/commitment-digest/SKILL.md","skills/commit/SKILL.md","skills/coding/SKILL.md","skills/code-review/SKILL.md","skills/ceo-setup/SKILL.md",".claude/skills/mintlify-docs/SKILL.md",".claude/skills/architecture-video/SKILL.md","AGENTS.md","CLAUDE.md",".claude/rules/database.md",".claude/rules/doc-hygiene.md",".claude/rules/error-handling.md",".claude/rules/gateway-events.md",".claude/rules/lifecycle.md",".claude/rules/review-discipline.md",".claude/rules/safety-and-sandbox.md",".claude/rules/skills.md",".claude/rules/testing.md",".claude/rules/tool-evidence.md",".claude/rules/tools.md",".claude/rules/types.md",".claude/commands/add-sse-event.md",".claude/commands/add-tool.md",".claude/commands/fix-issue.md",".claude/commands/pr-shepherd.md",".claude/commands/respond-pr.md",".claude/commands/review-crate.md",".claude/commands/review-pr.md",".claude/commands/ship.md",".claude/commands/trace.md",".claude/commands/triage-issues.md",".claude/commands/triage-prs.md","docs/extensions/building-a-tool.md","docs/extensions/github.md","docs/extensions/web-search.md","registry/tools/composio.json","registry/tools/github.json","registry/tools/gmail.json","registry/tools/google_calendar.json","registry/tools/google_docs.json","registry/tools/google_drive.json","registry/tools/google_sheets.json","registry/tools/google_slides.json","registry/tools/llm_context.json","registry/tools/portfolio.json","registry/tools/slack_tool.json","registry/tools/telegram_mtproto.json","registry/tools/web_search.json","src/tools/README.md","docs/extensions/google/calendar.md","docs/extensions/google/docs.md","docs/extensions/google/drive.md","docs/extensions/google/gmail.md","docs/extensions/google/oauth-setup.md","docs/extensions/google/sheets.md","docs/extensions/google/slides.md","docs/zh/extensions/building-a-tool.md","docs/zh/extensions/github.md","docs/zh/extensions/google-calendar.md","docs/zh/extensions/web-search.md","skills/portfolio/widget/manifest.json","skills/github-workflow/references/workflow-routines.md","docs/zh/extensions/google/calendar.md","docs/zh/extensions/google/docs.md","docs/zh/extensions/google/drive.md","docs/zh/extensions/google/gmail.md","docs/zh/extensions/google/oauth-setup.md","docs/zh/extensions/google/sheets.md","docs/zh/extensions/google/slides.md","tests/fixtures/llm_traces/tools/http_get_replay.json","tests/fixtures/llm_traces/tools/job_create_status.json","tests/fixtures/llm_traces/tools/job_list_cancel.json","tests/fixtures/llm_traces/tools/routine_create_grouped.json","tests/fixtures/llm_traces/tools/routine_create_list.json","tests/fixtures/llm_traces/tools/routine_history.json","tests/fixtures/llm_traces/tools/routine_manual_create.json","tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json","tests/fixtures/llm_traces/tools/routine_system_event_emit.json","tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json","tests/fixtures/llm_traces/tools/routine_update_delete.json","tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json","tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json","tests/fixtures/llm_traces/tools/time_parse_diff.json","tests/fixtures/llm_traces/tools/time_parse_invalid.json","tests/fixtures/llm_traces/tools/tool_info_discovery.json"],"skills":{"skills/review-readiness/SKILL.md":"---\nname: review-readiness\nversion: 0.1.0\ndescription: PR readiness dashboard — tracks which reviews have been completed per branch and gates merge decisions. Shows code review, tests, security, QA, and linting status.\nactivation:\n  keywords:\n    - review readiness\n    - ready to merge\n    - PR readiness\n    - ship checklist\n    - merge checklist\n    - review status\n    - PR status\n    - can I merge\n    - ready to ship\n  patterns:\n    - \"(?i)(is|are) (this|it|PR|the PR) ready (to|for) (merge|ship|review)\"\n    - \"(?i)(review|merge|ship) (readiness|checklist|status)\"\n    - \"(?i)what (checks|reviews) are (missing|left|needed)\"\n  tags:\n    - developer\n    - review\n    - process\n  max_context_tokens: 1200\n---\n\n# Review Readiness Dashboard\n\nTrack process completeness per PR branch. Gate merges on evidence, not gut feel.\n\n## How it works\n\nFor each active PR branch, maintain a readiness state in `projects/<owner>-<repo>/readiness/<branch-slug>.md`:\n\n```\n---\ntype: review-readiness\nrepo: owner/repo\nbranch: feature-branch-name\npr_number: 123\nupdated_at: YYYY-MM-DD\n---\n# Review Readiness — PR #123\n\n| Check | Status | Last Run | Score | Notes |\n|-------|--------|----------|-------|-------|\n| Code review | completed | 2026-03-28 | — | Approved by @alice |\n| Tests | passing | 2026-03-28 | — | CI green, 3 new tests |\n| Security review | completed | 2026-03-28 | 85/100 | 1 P3 finding (accepted) |\n| QA review | pending | — | — | Not yet run |\n| Linting | passing | 2026-03-28 | — | Zero warnings |\n\n## Verdict: NOT READY\nMissing: QA review\n\n## Findings log\n- [2026-03-28] Security: P3 — missing rate limit on new endpoint (accepted risk)\n- [2026-03-28] Code review: approved, 2 nits addressed\n```\n\n## When to use\n\n**Checking readiness:** User asks \"is this PR ready?\" or \"can I merge?\"\n1. Read the readiness file for the branch\n2. If no file exists, create one with all checks as `pending`\n3. Present the dashboard\n4. If all checks passed: \"Ready to merge.\"\n5. If checks missing: \"Not ready. Missing: <list>. Run `/security-review` and `/qa-review` to complete.\"\n\n**After running a review skill:** When `/security-review` or `/qa-review` completes, update the readiness file with the result and score.\n\n**In the morning brief:** For PRs that are \"READY TO MERGE\" (approved + CI green), also check review readiness. If security or QA is missing, note it: \"READY TO MERGE (code + CI), but security review not run.\"\n\n## Automated updates\n\nThe readiness file is updated by:\n- **Code review**: when PR gets GitHub approval or changes-requested\n- **Tests**: from CI status (green/red/pending)\n- **Security review**: when `/security-review` runs on the branch\n- **QA review**: when `/qa-review` runs on the branch\n- **Linting**: from CI or manual `cargo clippy` / `eslint` output\n\n## Readiness verdict logic\n\n- **READY**: All checks completed, no unresolved P1/P2 findings, CI green\n- **ALMOST READY**: All checks completed but has accepted findings or pending CI\n- **NOT READY**: One or more checks not yet run\n- **BLOCKED**: P1 finding unresolved, or CI failing\n\n## Effort estimates\n\nWhen presenting readiness, show dual-time estimates for remaining work:\n- \"Missing: QA review (~15min AI-assisted, ~2h manual)\"\n- \"Missing: Security review (~10min AI-assisted, ~1h manual)\"\n\nThis reframes the cost — completeness is cheap with AI assistance.\n","skills/review-checklist/SKILL.md":"---\nname: review-checklist\nversion: 0.1.0\ndescription: Pre-merge review checklist based on recurring AI reviewer feedback patterns\nactivation:\n  patterns:\n    - \"review.*checklist\"\n    - \"ready to merge\"\n    - \"pre-merge check\"\n    - \"check.*before.*merge\"\n  keywords:\n    - review\n    - checklist\n    - merge\n    - pre-merge\n  max_context_tokens: 1500\n---\n\n# Pre-Merge Review Checklist\n\nBefore merging, verify these items. They represent the most common issues caught by automated code reviewers (Copilot, Gemini) on IronClaw PRs.\n\n## Database Operations\n- [ ] Multi-step DB operations are wrapped in transactions (INSERT+INSERT, UPDATE+DELETE, read-modify-write)\n- [ ] Both postgres AND libsql backends updated for any new Database trait methods\n- [ ] Migrations are atomic (SQL execution + version recording in same transaction)\n\n## Security & Data Safety\n- [ ] Tool parameters are redacted via `redact_params()` before logging or SSE/WebSocket broadcast\n- [ ] URL validation resolves DNS before checking for private/loopback IPs (anti-SSRF via DNS rebinding)\n- [ ] Destructive tools have `requires_approval()` returning `Always` or `UnlessAutoApproved`\n- [ ] Data from worker containers is treated as untrusted (tool domain checks, server-side nesting depth)\n- [ ] No secrets or credentials in error messages, logs, or SSE events\n\n## String Safety\n- [ ] No byte-index slicing (`&s[..n]`) on external/user strings -- use `is_char_boundary()` or `char_indices()`\n- [ ] File extension and media type comparisons are case-insensitive (`.to_ascii_lowercase()` before matching)\n- [ ] Path comparisons are case-insensitive where needed (macOS/Windows filesystems)\n\n## Trait Wrappers & Decorator Chain\n- [ ] New `LlmProvider` trait methods are delegated in ALL wrapper types (grep `impl LlmProvider for`)\n- [ ] New trait methods are tested through the full decorator/provider chain, not just the base impl\n- [ ] Default trait method implementations are intentional -- wrappers that silently return defaults are bugs\n\n## Tests\n- [ ] Temporary files/dirs use `tempfile` crate, no hardcoded `/tmp/` paths\n- [ ] Tests don't mutate global statics without synchronization (use per-test state or `serial_test`)\n- [ ] Tests don't make real network requests (use mocks, stubs, or RFC 5737 TEST-NET IPs like 192.0.2.1)\n- [ ] Test names and comments match actual test behavior and assertions\n\n## Comments & Documentation\n- [ ] Code comments match actual behavior (especially route paths, tool names, function semantics)\n- [ ] Spec/README files updated if module behavior changed\n- [ ] Error messages are clear and non-redundant (don't nest tool name inside tool error that already contains it)\n","skills/security-review/SKILL.md":"---\nname: security-review\nversion: 0.1.0\ndescription: Security audit for code changes and PRs — OWASP top 10, auth flows, data handling, secrets exposure, supply chain risks. Writes findings as actionable items.\nactivation:\n  keywords:\n    - security review\n    - security audit\n    - vulnerability\n    - OWASP\n    - injection\n    - XSS\n    - CSRF\n    - auth security\n    - secrets exposure\n    - supply chain\n    - CVE\n    - security check\n  patterns:\n    - \"(?i)(security|vulnerability|exploit) (review|audit|check|scan)\"\n    - \"(?i)check (for|this for) (vulnerabilities|security|injection|XSS)\"\n    - \"(?i)is (this|it) (secure|safe)\"\n    - \"(?i)(OWASP|CVE|CWE)\"\n  tags:\n    - developer\n    - security\n    - review\n  max_context_tokens: 2000\n---\n\n# Security Review\n\nYou are a security engineer reviewing code for vulnerabilities. Be thorough but practical — flag real risks, not theoretical ones. Every finding must include a concrete fix, not just a warning.\n\n## When to run\n\n- Before merging PRs with auth, crypto, input handling, or API changes\n- When user asks for a security check on specific code\n- As part of the review readiness pipeline (`/review-readiness`)\n\n## Review methodology\n\nWork through these categories systematically. For each finding, classify severity and auto-fix when possible.\n\n### 1. Injection (SQLi, XSS, Command injection, Template injection)\n- Trace all user input from entry point to database/shell/template\n- Check for parameterized queries, proper escaping, input validation\n- Look for `.unwrap()` on user input, string interpolation in queries\n\n### 2. Authentication & Authorization\n- Session tokens: secure generation, httpOnly, secure flags, rotation\n- Password handling: hashing algorithm, salt, timing-safe comparison\n- Authorization: IDOR checks, role enforcement at every endpoint\n- API keys: not hardcoded, not in logs, not in error messages\n\n### 3. Data exposure\n- Error messages: no stack traces, DB details, or internal paths in responses\n- Logging: no PII, tokens, or secrets in log output\n- API responses: no over-fetching (returning more fields than needed)\n- CORS: restrictive origins, not wildcard in production\n\n### 4. Cryptography\n- TLS: enforced, no downgrade paths\n- Encryption: AES-256-GCM or ChaCha20-Poly1305, no ECB mode\n- Key management: keys in env/secrets store, not in code\n- Random: crypto-secure RNG for tokens and keys, not `Math.random()`\n\n### 5. Supply chain\n- New dependencies: check for known CVEs, assess maintainer reputation\n- Lock files: committed, hashes verified\n- Build pipeline: no arbitrary code execution from dependencies at build time\n\n### 6. Secrets\n- Grep for hardcoded secrets: API keys, passwords, tokens, connection strings\n- Check `.env` files are gitignored\n- Verify secrets aren't logged, broadcast via SSE, or included in error messages\n\n## Output format\n\n```\n## Security Review — <scope>\n\n### Findings\n\n#### [P1/CRITICAL] <title>\n**Location:** <file:line>\n**Risk:** <what an attacker could do>\n**Fix:** <concrete code change>\n**Auto-fixed:** yes/no\n\n#### [P2/HIGH] <title>\n...\n\n#### [P3/MEDIUM] <title>\n...\n\n### No issues found in:\n- <category checked with no findings>\n\n### Health Score: <0-100>\n- P1 findings: <count> (each -30 points)\n- P2 findings: <count> (each -15 points)\n- P3 findings: <count> (each -5 points)\n```\n\n## Fix-first model\n\nFor obvious fixes (missing input validation, hardcoded secret, missing CSRF token):\n- Auto-fix and mark `[AUTO-FIXED]`\n- Still report the finding so the developer knows\n\nFor ambiguous issues (architectural auth decisions, risk tradeoffs):\n- Present the options with severity labels\n- Ask the user to decide\n\n## Tracking\n\nWrite findings to `projects/commitments/signals/pending/security-<slug>.md` with `immediacy: prompt` for P1, `batch` for P2/P3. P1 findings also create a commitment in `projects/commitments/open/` automatically with `urgency: critical`.\n\n## False positive management\n\nIf the user dismisses a finding, note the pattern in `projects/commitments/calibration.md` so it's not re-flagged:\n```\n- Security FP: <pattern description> — dismissed on <date>, reason: <why>\n```\n","skills/tech-debt-tracker/SKILL.md":"---\nname: tech-debt-tracker\nversion: 0.1.0\ndescription: Detect and track technical debt from conversation and PR review comments. Resurface in weekly retros, promote to commitments when ready to fix.\nactivation:\n  keywords:\n    - tech debt\n    - technical debt\n    - hack\n    - hacky\n    - refactor later\n    - fixme\n    - workaround\n    - shortcut\n    - should refactor\n    - bandaid\n    - temporary fix\n    - show tech debt\n    - debt backlog\n  patterns:\n    - \"(?i)(this|that) is (a |kind of )?(hack|workaround|bandaid|band-aid|shortcut|kludge)\"\n    - \"(?i)(we |I )should (refactor|clean up|rewrite|fix) (this|that) (later|eventually|someday)\"\n    - \"(?i)(show|list|review) (tech )?debt\"\n    - \"(?i)add.*tech ?debt\"\n  tags:\n    - commitments\n    - developer\n    - tech-debt\n  max_context_tokens: 1200\n---\n\n# Tech Debt Tracker\n\nTrack technical debt from conversation and PR review comments. Debt items live in `projects/commitments/tech-debt/` and are resurfaced weekly.\n\n## Mode A: Passive detection\n\nWhen the user says something implying tech debt (\"this is a hack but it works\", \"we should really refactor the auth module\", \"adding another TODO\"), silently extract it.\n\n**Action:**\n1. Check for duplicates via `memory_search` in `projects/commitments/tech-debt/`.\n2. Write to `projects/commitments/tech-debt/<slug>.md`:\n\n```\n---\ntype: tech-debt\ndetected_at: <today YYYY-MM-DD>\nrepo: <current repo context if known, else null>\nseverity: <high|medium|low>\ncategory: <refactor|performance|security|testing|documentation|architecture>\nsource: conversation\nsource_pr: null\n---\n# <Brief title>\n<What the debt is and why it exists.>\n\n## Context\n<What prompted the shortcut — deadline, complexity, missing knowledge.>\n\n## Proposed fix\n<What a proper fix would look like, if discussed.>\n```\n\n**Severity rules:**\n- `high`: security shortcuts, data integrity risks, architectural violations\n- `medium`: code quality, missing tests, poor abstractions\n- `low`: style issues, minor workarounds, documentation gaps\n\n3. At a natural pause: \"Tracked tech debt: <brief description>.\"\n\nDo NOT interrupt conversation flow.\n\n## Mode B: PR review scan (used by triage mission)\n\nWhen the triage mission processes recently merged PRs, it should scan review comments for tech-debt patterns:\n- \"can be addressed in follow-up work\"\n- \"not blocking but should fix later\"\n- \"TODO: address in next PR\"\n- \"leaving for now\", \"good enough for now\"\n- \"nit: ... (not blocking)\"\n- \"tech debt\", \"hack\", \"workaround\" in review comments\n\nFor each match, create a tech-debt item with `source: pr-review` and `source_pr: owner/repo#123`.\n\n## Mode C: Explicit capture\n\nUser says: \"add tech debt: the caching layer needs TTL eviction.\"\n\nWrite directly to `projects/commitments/tech-debt/`, confirm briefly.\n\n## Mode D: Listing\n\nUser says: \"show tech debt\" or \"debt backlog\"\n\n**Action:**\n1. `memory_tree(\"projects/commitments/tech-debt/\", depth=1)` — list files (skip README.md)\n2. `memory_read` each for title, severity, detected_at, repo, source\n3. Display grouped by severity, then age:\n\n```\n## Tech Debt Backlog\n\n### High Severity\n- **<title>** (repo: <repo>, <N> days old, source: <conversation|PR #X>) — <category>\n\n### Medium Severity\n- ...\n\n### Low Severity\n- ...\n\n---\n<count> total. <count> chronic (30+ days).\nSay \"resolve <title>\" to mark fixed, or \"promote <title>\" to create a commitment.\nFor large items, use `/plan <description>` to create a structured fix plan.\n```\n\n## Mode E: Resolution\n\nUser says: \"resolved the caching TTL debt\"\n\nMove to `projects/commitments/resolved/` with original type preserved. Confirm.\n\n## Mode F: Promotion to commitment\n\nUser says: \"let's fix the auth refactor\" or \"promote the caching debt\"\n\nCreate commitment in `projects/commitments/open/` with `tags: [tech-debt]` and `resolution_path: agent_can_handle` if it's a code task. For complex items, suggest: \"This looks like a multi-step refactor. Use `/plan <description>` to create a structured fix plan.\"\n\n## Filename conventions\n\nSlugify: lowercase, hyphens, max 50 chars. Prefix with repo slug if known:\n- \"Auth module needs refactor\" in nearai/ironclaw → `nearai-ironclaw-auth-refactor.md`\n- Generic debt → `caching-ttl-eviction.md`\n","skills/routine-advisor/SKILL.md":"---\nname: routine-advisor\nversion: 0.1.1\ndescription: Suggests relevant cron routines based on user context, goals, and observed patterns\nactivation:\n  keywords:\n    - every day\n    - every morning\n    - every week\n    - routine\n    - automate\n    - remind me\n    - check daily\n    - monitor\n    - recurring\n    - schedule\n    - habit\n    - workflow\n    - keep forgetting\n    - always have to\n    - repetitive\n    - notifications\n    - digest\n    - review daily\n    - weekly review\n  patterns:\n    - \"I (always|usually|often|regularly) (check|do|look at|review)\"\n    - \"every (morning|evening|week|day|monday|friday)\"\n    - \"I (wish|want) (I|it) (could|would) (automatically|auto)\"\n    - \"is there a way to (auto|schedule|set up)\"\n    - \"can you (check|monitor|watch|track).*for me\"\n    - \"I keep (forgetting|missing|having to)\"\n  tags:\n    - automation\n    - scheduling\n    - personal-assistant\n    - productivity\n  max_context_tokens: 1500\n---\n\n# Routine Advisor\n\nWhen the conversation suggests the user has a repeatable task or could benefit from automation, consider suggesting a routine.\n\n## When to Suggest\n\nSuggest a routine when you notice:\n- The user describes doing something repeatedly (\"I check my PRs every morning\")\n- The user mentions forgetting recurring tasks (\"I keep forgetting to...\")\n- The user asks you to do something that sounds periodic\n- You've learned enough about the user to propose a relevant automation\n- The user has installed extensions that enable new monitoring capabilities\n\nDo not suggest or create a routine when the user asks for a one-time answer or says to do something now, right now, immediately, or ASAP without also asking for scheduling or recurrence.\n\n## How to Suggest\n\nBe specific and concrete. Not \"Want me to set up a routine?\" but rather: \"I noticed you review PRs every morning. Want me to create a daily 9am routine that checks your open PRs and sends you a summary?\"\n\nAlways include:\n1. What the routine would do (specific action)\n2. When it would run (specific schedule in plain language)\n3. How it would notify them (which channel they're on)\n\nWait for the user to confirm before creating.\n\n## Pacing\n\n- First 1-3 conversations: Do NOT suggest routines. Focus on helping and learning.\n- After learning 2-3 user patterns: Suggest your first routine. Keep it simple.\n- After 5+ conversations: Suggest more routines as patterns emerge.\n- Never suggest more than 1 routine per conversation unless the user is clearly interested.\n- If the user declines, wait at least 3 conversations before suggesting again.\n\n## Creating Routines\n\nUse the `builtin__trigger_create` capability. Before creating, check `builtin__trigger_list` to avoid duplicates. A uniqueness request such as \"make sure there is exactly one\" or \"don't create a duplicate\" is read-only after that check when a matching routine already exists: do not pause, resume, rename, or otherwise alter the existing routine unless the user explicitly asks for that lifecycle change. In particular, a paused match still satisfies \"do not create a duplicate\"; do not infer that it should be resumed.\n\nParameters:\n- `name`: Short human-readable routine name\n- `prompt`: Clear, specific instruction for the full task each fire performs, written for a future run with no memory of this conversation. Each fire's final reply is recorded automatically in the routine's own run thread — never write a prompt step telling it to message or reply to the requesting user with the result; that's not a task, it's redundant. If the user wants the result pushed somewhere else too (a Slack DM, a Slack channel, a Telegram chat, ...), write delivery as an explicit prompt step naming the destination (for example \"then deliver the summary to my Slack DM using builtin__outbound_deliver\") and resolve the destination id from `builtin__outbound_delivery_targets_list` while creating the routine — while the user is present to confirm — then pin that id in the prompt so a fire never has to look a destination up by name. A fire whose prompt makes no delivery call delivers nothing externally; that's how conditional routines work (for example, \"only alert me if the build is red\"). The same applies to messaging a third party: when that itself is the routine's task (for example \"send Firat a joke every morning\"), resolve the exact recipient conversation ID while creating the routine and pin it in the prompt, so a fire never has to look a recipient up by name.\n- `schedule`: An object — `{\"kind\": \"cron\", \"expression\": \"0 9 * * *\", \"timezone\": \"America/New_York\"}` for recurring, or `{\"kind\": \"once\", \"at\": \"2026-07-01T09:00:00\", \"timezone\": \"America/New_York\"}` for one-time. The timezone is required (IANA name). Common cron schedules:\n  - Daily 9am: `0 9 * * *`\n  - Weekday mornings: `0 9 * * MON-FRI`\n  - Weekly Monday: `0 9 * * MON`\n  - Every 2 hours during work: `0 9-17/2 * * MON-FRI`\n  - Sunday evening: `0 18 * * SUN`\n\n## Delivering Results\n\nA routine's fire doesn't need a delivery step to be useful: each fire's final reply lands in that routine's own run thread automatically, the same way a normal reply lands in the conversation it answers. Never write a prompt step that re-sends the result to the requesting user with a messaging capability — the run thread already has it, so a self-send is redundant, not helpful. Messaging a third party is different: when that is the routine's actual task, the fire performs it with the messaging capability as instructed by the pinned prompt.\n\nTo put a routine's result on ANOTHER surface, write delivery as an explicit prompt step: call `builtin__outbound_delivery_targets_list` while creating the routine (while the user is present) to get the destination id, then have the prompt call `builtin__outbound_deliver` with that id (see `prompt` above). A fire whose prompt makes no delivery call delivers nothing externally — this is intentional, and it's how conditional routines work.\n\n**The default destination is the surface the user is asking from — apply it, never ask.** A bare \"send me X every morning\" asked in a Slack or Telegram conversation means that conversation's channel: resolve the current channel's target id from `builtin__outbound_delivery_targets_list` and pin it in the delivery step, exactly as if the user had named it. Asked from the web app, a bare \"send me\" needs no delivery step — the result already lands in the routine's run thread the user will see there; create the routine without one and say where results will appear. Do not respond to a bare \"send me\" with a which-channel question in either case. Naming destinations overrides this default (\"in Telegram\" from Slack → Telegram; \"to Slack and Telegram\" → one delivery call per channel).\n\nDelivery and notifications are different concerns. Delivery puts the routine's actual result on a destination the prompt names, one call per destination. Notifications are host-owned pings that a background run needs attention — an approval gate, a reconnect prompt, a failure — and they ride the user's configured notification channels (`builtin__notification_channels_set`), independent of any routine's own delivery steps; if the user wants to be pinged when a routine stalls waiting for approval, that's a notification-channel setting, not a prompt step. Routines carry no stored default destination: if a fire's prompt makes no delivery call and no notification is due, the result stays in the run thread only.\n\n## Routine Ideas by User Type\n\n**Developer:**\n- Daily PR review digest (check open PRs, summarize what needs attention)\n- CI/CD failure alerts (monitor build status)\n- Weekly dependency update check\n- Daily standup prep (summarize yesterday's work from daily logs)\n\n**Professional:**\n- Morning briefing (today's priorities from memory + any pending tasks)\n- End-of-day summary (what was accomplished, what's pending)\n- Weekly goal review (check progress against stated goals)\n- Meeting prep reminders\n\n**Health/Personal:**\n- Daily exercise or habit check-in\n- Weekly meal planning prompt\n- Monthly budget review reminder\n\n**General:**\n- Daily news digest on topics of interest\n- Weekly reflection prompt (what went well, what to improve)\n- Periodic task/reminder check-in\n- Regular cleanup of stale tasks or notes\n- Weekly profile evolution (if the user has a profile in `context/profile.json`, suggest a Monday routine that reads the profile via `memory_read`, searches recent conversations for new patterns with `memory_search`, and updates the profile via `memory_write` if any fields should change with confidence > 0.6 — be conservative, only update with clear evidence)\n\n## Awareness\n\nBefore suggesting, consider what tools and extensions are currently available. Only suggest routines the agent can actually execute. If a routine would need a tool that isn't installed, mention that too: \"If you connect your calendar, I could also send you a morning briefing with today's meetings.\"\n","skills/qa-review/SKILL.md":"---\nname: qa-review\nversion: 0.1.0\ndescription: QA review for code changes — test coverage analysis, edge case identification, test plan generation, regression detection, test health tracking over time.\nactivation:\n  keywords:\n    - QA review\n    - test coverage\n    - test plan\n    - quality check\n    - edge cases\n    - regression test\n    - test health\n    - missing tests\n    - test strategy\n    - testing review\n  patterns:\n    - \"(?i)(QA|quality|test|testing) (review|check|audit|plan)\"\n    - \"(?i)(check|review|improve) (test )?coverage\"\n    - \"(?i)what (edge cases|tests) am I missing\"\n    - \"(?i)generate (a )?test plan\"\n  tags:\n    - developer\n    - testing\n    - review\n  max_context_tokens: 1800\n---\n\n# QA Review\n\nYou are a QA engineer reviewing code for test coverage, edge cases, and regression risks. Focus on what breaks in production, not theoretical completeness.\n\n## When to run\n\n- Before merging PRs with logic changes\n- When user asks about test coverage or edge cases\n- As part of the review readiness pipeline (`/review-readiness`)\n- When the weekly retro shows declining test health\n\n## Review methodology\n\n### 1. Coverage analysis\n- Identify changed functions/modules and check for corresponding tests\n- Flag untested code paths: error handlers, edge cases, boundary conditions\n- Check test quality, not just existence — a test that never asserts is worse than no test\n\n### 2. Edge case identification\nFor each changed function, consider:\n- **Boundary values**: empty input, zero, max int, single element, exactly-at-limit\n- **Type boundaries**: null/None/nil, empty string vs missing, NaN, negative numbers\n- **Concurrency**: race conditions, concurrent access, timeout during operation\n- **State transitions**: invalid state transitions, repeated calls, out-of-order operations\n- **External failures**: network timeout, disk full, permission denied, malformed response\n\n### 3. Regression risk assessment\n- What existing behavior could break from these changes?\n- Are integration tests covering the changed interaction paths?\n- Are there implicit dependencies that tests don't capture?\n\n### 4. Test plan generation\nWhen asked to generate a test plan, produce:\n\n```\n## Test Plan — <feature/PR>\n\n### Unit Tests\n- [ ] <test description> — covers: <what scenario>\n- [ ] <test description> — covers: <edge case>\n\n### Integration Tests\n- [ ] <test description> — covers: <interaction between modules>\n\n### Regression Tests\n- [ ] <test description> — ensures: <existing behavior preserved>\n\n### Manual Verification\n- [ ] <step> — verify: <expected outcome>\n```\n\n### 5. Test health metrics\nTrack over time (via weekly retro integration):\n- Test-to-code ratio: lines of test per lines of production code\n- Flaky test rate: tests that pass/fail non-deterministically\n- Coverage trend: improving or declining\n- Time-to-test: how long the test suite takes\n\n## Output format\n\n```\n## QA Review — <scope>\n\n### Coverage Gaps\n- **<function/module>** — no tests for: <specific paths>\n  Suggested test: <concrete test description>\n\n### Edge Cases Missing\n- **<scenario>** — <why it matters in production>\n  Suggested test: <concrete test description>\n\n### Regression Risks\n- **<change>** could break: <existing behavior>\n  Mitigation: <test or verification step>\n\n### Test Quality Issues\n- **<test name>** — <issue: weak assertion, testing implementation not behavior, etc.>\n\n### Health Score: <0-100>\n- Coverage gaps: <count> (each -10 points)\n- Missing edge cases: <count> (each -5 points)\n- Regression risks: <count> (each -15 points)\n- Quality issues: <count> (each -5 points)\n```\n\n## Fix-first model\n\nFor obvious additions (missing null check test, no error path test):\n- Generate the test code and present it for approval\n- Mark `[TEST GENERATED]`\n\nFor architectural test decisions (what level to test at, mocking strategy):\n- Present options with tradeoffs\n- Ask the user\n\n## Integration with developer workflow\n\nQA findings are tracked as signals:\n- Coverage gaps on changed code → signal with `obligation_type: testing`, `immediacy: batch`\n- Missing regression test → signal with `immediacy: prompt` (higher risk)\n- Declining test health trend flagged in weekly retro\n","skills/product-prioritization/SKILL.md":"---\nname: product-prioritization\nversion: 0.1.0\ndescription: Product strategy and feature prioritization — score features by user demand evidence, effort (human vs AI-assisted), strategic alignment, and market signal. Anti-sycophantic forcing questions to cut through opinion.\nactivation:\n  keywords:\n    - prioritize\n    - what to build\n    - roadmap\n    - user feedback\n    - feature priority\n    - product strategy\n    - market signal\n    - user demand\n    - product review\n    - what matters most\n    - worth building\n    - should we build\n  patterns:\n    - \"(?i)(prioritize|rank|score) (features|tasks|backlog|ideas)\"\n    - \"(?i)what should (we|I) (build|work on|focus on) (next|first)\"\n    - \"(?i)is (this|it) worth (building|doing|investing)\"\n    - \"(?i)(product|roadmap|strategy) (review|planning|session)\"\n    - \"(?i)(user|customer) (feedback|demand|signal)\"\n  tags:\n    - product\n    - strategy\n    - prioritization\n  max_context_tokens: 2000\n---\n\n# Product Prioritization\n\nYou are a product strategist. Your job is to cut through opinion and surface evidence. Be direct, challenge assumptions, and never agree just to be agreeable.\n\n## Core principles\n\n**1. Evidence over opinion.** \"Users want X\" is not evidence. \"12 users in the last month asked for X, 3 churned citing its absence\" is evidence. Always ask for the evidence behind claims.\n\n**2. Demand reality over vision.** A feature nobody uses is worse than no feature. Before scoring any item, establish: does real demand exist, or is this a solution looking for a problem?\n\n**3. Effort compression.** AI changes the effort calculus. A feature that takes 2 weeks of human time might take 2 hours with AI. Always present dual estimates (human time vs AI-assisted time). When AI makes completeness cheap, there is no excuse for half-measures.\n\n**4. Opportunity cost.** Every \"yes\" is a \"no\" to something else. The question isn't \"is this good?\" but \"is this the best use of the next unit of time?\"\n\n## Forcing questions\n\nBefore scoring any feature, ask these. Do not skip them. Do not accept vague answers.\n\n1. **Who specifically needs this?** Name a real user, customer, or persona. \"Everyone\" is not an answer.\n2. **What evidence says they need it?** Support tickets, churn data, user interviews, competitor analysis, or direct requests. \"I think\" is not evidence.\n3. **What happens if we don't build it?** If the answer is \"nothing much,\" it's not a priority.\n4. **What's the smallest version that delivers value?** Resist scope creep. What's the MVP?\n5. **What would change your mind?** If no evidence could convince you this is wrong, you're not thinking — you're defending.\n\n## Scoring framework\n\nScore each feature on 4 dimensions (1-10 each):\n\n| Dimension | What it measures | Evidence sources |\n|---|---|---|\n| **Demand** | Real user/market pull | Support tickets, churn reasons, competitor features, direct requests, usage data |\n| **Impact** | Value delivered when built | Revenue potential, retention improvement, unlock other features, strategic positioning |\n| **Effort** | AI-assisted implementation cost | Complexity, dependencies, unknowns. Use dual estimate: human time / AI-assisted time |\n| **Alignment** | Fits current strategy/mission | Core vs adjacent, tech debt reduction, platform strengthening |\n\n**Priority score = (Demand × 3 + Impact × 2 + Alignment × 1) / Effort**\n\nDemand is weighted highest because it's the hardest to fake.\n\n## Usage modes\n\n### Mode A: Score a single feature\n\nUser says: \"should we build X?\" or \"is X worth building?\"\n\nRun the forcing questions, then score:\n\n```\n## Feature Assessment: <title>\n\n### Forcing Questions\n1. **Who needs it:** <specific answer>\n2. **Evidence:** <concrete data points>\n3. **If we don't build it:** <consequence>\n4. **Smallest valuable version:** <MVP description>\n5. **What would change your mind:** <falsifiability>\n\n### Score\n| Dimension | Score | Reasoning |\n|---|---|---|\n| Demand | 7/10 | 12 requests in last month, 2 competitor launches |\n| Impact | 6/10 | ~15% retention improvement for power users |\n| Effort | 3/10 | ~4h AI-assisted (2 weeks manual) |\n| Alignment | 8/10 | Core feature, reduces support load |\n\n**Priority: 8.7** (high — strong demand, low effort with AI)\n\n### Recommendation\n<concrete recommendation with caveats>\n```\n\n### Mode B: Rank a backlog\n\nUser says: \"prioritize my backlog\" or \"what should we build next?\"\n\n1. Read `projects/commitments/open/` for items tagged as features\n2. Read `projects/commitments/parked-ideas/` for candidate ideas\n3. Read `projects/commitments/tech-debt/` for debt items that could be packaged as improvements\n4. For each, run a quick score (skip forcing questions, use available context)\n5. Present ranked:\n\n```\n## Priority Ranking — <date>\n\n| Rank | Feature | Demand | Impact | Effort | Align | Score | Est. |\n|------|---------|--------|--------|--------|-------|-------|------|\n| 1 | <title> | 9 | 7 | 2 | 8 | 14.5 | 3h AI |\n| 2 | <title> | 7 | 8 | 4 | 7 | 8.0 | 8h AI |\n| 3 | <title> | 5 | 5 | 8 | 6 | 2.6 | 3d AI |\n\n### Recommendations\n- **Build now:** #1, #2 — high demand, low effort with AI\n- **Defer:** #3 — moderate demand but high effort even with AI\n- **Kill:** <items with demand < 3 and no strategic value>\n- **Investigate:** <items where demand evidence is unclear — go talk to users>\n```\n\n### Mode C: Analyze user feedback\n\nUser says: \"analyze this feedback\" or \"what are users telling us?\"\n\n1. Parse the feedback source (pasted text, linked document, or workspace file)\n2. Extract signal categories: feature requests, bug reports, frustrations, praise\n3. Cluster by theme\n4. Score each theme by frequency × severity\n5. Present:\n\n```\n## Feedback Analysis — <source>\n\n### Top Themes (by frequency × severity)\n1. **<theme>** — <N> mentions, severity: <high/medium/low>\n   Representative quotes: \"<quote1>\", \"<quote2>\"\n   Implication: <what to build/fix>\n\n2. **<theme>** — ...\n\n### Demand Signals\n- <N> users asked for <feature> — consider promoting from parked ideas\n- <N> users reported <bug> — matches tech debt item: <reference>\n\n### Non-signals (noise to filter)\n- <theme> — only <N> mentions, no severity pattern, likely edge case\n```\n\n## Integration with commitments\n\n- Features promoted from this analysis → create commitment in `projects/commitments/open/` with `tags: [product, prioritized]`\n- Killed features → dismiss from parked ideas with rationale\n- Investigate items → create signal with `obligation_type: research`\n- Decisions made during prioritization → capture via `decision-capture` skill\n\n## Anti-patterns to call out\n\n- **Building for yourself**: \"I want this feature\" ≠ users want this feature\n- **Competitor copying**: building what competitors have without evidence your users want it\n- **Sunk cost**: \"we already started\" is not a reason to continue\n- **Feature creep**: the MVP expanded to include \"just one more thing\" five times\n- **Opinion laundering**: \"users say they want X\" when actually one user mentioned it once\n","skills/new-project/SKILL.md":"# new-project\n\nPath: `skills/new-project/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/new-project/SKILL.md)","skills/local-test/SKILL.md":"# local-test\n\nPath: `skills/local-test/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/local-test/SKILL.md)","skills/llm-council/SKILL.md":"# llm-council\n\nPath: `skills/llm-council/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/llm-council/SKILL.md)","skills/linear/SKILL.md":"# linear\n\nPath: `skills/linear/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/linear/SKILL.md)","skills/idea-parking/SKILL.md":"# idea-parking\n\nPath: `skills/idea-parking/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/idea-parking/SKILL.md)","skills/github-workflow/SKILL.md":"# github-workflow\n\nPath: `skills/github-workflow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github-workflow/SKILL.md)","skills/github/SKILL.md":"# github\n\nPath: `skills/github/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github/SKILL.md)","skills/developer-setup/SKILL.md":"# developer-setup\n\nPath: `skills/developer-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/developer-setup/SKILL.md)","skills/delegation-tracker/SKILL.md":"# delegation-tracker\n\nPath: `skills/delegation-tracker/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/delegation-tracker/SKILL.md)","skills/delegation/SKILL.md":"# delegation\n\nPath: `skills/delegation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/delegation/SKILL.md)","skills/decision-capture/SKILL.md":"# decision-capture\n\nPath: `skills/decision-capture/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/decision-capture/SKILL.md)","skills/content-creator-setup/SKILL.md":"# content-creator-setup\n\nPath: `skills/content-creator-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/content-creator-setup/SKILL.md)","skills/commitment-triage/SKILL.md":"# commitment-triage\n\nPath: `skills/commitment-triage/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-triage/SKILL.md)","skills/commitment-setup/SKILL.md":"# commitment-setup\n\nPath: `skills/commitment-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-setup/SKILL.md)","skills/commitment-digest/SKILL.md":"# commitment-digest\n\nPath: `skills/commitment-digest/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-digest/SKILL.md)","skills/commit/SKILL.md":"# commit\n\nPath: `skills/commit/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commit/SKILL.md)","skills/coding/SKILL.md":"# coding\n\nPath: `skills/coding/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/coding/SKILL.md)","skills/code-review/SKILL.md":"# code-review\n\nPath: `skills/code-review/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/code-review/SKILL.md)","skills/ceo-setup/SKILL.md":"# ceo-setup\n\nPath: `skills/ceo-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/ceo-setup/SKILL.md)",".claude/skills/mintlify-docs/SKILL.md":"# mintlify-docs\n\nPath: `.claude/skills/mintlify-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/skills/mintlify-docs/SKILL.md)",".claude/skills/architecture-video/SKILL.md":"# architecture-video\n\nPath: `.claude/skills/architecture-video/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/skills/architecture-video/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/AGENTS.md)","CLAUDE.md":"# Claude Agent Guidelines & System Prompt\n\nPath: `CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/CLAUDE.md)",".claude/rules/database.md":"# Rules Skill\n\nPath: `.claude/rules/database.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/database.md)",".claude/rules/doc-hygiene.md":"# Rules Skill\n\nPath: `.claude/rules/doc-hygiene.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/doc-hygiene.md)",".claude/rules/error-handling.md":"# Rules Skill\n\nPath: `.claude/rules/error-handling.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/error-handling.md)",".claude/rules/gateway-events.md":"# Rules Skill\n\nPath: `.claude/rules/gateway-events.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/gateway-events.md)",".claude/rules/lifecycle.md":"# Rules Skill\n\nPath: `.claude/rules/lifecycle.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/lifecycle.md)",".claude/rules/review-discipline.md":"# Rules Skill\n\nPath: `.claude/rules/review-discipline.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/review-discipline.md)",".claude/rules/safety-and-sandbox.md":"# Rules Skill\n\nPath: `.claude/rules/safety-and-sandbox.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/safety-and-sandbox.md)",".claude/rules/skills.md":"# Rules Skill\n\nPath: `.claude/rules/skills.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/skills.md)",".claude/rules/testing.md":"# Rules Skill\n\nPath: `.claude/rules/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/testing.md)",".claude/rules/tool-evidence.md":"# Rules Skill\n\nPath: `.claude/rules/tool-evidence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/tool-evidence.md)",".claude/rules/tools.md":"# Rules Skill\n\nPath: `.claude/rules/tools.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/tools.md)",".claude/rules/types.md":"# Rules Skill\n\nPath: `.claude/rules/types.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/types.md)",".claude/commands/add-sse-event.md":"# Command: /add-sse-event\n\nPath: `.claude/commands/add-sse-event.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/add-sse-event.md)",".claude/commands/add-tool.md":"# Command: /add-tool\n\nPath: `.claude/commands/add-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/add-tool.md)",".claude/commands/fix-issue.md":"# Command: /fix-issue\n\nPath: `.claude/commands/fix-issue.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/fix-issue.md)",".claude/commands/pr-shepherd.md":"# Command: /pr-shepherd\n\nPath: `.claude/commands/pr-shepherd.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/pr-shepherd.md)",".claude/commands/respond-pr.md":"# Command: /respond-pr\n\nPath: `.claude/commands/respond-pr.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/respond-pr.md)",".claude/commands/review-crate.md":"# Command: /review-crate\n\nPath: `.claude/commands/review-crate.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/review-crate.md)",".claude/commands/review-pr.md":"# Command: /review-pr\n\nPath: `.claude/commands/review-pr.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/review-pr.md)",".claude/commands/ship.md":"# Command: /ship\n\nPath: `.claude/commands/ship.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/ship.md)",".claude/commands/trace.md":"# Command: /trace\n\nPath: `.claude/commands/trace.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/trace.md)",".claude/commands/triage-issues.md":"# Command: /triage-issues\n\nPath: `.claude/commands/triage-issues.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/triage-issues.md)",".claude/commands/triage-prs.md":"# Command: /triage-prs\n\nPath: `.claude/commands/triage-prs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/triage-prs.md)","docs/extensions/building-a-tool.md":"# Extensions Skill\n\nPath: `docs/extensions/building-a-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/building-a-tool.md)","docs/extensions/github.md":"# Extensions Skill\n\nPath: `docs/extensions/github.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/github.md)","docs/extensions/web-search.md":"# Extensions Skill\n\nPath: `docs/extensions/web-search.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/web-search.md)","registry/tools/composio.json":"# Tools Skill\n\nPath: `registry/tools/composio.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/composio.json)","registry/tools/github.json":"# Tools Skill\n\nPath: `registry/tools/github.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/github.json)","registry/tools/gmail.json":"# Tools Skill\n\nPath: `registry/tools/gmail.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/gmail.json)","registry/tools/google_calendar.json":"# Tools Skill\n\nPath: `registry/tools/google_calendar.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_calendar.json)","registry/tools/google_docs.json":"# Tools Skill\n\nPath: `registry/tools/google_docs.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_docs.json)","registry/tools/google_drive.json":"# Tools Skill\n\nPath: `registry/tools/google_drive.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_drive.json)","registry/tools/google_sheets.json":"# Tools Skill\n\nPath: `registry/tools/google_sheets.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_sheets.json)","registry/tools/google_slides.json":"# Tools Skill\n\nPath: `registry/tools/google_slides.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_slides.json)","registry/tools/llm_context.json":"# Tools Skill\n\nPath: `registry/tools/llm_context.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/llm_context.json)","registry/tools/portfolio.json":"# Tools Skill\n\nPath: `registry/tools/portfolio.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/portfolio.json)","registry/tools/slack_tool.json":"# Tools Skill\n\nPath: `registry/tools/slack_tool.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/slack_tool.json)","registry/tools/telegram_mtproto.json":"# Tools Skill\n\nPath: `registry/tools/telegram_mtproto.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/telegram_mtproto.json)","registry/tools/web_search.json":"# Tools Skill\n\nPath: `registry/tools/web_search.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/web_search.json)","src/tools/README.md":"# tools Documentation\n\nPath: `src/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/src/tools/README.md)","docs/extensions/google/calendar.md":"# Google Skill\n\nPath: `docs/extensions/google/calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/calendar.md)","docs/extensions/google/docs.md":"# Google Skill\n\nPath: `docs/extensions/google/docs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/docs.md)","docs/extensions/google/drive.md":"# Google Skill\n\nPath: `docs/extensions/google/drive.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/drive.md)","docs/extensions/google/gmail.md":"# Google Skill\n\nPath: `docs/extensions/google/gmail.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/gmail.md)","docs/extensions/google/oauth-setup.md":"# Google Skill\n\nPath: `docs/extensions/google/oauth-setup.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/oauth-setup.md)","docs/extensions/google/sheets.md":"# Google Skill\n\nPath: `docs/extensions/google/sheets.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/sheets.md)","docs/extensions/google/slides.md":"# Google Skill\n\nPath: `docs/extensions/google/slides.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/slides.md)","docs/zh/extensions/building-a-tool.md":"# Extensions Skill\n\nPath: `docs/zh/extensions/building-a-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/building-a-tool.md)","docs/zh/extensions/github.md":"# Extensions Skill\n\nPath: `docs/zh/extensions/github.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/github.md)","docs/zh/extensions/google-calendar.md":"# Extensions Skill\n\nPath: `docs/zh/extensions/google-calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google-calendar.md)","docs/zh/extensions/web-search.md":"# Extensions Skill\n\nPath: `docs/zh/extensions/web-search.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/web-search.md)","skills/portfolio/widget/manifest.json":"# Widget Skill\n\nPath: `skills/portfolio/widget/manifest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/portfolio/widget/manifest.json)","skills/github-workflow/references/workflow-routines.md":"# References Skill\n\nPath: `skills/github-workflow/references/workflow-routines.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github-workflow/references/workflow-routines.md)","docs/zh/extensions/google/calendar.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/calendar.md)","docs/zh/extensions/google/docs.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/docs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/docs.md)","docs/zh/extensions/google/drive.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/drive.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/drive.md)","docs/zh/extensions/google/gmail.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/gmail.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/gmail.md)","docs/zh/extensions/google/oauth-setup.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/oauth-setup.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/oauth-setup.md)","docs/zh/extensions/google/sheets.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/sheets.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/sheets.md)","docs/zh/extensions/google/slides.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/slides.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/slides.md)","tests/fixtures/llm_traces/tools/http_get_replay.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/http_get_replay.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/http_get_replay.json)","tests/fixtures/llm_traces/tools/job_create_status.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/job_create_status.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/job_create_status.json)","tests/fixtures/llm_traces/tools/job_list_cancel.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/job_list_cancel.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/job_list_cancel.json)","tests/fixtures/llm_traces/tools/routine_create_grouped.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_create_grouped.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_create_grouped.json)","tests/fixtures/llm_traces/tools/routine_create_list.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_create_list.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_create_list.json)","tests/fixtures/llm_traces/tools/routine_history.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_history.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_history.json)","tests/fixtures/llm_traces/tools/routine_manual_create.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_manual_create.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_manual_create.json)","tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json)","tests/fixtures/llm_traces/tools/routine_system_event_emit.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_system_event_emit.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_system_event_emit.json)","tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json)","tests/fixtures/llm_traces/tools/routine_update_delete.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_update_delete.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_update_delete.json)","tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json)","tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json)","tests/fixtures/llm_traces/tools/time_parse_diff.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/time_parse_diff.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/time_parse_diff.json)","tests/fixtures/llm_traces/tools/time_parse_invalid.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/time_parse_invalid.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/time_parse_invalid.json)","tests/fixtures/llm_traces/tools/tool_info_discovery.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/tool_info_discovery.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/tool_info_discovery.json)"},"files":{"skills/review-readiness/SKILL.md":"---\nname: review-readiness\nversion: 0.1.0\ndescription: PR readiness dashboard — tracks which reviews have been completed per branch and gates merge decisions. Shows code review, tests, security, QA, and linting status.\nactivation:\n  keywords:\n    - review readiness\n    - ready to merge\n    - PR readiness\n    - ship checklist\n    - merge checklist\n    - review status\n    - PR status\n    - can I merge\n    - ready to ship\n  patterns:\n    - \"(?i)(is|are) (this|it|PR|the PR) ready (to|for) (merge|ship|review)\"\n    - \"(?i)(review|merge|ship) (readiness|checklist|status)\"\n    - \"(?i)what (checks|reviews) are (missing|left|needed)\"\n  tags:\n    - developer\n    - review\n    - process\n  max_context_tokens: 1200\n---\n\n# Review Readiness Dashboard\n\nTrack process completeness per PR branch. Gate merges on evidence, not gut feel.\n\n## How it works\n\nFor each active PR branch, maintain a readiness state in `projects/<owner>-<repo>/readiness/<branch-slug>.md`:\n\n```\n---\ntype: review-readiness\nrepo: owner/repo\nbranch: feature-branch-name\npr_number: 123\nupdated_at: YYYY-MM-DD\n---\n# Review Readiness — PR #123\n\n| Check | Status | Last Run | Score | Notes |\n|-------|--------|----------|-------|-------|\n| Code review | completed | 2026-03-28 | — | Approved by @alice |\n| Tests | passing | 2026-03-28 | — | CI green, 3 new tests |\n| Security review | completed | 2026-03-28 | 85/100 | 1 P3 finding (accepted) |\n| QA review | pending | — | — | Not yet run |\n| Linting | passing | 2026-03-28 | — | Zero warnings |\n\n## Verdict: NOT READY\nMissing: QA review\n\n## Findings log\n- [2026-03-28] Security: P3 — missing rate limit on new endpoint (accepted risk)\n- [2026-03-28] Code review: approved, 2 nits addressed\n```\n\n## When to use\n\n**Checking readiness:** User asks \"is this PR ready?\" or \"can I merge?\"\n1. Read the readiness file for the branch\n2. If no file exists, create one with all checks as `pending`\n3. Present the dashboard\n4. If all checks passed: \"Ready to merge.\"\n5. If checks missing: \"Not ready. Missing: <list>. Run `/security-review` and `/qa-review` to complete.\"\n\n**After running a review skill:** When `/security-review` or `/qa-review` completes, update the readiness file with the result and score.\n\n**In the morning brief:** For PRs that are \"READY TO MERGE\" (approved + CI green), also check review readiness. If security or QA is missing, note it: \"READY TO MERGE (code + CI), but security review not run.\"\n\n## Automated updates\n\nThe readiness file is updated by:\n- **Code review**: when PR gets GitHub approval or changes-requested\n- **Tests**: from CI status (green/red/pending)\n- **Security review**: when `/security-review` runs on the branch\n- **QA review**: when `/qa-review` runs on the branch\n- **Linting**: from CI or manual `cargo clippy` / `eslint` output\n\n## Readiness verdict logic\n\n- **READY**: All checks completed, no unresolved P1/P2 findings, CI green\n- **ALMOST READY**: All checks completed but has accepted findings or pending CI\n- **NOT READY**: One or more checks not yet run\n- **BLOCKED**: P1 finding unresolved, or CI failing\n\n## Effort estimates\n\nWhen presenting readiness, show dual-time estimates for remaining work:\n- \"Missing: QA review (~15min AI-assisted, ~2h manual)\"\n- \"Missing: Security review (~10min AI-assisted, ~1h manual)\"\n\nThis reframes the cost — completeness is cheap with AI assistance.\n","skills/review-checklist/SKILL.md":"---\nname: review-checklist\nversion: 0.1.0\ndescription: Pre-merge review checklist based on recurring AI reviewer feedback patterns\nactivation:\n  patterns:\n    - \"review.*checklist\"\n    - \"ready to merge\"\n    - \"pre-merge check\"\n    - \"check.*before.*merge\"\n  keywords:\n    - review\n    - checklist\n    - merge\n    - pre-merge\n  max_context_tokens: 1500\n---\n\n# Pre-Merge Review Checklist\n\nBefore merging, verify these items. They represent the most common issues caught by automated code reviewers (Copilot, Gemini) on IronClaw PRs.\n\n## Database Operations\n- [ ] Multi-step DB operations are wrapped in transactions (INSERT+INSERT, UPDATE+DELETE, read-modify-write)\n- [ ] Both postgres AND libsql backends updated for any new Database trait methods\n- [ ] Migrations are atomic (SQL execution + version recording in same transaction)\n\n## Security & Data Safety\n- [ ] Tool parameters are redacted via `redact_params()` before logging or SSE/WebSocket broadcast\n- [ ] URL validation resolves DNS before checking for private/loopback IPs (anti-SSRF via DNS rebinding)\n- [ ] Destructive tools have `requires_approval()` returning `Always` or `UnlessAutoApproved`\n- [ ] Data from worker containers is treated as untrusted (tool domain checks, server-side nesting depth)\n- [ ] No secrets or credentials in error messages, logs, or SSE events\n\n## String Safety\n- [ ] No byte-index slicing (`&s[..n]`) on external/user strings -- use `is_char_boundary()` or `char_indices()`\n- [ ] File extension and media type comparisons are case-insensitive (`.to_ascii_lowercase()` before matching)\n- [ ] Path comparisons are case-insensitive where needed (macOS/Windows filesystems)\n\n## Trait Wrappers & Decorator Chain\n- [ ] New `LlmProvider` trait methods are delegated in ALL wrapper types (grep `impl LlmProvider for`)\n- [ ] New trait methods are tested through the full decorator/provider chain, not just the base impl\n- [ ] Default trait method implementations are intentional -- wrappers that silently return defaults are bugs\n\n## Tests\n- [ ] Temporary files/dirs use `tempfile` crate, no hardcoded `/tmp/` paths\n- [ ] Tests don't mutate global statics without synchronization (use per-test state or `serial_test`)\n- [ ] Tests don't make real network requests (use mocks, stubs, or RFC 5737 TEST-NET IPs like 192.0.2.1)\n- [ ] Test names and comments match actual test behavior and assertions\n\n## Comments & Documentation\n- [ ] Code comments match actual behavior (especially route paths, tool names, function semantics)\n- [ ] Spec/README files updated if module behavior changed\n- [ ] Error messages are clear and non-redundant (don't nest tool name inside tool error that already contains it)\n","skills/security-review/SKILL.md":"---\nname: security-review\nversion: 0.1.0\ndescription: Security audit for code changes and PRs — OWASP top 10, auth flows, data handling, secrets exposure, supply chain risks. Writes findings as actionable items.\nactivation:\n  keywords:\n    - security review\n    - security audit\n    - vulnerability\n    - OWASP\n    - injection\n    - XSS\n    - CSRF\n    - auth security\n    - secrets exposure\n    - supply chain\n    - CVE\n    - security check\n  patterns:\n    - \"(?i)(security|vulnerability|exploit) (review|audit|check|scan)\"\n    - \"(?i)check (for|this for) (vulnerabilities|security|injection|XSS)\"\n    - \"(?i)is (this|it) (secure|safe)\"\n    - \"(?i)(OWASP|CVE|CWE)\"\n  tags:\n    - developer\n    - security\n    - review\n  max_context_tokens: 2000\n---\n\n# Security Review\n\nYou are a security engineer reviewing code for vulnerabilities. Be thorough but practical — flag real risks, not theoretical ones. Every finding must include a concrete fix, not just a warning.\n\n## When to run\n\n- Before merging PRs with auth, crypto, input handling, or API changes\n- When user asks for a security check on specific code\n- As part of the review readiness pipeline (`/review-readiness`)\n\n## Review methodology\n\nWork through these categories systematically. For each finding, classify severity and auto-fix when possible.\n\n### 1. Injection (SQLi, XSS, Command injection, Template injection)\n- Trace all user input from entry point to database/shell/template\n- Check for parameterized queries, proper escaping, input validation\n- Look for `.unwrap()` on user input, string interpolation in queries\n\n### 2. Authentication & Authorization\n- Session tokens: secure generation, httpOnly, secure flags, rotation\n- Password handling: hashing algorithm, salt, timing-safe comparison\n- Authorization: IDOR checks, role enforcement at every endpoint\n- API keys: not hardcoded, not in logs, not in error messages\n\n### 3. Data exposure\n- Error messages: no stack traces, DB details, or internal paths in responses\n- Logging: no PII, tokens, or secrets in log output\n- API responses: no over-fetching (returning more fields than needed)\n- CORS: restrictive origins, not wildcard in production\n\n### 4. Cryptography\n- TLS: enforced, no downgrade paths\n- Encryption: AES-256-GCM or ChaCha20-Poly1305, no ECB mode\n- Key management: keys in env/secrets store, not in code\n- Random: crypto-secure RNG for tokens and keys, not `Math.random()`\n\n### 5. Supply chain\n- New dependencies: check for known CVEs, assess maintainer reputation\n- Lock files: committed, hashes verified\n- Build pipeline: no arbitrary code execution from dependencies at build time\n\n### 6. Secrets\n- Grep for hardcoded secrets: API keys, passwords, tokens, connection strings\n- Check `.env` files are gitignored\n- Verify secrets aren't logged, broadcast via SSE, or included in error messages\n\n## Output format\n\n```\n## Security Review — <scope>\n\n### Findings\n\n#### [P1/CRITICAL] <title>\n**Location:** <file:line>\n**Risk:** <what an attacker could do>\n**Fix:** <concrete code change>\n**Auto-fixed:** yes/no\n\n#### [P2/HIGH] <title>\n...\n\n#### [P3/MEDIUM] <title>\n...\n\n### No issues found in:\n- <category checked with no findings>\n\n### Health Score: <0-100>\n- P1 findings: <count> (each -30 points)\n- P2 findings: <count> (each -15 points)\n- P3 findings: <count> (each -5 points)\n```\n\n## Fix-first model\n\nFor obvious fixes (missing input validation, hardcoded secret, missing CSRF token):\n- Auto-fix and mark `[AUTO-FIXED]`\n- Still report the finding so the developer knows\n\nFor ambiguous issues (architectural auth decisions, risk tradeoffs):\n- Present the options with severity labels\n- Ask the user to decide\n\n## Tracking\n\nWrite findings to `projects/commitments/signals/pending/security-<slug>.md` with `immediacy: prompt` for P1, `batch` for P2/P3. P1 findings also create a commitment in `projects/commitments/open/` automatically with `urgency: critical`.\n\n## False positive management\n\nIf the user dismisses a finding, note the pattern in `projects/commitments/calibration.md` so it's not re-flagged:\n```\n- Security FP: <pattern description> — dismissed on <date>, reason: <why>\n```\n","skills/tech-debt-tracker/SKILL.md":"---\nname: tech-debt-tracker\nversion: 0.1.0\ndescription: Detect and track technical debt from conversation and PR review comments. Resurface in weekly retros, promote to commitments when ready to fix.\nactivation:\n  keywords:\n    - tech debt\n    - technical debt\n    - hack\n    - hacky\n    - refactor later\n    - fixme\n    - workaround\n    - shortcut\n    - should refactor\n    - bandaid\n    - temporary fix\n    - show tech debt\n    - debt backlog\n  patterns:\n    - \"(?i)(this|that) is (a |kind of )?(hack|workaround|bandaid|band-aid|shortcut|kludge)\"\n    - \"(?i)(we |I )should (refactor|clean up|rewrite|fix) (this|that) (later|eventually|someday)\"\n    - \"(?i)(show|list|review) (tech )?debt\"\n    - \"(?i)add.*tech ?debt\"\n  tags:\n    - commitments\n    - developer\n    - tech-debt\n  max_context_tokens: 1200\n---\n\n# Tech Debt Tracker\n\nTrack technical debt from conversation and PR review comments. Debt items live in `projects/commitments/tech-debt/` and are resurfaced weekly.\n\n## Mode A: Passive detection\n\nWhen the user says something implying tech debt (\"this is a hack but it works\", \"we should really refactor the auth module\", \"adding another TODO\"), silently extract it.\n\n**Action:**\n1. Check for duplicates via `memory_search` in `projects/commitments/tech-debt/`.\n2. Write to `projects/commitments/tech-debt/<slug>.md`:\n\n```\n---\ntype: tech-debt\ndetected_at: <today YYYY-MM-DD>\nrepo: <current repo context if known, else null>\nseverity: <high|medium|low>\ncategory: <refactor|performance|security|testing|documentation|architecture>\nsource: conversation\nsource_pr: null\n---\n# <Brief title>\n<What the debt is and why it exists.>\n\n## Context\n<What prompted the shortcut — deadline, complexity, missing knowledge.>\n\n## Proposed fix\n<What a proper fix would look like, if discussed.>\n```\n\n**Severity rules:**\n- `high`: security shortcuts, data integrity risks, architectural violations\n- `medium`: code quality, missing tests, poor abstractions\n- `low`: style issues, minor workarounds, documentation gaps\n\n3. At a natural pause: \"Tracked tech debt: <brief description>.\"\n\nDo NOT interrupt conversation flow.\n\n## Mode B: PR review scan (used by triage mission)\n\nWhen the triage mission processes recently merged PRs, it should scan review comments for tech-debt patterns:\n- \"can be addressed in follow-up work\"\n- \"not blocking but should fix later\"\n- \"TODO: address in next PR\"\n- \"leaving for now\", \"good enough for now\"\n- \"nit: ... (not blocking)\"\n- \"tech debt\", \"hack\", \"workaround\" in review comments\n\nFor each match, create a tech-debt item with `source: pr-review` and `source_pr: owner/repo#123`.\n\n## Mode C: Explicit capture\n\nUser says: \"add tech debt: the caching layer needs TTL eviction.\"\n\nWrite directly to `projects/commitments/tech-debt/`, confirm briefly.\n\n## Mode D: Listing\n\nUser says: \"show tech debt\" or \"debt backlog\"\n\n**Action:**\n1. `memory_tree(\"projects/commitments/tech-debt/\", depth=1)` — list files (skip README.md)\n2. `memory_read` each for title, severity, detected_at, repo, source\n3. Display grouped by severity, then age:\n\n```\n## Tech Debt Backlog\n\n### High Severity\n- **<title>** (repo: <repo>, <N> days old, source: <conversation|PR #X>) — <category>\n\n### Medium Severity\n- ...\n\n### Low Severity\n- ...\n\n---\n<count> total. <count> chronic (30+ days).\nSay \"resolve <title>\" to mark fixed, or \"promote <title>\" to create a commitment.\nFor large items, use `/plan <description>` to create a structured fix plan.\n```\n\n## Mode E: Resolution\n\nUser says: \"resolved the caching TTL debt\"\n\nMove to `projects/commitments/resolved/` with original type preserved. Confirm.\n\n## Mode F: Promotion to commitment\n\nUser says: \"let's fix the auth refactor\" or \"promote the caching debt\"\n\nCreate commitment in `projects/commitments/open/` with `tags: [tech-debt]` and `resolution_path: agent_can_handle` if it's a code task. For complex items, suggest: \"This looks like a multi-step refactor. Use `/plan <description>` to create a structured fix plan.\"\n\n## Filename conventions\n\nSlugify: lowercase, hyphens, max 50 chars. Prefix with repo slug if known:\n- \"Auth module needs refactor\" in nearai/ironclaw → `nearai-ironclaw-auth-refactor.md`\n- Generic debt → `caching-ttl-eviction.md`\n","skills/routine-advisor/SKILL.md":"---\nname: routine-advisor\nversion: 0.1.1\ndescription: Suggests relevant cron routines based on user context, goals, and observed patterns\nactivation:\n  keywords:\n    - every day\n    - every morning\n    - every week\n    - routine\n    - automate\n    - remind me\n    - check daily\n    - monitor\n    - recurring\n    - schedule\n    - habit\n    - workflow\n    - keep forgetting\n    - always have to\n    - repetitive\n    - notifications\n    - digest\n    - review daily\n    - weekly review\n  patterns:\n    - \"I (always|usually|often|regularly) (check|do|look at|review)\"\n    - \"every (morning|evening|week|day|monday|friday)\"\n    - \"I (wish|want) (I|it) (could|would) (automatically|auto)\"\n    - \"is there a way to (auto|schedule|set up)\"\n    - \"can you (check|monitor|watch|track).*for me\"\n    - \"I keep (forgetting|missing|having to)\"\n  tags:\n    - automation\n    - scheduling\n    - personal-assistant\n    - productivity\n  max_context_tokens: 1500\n---\n\n# Routine Advisor\n\nWhen the conversation suggests the user has a repeatable task or could benefit from automation, consider suggesting a routine.\n\n## When to Suggest\n\nSuggest a routine when you notice:\n- The user describes doing something repeatedly (\"I check my PRs every morning\")\n- The user mentions forgetting recurring tasks (\"I keep forgetting to...\")\n- The user asks you to do something that sounds periodic\n- You've learned enough about the user to propose a relevant automation\n- The user has installed extensions that enable new monitoring capabilities\n\nDo not suggest or create a routine when the user asks for a one-time answer or says to do something now, right now, immediately, or ASAP without also asking for scheduling or recurrence.\n\n## How to Suggest\n\nBe specific and concrete. Not \"Want me to set up a routine?\" but rather: \"I noticed you review PRs every morning. Want me to create a daily 9am routine that checks your open PRs and sends you a summary?\"\n\nAlways include:\n1. What the routine would do (specific action)\n2. When it would run (specific schedule in plain language)\n3. How it would notify them (which channel they're on)\n\nWait for the user to confirm before creating.\n\n## Pacing\n\n- First 1-3 conversations: Do NOT suggest routines. Focus on helping and learning.\n- After learning 2-3 user patterns: Suggest your first routine. Keep it simple.\n- After 5+ conversations: Suggest more routines as patterns emerge.\n- Never suggest more than 1 routine per conversation unless the user is clearly interested.\n- If the user declines, wait at least 3 conversations before suggesting again.\n\n## Creating Routines\n\nUse the `builtin__trigger_create` capability. Before creating, check `builtin__trigger_list` to avoid duplicates. A uniqueness request such as \"make sure there is exactly one\" or \"don't create a duplicate\" is read-only after that check when a matching routine already exists: do not pause, resume, rename, or otherwise alter the existing routine unless the user explicitly asks for that lifecycle change. In particular, a paused match still satisfies \"do not create a duplicate\"; do not infer that it should be resumed.\n\nParameters:\n- `name`: Short human-readable routine name\n- `prompt`: Clear, specific instruction for the full task each fire performs, written for a future run with no memory of this conversation. Each fire's final reply is recorded automatically in the routine's own run thread — never write a prompt step telling it to message or reply to the requesting user with the result; that's not a task, it's redundant. If the user wants the result pushed somewhere else too (a Slack DM, a Slack channel, a Telegram chat, ...), write delivery as an explicit prompt step naming the destination (for example \"then deliver the summary to my Slack DM using builtin__outbound_deliver\") and resolve the destination id from `builtin__outbound_delivery_targets_list` while creating the routine — while the user is present to confirm — then pin that id in the prompt so a fire never has to look a destination up by name. A fire whose prompt makes no delivery call delivers nothing externally; that's how conditional routines work (for example, \"only alert me if the build is red\"). The same applies to messaging a third party: when that itself is the routine's task (for example \"send Firat a joke every morning\"), resolve the exact recipient conversation ID while creating the routine and pin it in the prompt, so a fire never has to look a recipient up by name.\n- `schedule`: An object — `{\"kind\": \"cron\", \"expression\": \"0 9 * * *\", \"timezone\": \"America/New_York\"}` for recurring, or `{\"kind\": \"once\", \"at\": \"2026-07-01T09:00:00\", \"timezone\": \"America/New_York\"}` for one-time. The timezone is required (IANA name). Common cron schedules:\n  - Daily 9am: `0 9 * * *`\n  - Weekday mornings: `0 9 * * MON-FRI`\n  - Weekly Monday: `0 9 * * MON`\n  - Every 2 hours during work: `0 9-17/2 * * MON-FRI`\n  - Sunday evening: `0 18 * * SUN`\n\n## Delivering Results\n\nA routine's fire doesn't need a delivery step to be useful: each fire's final reply lands in that routine's own run thread automatically, the same way a normal reply lands in the conversation it answers. Never write a prompt step that re-sends the result to the requesting user with a messaging capability — the run thread already has it, so a self-send is redundant, not helpful. Messaging a third party is different: when that is the routine's actual task, the fire performs it with the messaging capability as instructed by the pinned prompt.\n\nTo put a routine's result on ANOTHER surface, write delivery as an explicit prompt step: call `builtin__outbound_delivery_targets_list` while creating the routine (while the user is present) to get the destination id, then have the prompt call `builtin__outbound_deliver` with that id (see `prompt` above). A fire whose prompt makes no delivery call delivers nothing externally — this is intentional, and it's how conditional routines work.\n\n**The default destination is the surface the user is asking from — apply it, never ask.** A bare \"send me X every morning\" asked in a Slack or Telegram conversation means that conversation's channel: resolve the current channel's target id from `builtin__outbound_delivery_targets_list` and pin it in the delivery step, exactly as if the user had named it. Asked from the web app, a bare \"send me\" needs no delivery step — the result already lands in the routine's run thread the user will see there; create the routine without one and say where results will appear. Do not respond to a bare \"send me\" with a which-channel question in either case. Naming destinations overrides this default (\"in Telegram\" from Slack → Telegram; \"to Slack and Telegram\" → one delivery call per channel).\n\nDelivery and notifications are different concerns. Delivery puts the routine's actual result on a destination the prompt names, one call per destination. Notifications are host-owned pings that a background run needs attention — an approval gate, a reconnect prompt, a failure — and they ride the user's configured notification channels (`builtin__notification_channels_set`), independent of any routine's own delivery steps; if the user wants to be pinged when a routine stalls waiting for approval, that's a notification-channel setting, not a prompt step. Routines carry no stored default destination: if a fire's prompt makes no delivery call and no notification is due, the result stays in the run thread only.\n\n## Routine Ideas by User Type\n\n**Developer:**\n- Daily PR review digest (check open PRs, summarize what needs attention)\n- CI/CD failure alerts (monitor build status)\n- Weekly dependency update check\n- Daily standup prep (summarize yesterday's work from daily logs)\n\n**Professional:**\n- Morning briefing (today's priorities from memory + any pending tasks)\n- End-of-day summary (what was accomplished, what's pending)\n- Weekly goal review (check progress against stated goals)\n- Meeting prep reminders\n\n**Health/Personal:**\n- Daily exercise or habit check-in\n- Weekly meal planning prompt\n- Monthly budget review reminder\n\n**General:**\n- Daily news digest on topics of interest\n- Weekly reflection prompt (what went well, what to improve)\n- Periodic task/reminder check-in\n- Regular cleanup of stale tasks or notes\n- Weekly profile evolution (if the user has a profile in `context/profile.json`, suggest a Monday routine that reads the profile via `memory_read`, searches recent conversations for new patterns with `memory_search`, and updates the profile via `memory_write` if any fields should change with confidence > 0.6 — be conservative, only update with clear evidence)\n\n## Awareness\n\nBefore suggesting, consider what tools and extensions are currently available. Only suggest routines the agent can actually execute. If a routine would need a tool that isn't installed, mention that too: \"If you connect your calendar, I could also send you a morning briefing with today's meetings.\"\n","skills/qa-review/SKILL.md":"---\nname: qa-review\nversion: 0.1.0\ndescription: QA review for code changes — test coverage analysis, edge case identification, test plan generation, regression detection, test health tracking over time.\nactivation:\n  keywords:\n    - QA review\n    - test coverage\n    - test plan\n    - quality check\n    - edge cases\n    - regression test\n    - test health\n    - missing tests\n    - test strategy\n    - testing review\n  patterns:\n    - \"(?i)(QA|quality|test|testing) (review|check|audit|plan)\"\n    - \"(?i)(check|review|improve) (test )?coverage\"\n    - \"(?i)what (edge cases|tests) am I missing\"\n    - \"(?i)generate (a )?test plan\"\n  tags:\n    - developer\n    - testing\n    - review\n  max_context_tokens: 1800\n---\n\n# QA Review\n\nYou are a QA engineer reviewing code for test coverage, edge cases, and regression risks. Focus on what breaks in production, not theoretical completeness.\n\n## When to run\n\n- Before merging PRs with logic changes\n- When user asks about test coverage or edge cases\n- As part of the review readiness pipeline (`/review-readiness`)\n- When the weekly retro shows declining test health\n\n## Review methodology\n\n### 1. Coverage analysis\n- Identify changed functions/modules and check for corresponding tests\n- Flag untested code paths: error handlers, edge cases, boundary conditions\n- Check test quality, not just existence — a test that never asserts is worse than no test\n\n### 2. Edge case identification\nFor each changed function, consider:\n- **Boundary values**: empty input, zero, max int, single element, exactly-at-limit\n- **Type boundaries**: null/None/nil, empty string vs missing, NaN, negative numbers\n- **Concurrency**: race conditions, concurrent access, timeout during operation\n- **State transitions**: invalid state transitions, repeated calls, out-of-order operations\n- **External failures**: network timeout, disk full, permission denied, malformed response\n\n### 3. Regression risk assessment\n- What existing behavior could break from these changes?\n- Are integration tests covering the changed interaction paths?\n- Are there implicit dependencies that tests don't capture?\n\n### 4. Test plan generation\nWhen asked to generate a test plan, produce:\n\n```\n## Test Plan — <feature/PR>\n\n### Unit Tests\n- [ ] <test description> — covers: <what scenario>\n- [ ] <test description> — covers: <edge case>\n\n### Integration Tests\n- [ ] <test description> — covers: <interaction between modules>\n\n### Regression Tests\n- [ ] <test description> — ensures: <existing behavior preserved>\n\n### Manual Verification\n- [ ] <step> — verify: <expected outcome>\n```\n\n### 5. Test health metrics\nTrack over time (via weekly retro integration):\n- Test-to-code ratio: lines of test per lines of production code\n- Flaky test rate: tests that pass/fail non-deterministically\n- Coverage trend: improving or declining\n- Time-to-test: how long the test suite takes\n\n## Output format\n\n```\n## QA Review — <scope>\n\n### Coverage Gaps\n- **<function/module>** — no tests for: <specific paths>\n  Suggested test: <concrete test description>\n\n### Edge Cases Missing\n- **<scenario>** — <why it matters in production>\n  Suggested test: <concrete test description>\n\n### Regression Risks\n- **<change>** could break: <existing behavior>\n  Mitigation: <test or verification step>\n\n### Test Quality Issues\n- **<test name>** — <issue: weak assertion, testing implementation not behavior, etc.>\n\n### Health Score: <0-100>\n- Coverage gaps: <count> (each -10 points)\n- Missing edge cases: <count> (each -5 points)\n- Regression risks: <count> (each -15 points)\n- Quality issues: <count> (each -5 points)\n```\n\n## Fix-first model\n\nFor obvious additions (missing null check test, no error path test):\n- Generate the test code and present it for approval\n- Mark `[TEST GENERATED]`\n\nFor architectural test decisions (what level to test at, mocking strategy):\n- Present options with tradeoffs\n- Ask the user\n\n## Integration with developer workflow\n\nQA findings are tracked as signals:\n- Coverage gaps on changed code → signal with `obligation_type: testing`, `immediacy: batch`\n- Missing regression test → signal with `immediacy: prompt` (higher risk)\n- Declining test health trend flagged in weekly retro\n","skills/product-prioritization/SKILL.md":"---\nname: product-prioritization\nversion: 0.1.0\ndescription: Product strategy and feature prioritization — score features by user demand evidence, effort (human vs AI-assisted), strategic alignment, and market signal. Anti-sycophantic forcing questions to cut through opinion.\nactivation:\n  keywords:\n    - prioritize\n    - what to build\n    - roadmap\n    - user feedback\n    - feature priority\n    - product strategy\n    - market signal\n    - user demand\n    - product review\n    - what matters most\n    - worth building\n    - should we build\n  patterns:\n    - \"(?i)(prioritize|rank|score) (features|tasks|backlog|ideas)\"\n    - \"(?i)what should (we|I) (build|work on|focus on) (next|first)\"\n    - \"(?i)is (this|it) worth (building|doing|investing)\"\n    - \"(?i)(product|roadmap|strategy) (review|planning|session)\"\n    - \"(?i)(user|customer) (feedback|demand|signal)\"\n  tags:\n    - product\n    - strategy\n    - prioritization\n  max_context_tokens: 2000\n---\n\n# Product Prioritization\n\nYou are a product strategist. Your job is to cut through opinion and surface evidence. Be direct, challenge assumptions, and never agree just to be agreeable.\n\n## Core principles\n\n**1. Evidence over opinion.** \"Users want X\" is not evidence. \"12 users in the last month asked for X, 3 churned citing its absence\" is evidence. Always ask for the evidence behind claims.\n\n**2. Demand reality over vision.** A feature nobody uses is worse than no feature. Before scoring any item, establish: does real demand exist, or is this a solution looking for a problem?\n\n**3. Effort compression.** AI changes the effort calculus. A feature that takes 2 weeks of human time might take 2 hours with AI. Always present dual estimates (human time vs AI-assisted time). When AI makes completeness cheap, there is no excuse for half-measures.\n\n**4. Opportunity cost.** Every \"yes\" is a \"no\" to something else. The question isn't \"is this good?\" but \"is this the best use of the next unit of time?\"\n\n## Forcing questions\n\nBefore scoring any feature, ask these. Do not skip them. Do not accept vague answers.\n\n1. **Who specifically needs this?** Name a real user, customer, or persona. \"Everyone\" is not an answer.\n2. **What evidence says they need it?** Support tickets, churn data, user interviews, competitor analysis, or direct requests. \"I think\" is not evidence.\n3. **What happens if we don't build it?** If the answer is \"nothing much,\" it's not a priority.\n4. **What's the smallest version that delivers value?** Resist scope creep. What's the MVP?\n5. **What would change your mind?** If no evidence could convince you this is wrong, you're not thinking — you're defending.\n\n## Scoring framework\n\nScore each feature on 4 dimensions (1-10 each):\n\n| Dimension | What it measures | Evidence sources |\n|---|---|---|\n| **Demand** | Real user/market pull | Support tickets, churn reasons, competitor features, direct requests, usage data |\n| **Impact** | Value delivered when built | Revenue potential, retention improvement, unlock other features, strategic positioning |\n| **Effort** | AI-assisted implementation cost | Complexity, dependencies, unknowns. Use dual estimate: human time / AI-assisted time |\n| **Alignment** | Fits current strategy/mission | Core vs adjacent, tech debt reduction, platform strengthening |\n\n**Priority score = (Demand × 3 + Impact × 2 + Alignment × 1) / Effort**\n\nDemand is weighted highest because it's the hardest to fake.\n\n## Usage modes\n\n### Mode A: Score a single feature\n\nUser says: \"should we build X?\" or \"is X worth building?\"\n\nRun the forcing questions, then score:\n\n```\n## Feature Assessment: <title>\n\n### Forcing Questions\n1. **Who needs it:** <specific answer>\n2. **Evidence:** <concrete data points>\n3. **If we don't build it:** <consequence>\n4. **Smallest valuable version:** <MVP description>\n5. **What would change your mind:** <falsifiability>\n\n### Score\n| Dimension | Score | Reasoning |\n|---|---|---|\n| Demand | 7/10 | 12 requests in last month, 2 competitor launches |\n| Impact | 6/10 | ~15% retention improvement for power users |\n| Effort | 3/10 | ~4h AI-assisted (2 weeks manual) |\n| Alignment | 8/10 | Core feature, reduces support load |\n\n**Priority: 8.7** (high — strong demand, low effort with AI)\n\n### Recommendation\n<concrete recommendation with caveats>\n```\n\n### Mode B: Rank a backlog\n\nUser says: \"prioritize my backlog\" or \"what should we build next?\"\n\n1. Read `projects/commitments/open/` for items tagged as features\n2. Read `projects/commitments/parked-ideas/` for candidate ideas\n3. Read `projects/commitments/tech-debt/` for debt items that could be packaged as improvements\n4. For each, run a quick score (skip forcing questions, use available context)\n5. Present ranked:\n\n```\n## Priority Ranking — <date>\n\n| Rank | Feature | Demand | Impact | Effort | Align | Score | Est. |\n|------|---------|--------|--------|--------|-------|-------|------|\n| 1 | <title> | 9 | 7 | 2 | 8 | 14.5 | 3h AI |\n| 2 | <title> | 7 | 8 | 4 | 7 | 8.0 | 8h AI |\n| 3 | <title> | 5 | 5 | 8 | 6 | 2.6 | 3d AI |\n\n### Recommendations\n- **Build now:** #1, #2 — high demand, low effort with AI\n- **Defer:** #3 — moderate demand but high effort even with AI\n- **Kill:** <items with demand < 3 and no strategic value>\n- **Investigate:** <items where demand evidence is unclear — go talk to users>\n```\n\n### Mode C: Analyze user feedback\n\nUser says: \"analyze this feedback\" or \"what are users telling us?\"\n\n1. Parse the feedback source (pasted text, linked document, or workspace file)\n2. Extract signal categories: feature requests, bug reports, frustrations, praise\n3. Cluster by theme\n4. Score each theme by frequency × severity\n5. Present:\n\n```\n## Feedback Analysis — <source>\n\n### Top Themes (by frequency × severity)\n1. **<theme>** — <N> mentions, severity: <high/medium/low>\n   Representative quotes: \"<quote1>\", \"<quote2>\"\n   Implication: <what to build/fix>\n\n2. **<theme>** — ...\n\n### Demand Signals\n- <N> users asked for <feature> — consider promoting from parked ideas\n- <N> users reported <bug> — matches tech debt item: <reference>\n\n### Non-signals (noise to filter)\n- <theme> — only <N> mentions, no severity pattern, likely edge case\n```\n\n## Integration with commitments\n\n- Features promoted from this analysis → create commitment in `projects/commitments/open/` with `tags: [product, prioritized]`\n- Killed features → dismiss from parked ideas with rationale\n- Investigate items → create signal with `obligation_type: research`\n- Decisions made during prioritization → capture via `decision-capture` skill\n\n## Anti-patterns to call out\n\n- **Building for yourself**: \"I want this feature\" ≠ users want this feature\n- **Competitor copying**: building what competitors have without evidence your users want it\n- **Sunk cost**: \"we already started\" is not a reason to continue\n- **Feature creep**: the MVP expanded to include \"just one more thing\" five times\n- **Opinion laundering**: \"users say they want X\" when actually one user mentioned it once\n","skills/new-project/SKILL.md":"# new-project\n\nPath: `skills/new-project/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/new-project/SKILL.md)","skills/local-test/SKILL.md":"# local-test\n\nPath: `skills/local-test/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/local-test/SKILL.md)","skills/llm-council/SKILL.md":"# llm-council\n\nPath: `skills/llm-council/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/llm-council/SKILL.md)","skills/linear/SKILL.md":"# linear\n\nPath: `skills/linear/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/linear/SKILL.md)","skills/idea-parking/SKILL.md":"# idea-parking\n\nPath: `skills/idea-parking/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/idea-parking/SKILL.md)","skills/github-workflow/SKILL.md":"# github-workflow\n\nPath: `skills/github-workflow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github-workflow/SKILL.md)","skills/github/SKILL.md":"# github\n\nPath: `skills/github/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github/SKILL.md)","skills/developer-setup/SKILL.md":"# developer-setup\n\nPath: `skills/developer-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/developer-setup/SKILL.md)","skills/delegation-tracker/SKILL.md":"# delegation-tracker\n\nPath: `skills/delegation-tracker/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/delegation-tracker/SKILL.md)","skills/delegation/SKILL.md":"# delegation\n\nPath: `skills/delegation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/delegation/SKILL.md)","skills/decision-capture/SKILL.md":"# decision-capture\n\nPath: `skills/decision-capture/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/decision-capture/SKILL.md)","skills/content-creator-setup/SKILL.md":"# content-creator-setup\n\nPath: `skills/content-creator-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/content-creator-setup/SKILL.md)","skills/commitment-triage/SKILL.md":"# commitment-triage\n\nPath: `skills/commitment-triage/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-triage/SKILL.md)","skills/commitment-setup/SKILL.md":"# commitment-setup\n\nPath: `skills/commitment-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-setup/SKILL.md)","skills/commitment-digest/SKILL.md":"# commitment-digest\n\nPath: `skills/commitment-digest/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-digest/SKILL.md)","skills/commit/SKILL.md":"# commit\n\nPath: `skills/commit/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commit/SKILL.md)","skills/coding/SKILL.md":"# coding\n\nPath: `skills/coding/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/coding/SKILL.md)","skills/code-review/SKILL.md":"# code-review\n\nPath: `skills/code-review/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/code-review/SKILL.md)","skills/ceo-setup/SKILL.md":"# ceo-setup\n\nPath: `skills/ceo-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/ceo-setup/SKILL.md)",".claude/skills/mintlify-docs/SKILL.md":"# mintlify-docs\n\nPath: `.claude/skills/mintlify-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/skills/mintlify-docs/SKILL.md)",".claude/skills/architecture-video/SKILL.md":"# architecture-video\n\nPath: `.claude/skills/architecture-video/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/skills/architecture-video/SKILL.md)","AGENTS.md":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/AGENTS.md)","CLAUDE.md":"# Claude Agent Guidelines & System Prompt\n\nPath: `CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/CLAUDE.md)",".claude/rules/database.md":"# Rules Skill\n\nPath: `.claude/rules/database.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/database.md)",".claude/rules/doc-hygiene.md":"# Rules Skill\n\nPath: `.claude/rules/doc-hygiene.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/doc-hygiene.md)",".claude/rules/error-handling.md":"# Rules Skill\n\nPath: `.claude/rules/error-handling.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/error-handling.md)",".claude/rules/gateway-events.md":"# Rules Skill\n\nPath: `.claude/rules/gateway-events.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/gateway-events.md)",".claude/rules/lifecycle.md":"# Rules Skill\n\nPath: `.claude/rules/lifecycle.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/lifecycle.md)",".claude/rules/review-discipline.md":"# Rules Skill\n\nPath: `.claude/rules/review-discipline.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/review-discipline.md)",".claude/rules/safety-and-sandbox.md":"# Rules Skill\n\nPath: `.claude/rules/safety-and-sandbox.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/safety-and-sandbox.md)",".claude/rules/skills.md":"# Rules Skill\n\nPath: `.claude/rules/skills.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/skills.md)",".claude/rules/testing.md":"# Rules Skill\n\nPath: `.claude/rules/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/testing.md)",".claude/rules/tool-evidence.md":"# Rules Skill\n\nPath: `.claude/rules/tool-evidence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/tool-evidence.md)",".claude/rules/tools.md":"# Rules Skill\n\nPath: `.claude/rules/tools.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/tools.md)",".claude/rules/types.md":"# Rules Skill\n\nPath: `.claude/rules/types.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/types.md)",".claude/commands/add-sse-event.md":"# Command: /add-sse-event\n\nPath: `.claude/commands/add-sse-event.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/add-sse-event.md)",".claude/commands/add-tool.md":"# Command: /add-tool\n\nPath: `.claude/commands/add-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/add-tool.md)",".claude/commands/fix-issue.md":"# Command: /fix-issue\n\nPath: `.claude/commands/fix-issue.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/fix-issue.md)",".claude/commands/pr-shepherd.md":"# Command: /pr-shepherd\n\nPath: `.claude/commands/pr-shepherd.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/pr-shepherd.md)",".claude/commands/respond-pr.md":"# Command: /respond-pr\n\nPath: `.claude/commands/respond-pr.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/respond-pr.md)",".claude/commands/review-crate.md":"# Command: /review-crate\n\nPath: `.claude/commands/review-crate.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/review-crate.md)",".claude/commands/review-pr.md":"# Command: /review-pr\n\nPath: `.claude/commands/review-pr.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/review-pr.md)",".claude/commands/ship.md":"# Command: /ship\n\nPath: `.claude/commands/ship.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/ship.md)",".claude/commands/trace.md":"# Command: /trace\n\nPath: `.claude/commands/trace.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/trace.md)",".claude/commands/triage-issues.md":"# Command: /triage-issues\n\nPath: `.claude/commands/triage-issues.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/triage-issues.md)",".claude/commands/triage-prs.md":"# Command: /triage-prs\n\nPath: `.claude/commands/triage-prs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/triage-prs.md)","docs/extensions/building-a-tool.md":"# Extensions Skill\n\nPath: `docs/extensions/building-a-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/building-a-tool.md)","docs/extensions/github.md":"# Extensions Skill\n\nPath: `docs/extensions/github.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/github.md)","docs/extensions/web-search.md":"# Extensions Skill\n\nPath: `docs/extensions/web-search.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/web-search.md)","registry/tools/composio.json":"# Tools Skill\n\nPath: `registry/tools/composio.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/composio.json)","registry/tools/github.json":"# Tools Skill\n\nPath: `registry/tools/github.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/github.json)","registry/tools/gmail.json":"# Tools Skill\n\nPath: `registry/tools/gmail.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/gmail.json)","registry/tools/google_calendar.json":"# Tools Skill\n\nPath: `registry/tools/google_calendar.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_calendar.json)","registry/tools/google_docs.json":"# Tools Skill\n\nPath: `registry/tools/google_docs.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_docs.json)","registry/tools/google_drive.json":"# Tools Skill\n\nPath: `registry/tools/google_drive.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_drive.json)","registry/tools/google_sheets.json":"# Tools Skill\n\nPath: `registry/tools/google_sheets.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_sheets.json)","registry/tools/google_slides.json":"# Tools Skill\n\nPath: `registry/tools/google_slides.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_slides.json)","registry/tools/llm_context.json":"# Tools Skill\n\nPath: `registry/tools/llm_context.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/llm_context.json)","registry/tools/portfolio.json":"# Tools Skill\n\nPath: `registry/tools/portfolio.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/portfolio.json)","registry/tools/slack_tool.json":"# Tools Skill\n\nPath: `registry/tools/slack_tool.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/slack_tool.json)","registry/tools/telegram_mtproto.json":"# Tools Skill\n\nPath: `registry/tools/telegram_mtproto.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/telegram_mtproto.json)","registry/tools/web_search.json":"# Tools Skill\n\nPath: `registry/tools/web_search.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/web_search.json)","src/tools/README.md":"# tools Documentation\n\nPath: `src/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/src/tools/README.md)","docs/extensions/google/calendar.md":"# Google Skill\n\nPath: `docs/extensions/google/calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/calendar.md)","docs/extensions/google/docs.md":"# Google Skill\n\nPath: `docs/extensions/google/docs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/docs.md)","docs/extensions/google/drive.md":"# Google Skill\n\nPath: `docs/extensions/google/drive.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/drive.md)","docs/extensions/google/gmail.md":"# Google Skill\n\nPath: `docs/extensions/google/gmail.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/gmail.md)","docs/extensions/google/oauth-setup.md":"# Google Skill\n\nPath: `docs/extensions/google/oauth-setup.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/oauth-setup.md)","docs/extensions/google/sheets.md":"# Google Skill\n\nPath: `docs/extensions/google/sheets.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/sheets.md)","docs/extensions/google/slides.md":"# Google Skill\n\nPath: `docs/extensions/google/slides.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/slides.md)","docs/zh/extensions/building-a-tool.md":"# Extensions Skill\n\nPath: `docs/zh/extensions/building-a-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/building-a-tool.md)","docs/zh/extensions/github.md":"# Extensions Skill\n\nPath: `docs/zh/extensions/github.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/github.md)","docs/zh/extensions/google-calendar.md":"# Extensions Skill\n\nPath: `docs/zh/extensions/google-calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google-calendar.md)","docs/zh/extensions/web-search.md":"# Extensions Skill\n\nPath: `docs/zh/extensions/web-search.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/web-search.md)","skills/portfolio/widget/manifest.json":"# Widget Skill\n\nPath: `skills/portfolio/widget/manifest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/portfolio/widget/manifest.json)","skills/github-workflow/references/workflow-routines.md":"# References Skill\n\nPath: `skills/github-workflow/references/workflow-routines.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github-workflow/references/workflow-routines.md)","docs/zh/extensions/google/calendar.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/calendar.md)","docs/zh/extensions/google/docs.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/docs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/docs.md)","docs/zh/extensions/google/drive.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/drive.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/drive.md)","docs/zh/extensions/google/gmail.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/gmail.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/gmail.md)","docs/zh/extensions/google/oauth-setup.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/oauth-setup.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/oauth-setup.md)","docs/zh/extensions/google/sheets.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/sheets.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/sheets.md)","docs/zh/extensions/google/slides.md":"# Google Skill\n\nPath: `docs/zh/extensions/google/slides.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/slides.md)","tests/fixtures/llm_traces/tools/http_get_replay.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/http_get_replay.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/http_get_replay.json)","tests/fixtures/llm_traces/tools/job_create_status.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/job_create_status.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/job_create_status.json)","tests/fixtures/llm_traces/tools/job_list_cancel.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/job_list_cancel.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/job_list_cancel.json)","tests/fixtures/llm_traces/tools/routine_create_grouped.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_create_grouped.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_create_grouped.json)","tests/fixtures/llm_traces/tools/routine_create_list.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_create_list.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_create_list.json)","tests/fixtures/llm_traces/tools/routine_history.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_history.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_history.json)","tests/fixtures/llm_traces/tools/routine_manual_create.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_manual_create.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_manual_create.json)","tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json)","tests/fixtures/llm_traces/tools/routine_system_event_emit.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_system_event_emit.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_system_event_emit.json)","tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json)","tests/fixtures/llm_traces/tools/routine_update_delete.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_update_delete.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_update_delete.json)","tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json)","tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json)","tests/fixtures/llm_traces/tools/time_parse_diff.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/time_parse_diff.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/time_parse_diff.json)","tests/fixtures/llm_traces/tools/time_parse_invalid.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/time_parse_invalid.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/time_parse_invalid.json)","tests/fixtures/llm_traces/tools/tool_info_discovery.json":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/tool_info_discovery.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/tool_info_discovery.json)"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/AGENTS.md)","tokens":300,"sizeBytes":149},{"name":"database.md","path":".claude/rules/database.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/database.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/database.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/database.md)","tokens":300,"sizeBytes":160},{"name":"doc-hygiene.md","path":".claude/rules/doc-hygiene.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/doc-hygiene.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/doc-hygiene.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/doc-hygiene.md)","tokens":300,"sizeBytes":166},{"name":"error-handling.md","path":".claude/rules/error-handling.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/error-handling.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/error-handling.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/error-handling.md)","tokens":300,"sizeBytes":172},{"name":"gateway-events.md","path":".claude/rules/gateway-events.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/gateway-events.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/gateway-events.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/gateway-events.md)","tokens":300,"sizeBytes":172},{"name":"lifecycle.md","path":".claude/rules/lifecycle.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/lifecycle.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/lifecycle.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/lifecycle.md)","tokens":300,"sizeBytes":162},{"name":"review-discipline.md","path":".claude/rules/review-discipline.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/review-discipline.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/review-discipline.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/review-discipline.md)","tokens":300,"sizeBytes":178},{"name":"safety-and-sandbox.md","path":".claude/rules/safety-and-sandbox.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/safety-and-sandbox.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/safety-and-sandbox.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/safety-and-sandbox.md)","tokens":300,"sizeBytes":180},{"name":"skills.md","path":".claude/rules/skills.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/skills.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/skills.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/skills.md)","tokens":300,"sizeBytes":156},{"name":"testing.md","path":".claude/rules/testing.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/testing.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/testing.md)","tokens":300,"sizeBytes":158},{"name":"tool-evidence.md","path":".claude/rules/tool-evidence.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/tool-evidence.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/tool-evidence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/tool-evidence.md)","tokens":300,"sizeBytes":170},{"name":"tools.md","path":".claude/rules/tools.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/tools.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/tools.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/tools.md)","tokens":300,"sizeBytes":154},{"name":"types.md","path":".claude/rules/types.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/types.md","title":"Rules Skill","category":"anthropic-skill","format":"markdown","content":"# Rules Skill\n\nPath: `.claude/rules/types.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/types.md)","tokens":300,"sizeBytes":154},{"name":"SKILL.md","path":".claude/skills/architecture-video/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/skills/architecture-video/SKILL.md","title":"architecture-video","category":"anthropic-skill","format":"markdown","content":"# architecture-video\n\nPath: `.claude/skills/architecture-video/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/skills/architecture-video/SKILL.md)","tokens":300,"sizeBytes":201},{"name":"SKILL.md","path":".claude/skills/mintlify-docs/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/skills/mintlify-docs/SKILL.md","title":"mintlify-docs","category":"anthropic-skill","format":"markdown","content":"# mintlify-docs\n\nPath: `.claude/skills/mintlify-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/skills/mintlify-docs/SKILL.md)","tokens":300,"sizeBytes":186},{"name":"building-a-tool.md","path":"docs/extensions/building-a-tool.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/building-a-tool.md","title":"Extensions Skill","category":"anthropic-skill","format":"markdown","content":"# Extensions Skill\n\nPath: `docs/extensions/building-a-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/building-a-tool.md)","tokens":300,"sizeBytes":183},{"name":"github.md","path":"docs/extensions/github.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/github.md","title":"Extensions Skill","category":"anthropic-skill","format":"markdown","content":"# Extensions Skill\n\nPath: `docs/extensions/github.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/github.md)","tokens":300,"sizeBytes":165},{"name":"calendar.md","path":"docs/extensions/google/calendar.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/calendar.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/extensions/google/calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/calendar.md)","tokens":300,"sizeBytes":179},{"name":"docs.md","path":"docs/extensions/google/docs.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/docs.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/extensions/google/docs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/docs.md)","tokens":300,"sizeBytes":171},{"name":"drive.md","path":"docs/extensions/google/drive.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/drive.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/extensions/google/drive.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/drive.md)","tokens":300,"sizeBytes":173},{"name":"gmail.md","path":"docs/extensions/google/gmail.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/gmail.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/extensions/google/gmail.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/gmail.md)","tokens":300,"sizeBytes":173},{"name":"oauth-setup.md","path":"docs/extensions/google/oauth-setup.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/oauth-setup.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/extensions/google/oauth-setup.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/oauth-setup.md)","tokens":300,"sizeBytes":185},{"name":"sheets.md","path":"docs/extensions/google/sheets.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/sheets.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/extensions/google/sheets.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/sheets.md)","tokens":300,"sizeBytes":175},{"name":"slides.md","path":"docs/extensions/google/slides.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/slides.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/extensions/google/slides.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/slides.md)","tokens":300,"sizeBytes":175},{"name":"web-search.md","path":"docs/extensions/web-search.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/web-search.md","title":"Extensions Skill","category":"anthropic-skill","format":"markdown","content":"# Extensions Skill\n\nPath: `docs/extensions/web-search.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/web-search.md)","tokens":300,"sizeBytes":173},{"name":"building-a-tool.md","path":"docs/zh/extensions/building-a-tool.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/building-a-tool.md","title":"Extensions Skill","category":"anthropic-skill","format":"markdown","content":"# Extensions Skill\n\nPath: `docs/zh/extensions/building-a-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/building-a-tool.md)","tokens":300,"sizeBytes":189},{"name":"github.md","path":"docs/zh/extensions/github.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/github.md","title":"Extensions Skill","category":"anthropic-skill","format":"markdown","content":"# Extensions Skill\n\nPath: `docs/zh/extensions/github.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/github.md)","tokens":300,"sizeBytes":171},{"name":"google-calendar.md","path":"docs/zh/extensions/google-calendar.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google-calendar.md","title":"Extensions Skill","category":"anthropic-skill","format":"markdown","content":"# Extensions Skill\n\nPath: `docs/zh/extensions/google-calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google-calendar.md)","tokens":300,"sizeBytes":189},{"name":"calendar.md","path":"docs/zh/extensions/google/calendar.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/calendar.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/zh/extensions/google/calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/calendar.md)","tokens":300,"sizeBytes":185},{"name":"docs.md","path":"docs/zh/extensions/google/docs.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/docs.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/zh/extensions/google/docs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/docs.md)","tokens":300,"sizeBytes":177},{"name":"drive.md","path":"docs/zh/extensions/google/drive.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/drive.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/zh/extensions/google/drive.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/drive.md)","tokens":300,"sizeBytes":179},{"name":"gmail.md","path":"docs/zh/extensions/google/gmail.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/gmail.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/zh/extensions/google/gmail.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/gmail.md)","tokens":300,"sizeBytes":179},{"name":"oauth-setup.md","path":"docs/zh/extensions/google/oauth-setup.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/oauth-setup.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/zh/extensions/google/oauth-setup.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/oauth-setup.md)","tokens":300,"sizeBytes":191},{"name":"sheets.md","path":"docs/zh/extensions/google/sheets.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/sheets.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/zh/extensions/google/sheets.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/sheets.md)","tokens":300,"sizeBytes":181},{"name":"slides.md","path":"docs/zh/extensions/google/slides.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/slides.md","title":"Google Skill","category":"anthropic-skill","format":"markdown","content":"# Google Skill\n\nPath: `docs/zh/extensions/google/slides.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/slides.md)","tokens":300,"sizeBytes":181},{"name":"web-search.md","path":"docs/zh/extensions/web-search.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/web-search.md","title":"Extensions Skill","category":"anthropic-skill","format":"markdown","content":"# Extensions Skill\n\nPath: `docs/zh/extensions/web-search.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/web-search.md)","tokens":300,"sizeBytes":179},{"name":"composio.json","path":"registry/tools/composio.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/composio.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/composio.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/composio.json)","tokens":300,"sizeBytes":166},{"name":"github.json","path":"registry/tools/github.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/github.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/github.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/github.json)","tokens":300,"sizeBytes":162},{"name":"gmail.json","path":"registry/tools/gmail.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/gmail.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/gmail.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/gmail.json)","tokens":300,"sizeBytes":160},{"name":"google_calendar.json","path":"registry/tools/google_calendar.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_calendar.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/google_calendar.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_calendar.json)","tokens":300,"sizeBytes":180},{"name":"google_docs.json","path":"registry/tools/google_docs.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_docs.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/google_docs.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_docs.json)","tokens":300,"sizeBytes":172},{"name":"google_drive.json","path":"registry/tools/google_drive.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_drive.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/google_drive.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_drive.json)","tokens":300,"sizeBytes":174},{"name":"google_sheets.json","path":"registry/tools/google_sheets.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_sheets.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/google_sheets.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_sheets.json)","tokens":300,"sizeBytes":176},{"name":"google_slides.json","path":"registry/tools/google_slides.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_slides.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/google_slides.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/google_slides.json)","tokens":300,"sizeBytes":176},{"name":"llm_context.json","path":"registry/tools/llm_context.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/llm_context.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/llm_context.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/llm_context.json)","tokens":300,"sizeBytes":172},{"name":"portfolio.json","path":"registry/tools/portfolio.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/portfolio.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/portfolio.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/portfolio.json)","tokens":300,"sizeBytes":168},{"name":"slack_tool.json","path":"registry/tools/slack_tool.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/slack_tool.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/slack_tool.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/slack_tool.json)","tokens":300,"sizeBytes":170},{"name":"telegram_mtproto.json","path":"registry/tools/telegram_mtproto.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/telegram_mtproto.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/telegram_mtproto.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/telegram_mtproto.json)","tokens":300,"sizeBytes":182},{"name":"web_search.json","path":"registry/tools/web_search.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/web_search.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `registry/tools/web_search.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/registry/tools/web_search.json)","tokens":300,"sizeBytes":170},{"name":"SKILL.md","path":"skills/ceo-setup/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/ceo-setup/SKILL.md","title":"ceo-setup","category":"anthropic-skill","format":"markdown","content":"# ceo-setup\n\nPath: `skills/ceo-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/ceo-setup/SKILL.md)","tokens":300,"sizeBytes":158},{"name":"SKILL.md","path":"skills/code-review/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/code-review/SKILL.md","title":"code-review","category":"anthropic-skill","format":"markdown","content":"# code-review\n\nPath: `skills/code-review/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/code-review/SKILL.md)","tokens":300,"sizeBytes":164},{"name":"SKILL.md","path":"skills/coding/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/coding/SKILL.md","title":"coding","category":"anthropic-skill","format":"markdown","content":"# coding\n\nPath: `skills/coding/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/coding/SKILL.md)","tokens":300,"sizeBytes":149},{"name":"SKILL.md","path":"skills/commit/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commit/SKILL.md","title":"commit","category":"anthropic-skill","format":"markdown","content":"# commit\n\nPath: `skills/commit/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commit/SKILL.md)","tokens":300,"sizeBytes":149},{"name":"SKILL.md","path":"skills/commitment-digest/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-digest/SKILL.md","title":"commitment-digest","category":"anthropic-skill","format":"markdown","content":"# commitment-digest\n\nPath: `skills/commitment-digest/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-digest/SKILL.md)","tokens":300,"sizeBytes":182},{"name":"SKILL.md","path":"skills/commitment-setup/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-setup/SKILL.md","title":"commitment-setup","category":"anthropic-skill","format":"markdown","content":"# commitment-setup\n\nPath: `skills/commitment-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-setup/SKILL.md)","tokens":300,"sizeBytes":179},{"name":"SKILL.md","path":"skills/commitment-triage/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-triage/SKILL.md","title":"commitment-triage","category":"anthropic-skill","format":"markdown","content":"# commitment-triage\n\nPath: `skills/commitment-triage/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/commitment-triage/SKILL.md)","tokens":300,"sizeBytes":182},{"name":"SKILL.md","path":"skills/content-creator-setup/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/content-creator-setup/SKILL.md","title":"content-creator-setup","category":"anthropic-skill","format":"markdown","content":"# content-creator-setup\n\nPath: `skills/content-creator-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/content-creator-setup/SKILL.md)","tokens":300,"sizeBytes":194},{"name":"SKILL.md","path":"skills/decision-capture/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/decision-capture/SKILL.md","title":"decision-capture","category":"anthropic-skill","format":"markdown","content":"# decision-capture\n\nPath: `skills/decision-capture/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/decision-capture/SKILL.md)","tokens":300,"sizeBytes":179},{"name":"SKILL.md","path":"skills/delegation-tracker/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/delegation-tracker/SKILL.md","title":"delegation-tracker","category":"anthropic-skill","format":"markdown","content":"# delegation-tracker\n\nPath: `skills/delegation-tracker/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/delegation-tracker/SKILL.md)","tokens":300,"sizeBytes":185},{"name":"SKILL.md","path":"skills/delegation/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/delegation/SKILL.md","title":"delegation","category":"anthropic-skill","format":"markdown","content":"# delegation\n\nPath: `skills/delegation/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/delegation/SKILL.md)","tokens":300,"sizeBytes":161},{"name":"SKILL.md","path":"skills/developer-setup/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/developer-setup/SKILL.md","title":"developer-setup","category":"anthropic-skill","format":"markdown","content":"# developer-setup\n\nPath: `skills/developer-setup/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/developer-setup/SKILL.md)","tokens":300,"sizeBytes":176},{"name":"workflow-routines.md","path":"skills/github-workflow/references/workflow-routines.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github-workflow/references/workflow-routines.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `skills/github-workflow/references/workflow-routines.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github-workflow/references/workflow-routines.md)","tokens":300,"sizeBytes":223},{"name":"SKILL.md","path":"skills/github-workflow/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github-workflow/SKILL.md","title":"github-workflow","category":"anthropic-skill","format":"markdown","content":"# github-workflow\n\nPath: `skills/github-workflow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github-workflow/SKILL.md)","tokens":300,"sizeBytes":176},{"name":"SKILL.md","path":"skills/github/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github/SKILL.md","title":"github","category":"anthropic-skill","format":"markdown","content":"# github\n\nPath: `skills/github/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/github/SKILL.md)","tokens":300,"sizeBytes":149},{"name":"SKILL.md","path":"skills/idea-parking/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/idea-parking/SKILL.md","title":"idea-parking","category":"anthropic-skill","format":"markdown","content":"# idea-parking\n\nPath: `skills/idea-parking/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/idea-parking/SKILL.md)","tokens":300,"sizeBytes":167},{"name":"SKILL.md","path":"skills/linear/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/linear/SKILL.md","title":"linear","category":"anthropic-skill","format":"markdown","content":"# linear\n\nPath: `skills/linear/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/linear/SKILL.md)","tokens":300,"sizeBytes":149},{"name":"SKILL.md","path":"skills/llm-council/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/llm-council/SKILL.md","title":"llm-council","category":"anthropic-skill","format":"markdown","content":"# llm-council\n\nPath: `skills/llm-council/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/llm-council/SKILL.md)","tokens":300,"sizeBytes":164},{"name":"SKILL.md","path":"skills/local-test/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/local-test/SKILL.md","title":"local-test","category":"anthropic-skill","format":"markdown","content":"# local-test\n\nPath: `skills/local-test/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/local-test/SKILL.md)","tokens":300,"sizeBytes":161},{"name":"SKILL.md","path":"skills/new-project/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/new-project/SKILL.md","title":"new-project","category":"anthropic-skill","format":"markdown","content":"# new-project\n\nPath: `skills/new-project/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/new-project/SKILL.md)","tokens":300,"sizeBytes":164},{"name":"manifest.json","path":"skills/portfolio/widget/manifest.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/portfolio/widget/manifest.json","title":"Widget Skill","category":"anthropic-skill","format":"json","content":"# Widget Skill\n\nPath: `skills/portfolio/widget/manifest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/portfolio/widget/manifest.json)","tokens":300,"sizeBytes":185},{"name":"SKILL.md","path":"skills/product-prioritization/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/product-prioritization/SKILL.md","title":"product-prioritization","category":"anthropic-skill","format":"markdown","content":"---\nname: product-prioritization\nversion: 0.1.0\ndescription: Product strategy and feature prioritization — score features by user demand evidence, effort (human vs AI-assisted), strategic alignment, and market signal. Anti-sycophantic forcing questions to cut through opinion.\nactivation:\n  keywords:\n    - prioritize\n    - what to build\n    - roadmap\n    - user feedback\n    - feature priority\n    - product strategy\n    - market signal\n    - user demand\n    - product review\n    - what matters most\n    - worth building\n    - should we build\n  patterns:\n    - \"(?i)(prioritize|rank|score) (features|tasks|backlog|ideas)\"\n    - \"(?i)what should (we|I) (build|work on|focus on) (next|first)\"\n    - \"(?i)is (this|it) worth (building|doing|investing)\"\n    - \"(?i)(product|roadmap|strategy) (review|planning|session)\"\n    - \"(?i)(user|customer) (feedback|demand|signal)\"\n  tags:\n    - product\n    - strategy\n    - prioritization\n  max_context_tokens: 2000\n---\n\n# Product Prioritization\n\nYou are a product strategist. Your job is to cut through opinion and surface evidence. Be direct, challenge assumptions, and never agree just to be agreeable.\n\n## Core principles\n\n**1. Evidence over opinion.** \"Users want X\" is not evidence. \"12 users in the last month asked for X, 3 churned citing its absence\" is evidence. Always ask for the evidence behind claims.\n\n**2. Demand reality over vision.** A feature nobody uses is worse than no feature. Before scoring any item, establish: does real demand exist, or is this a solution looking for a problem?\n\n**3. Effort compression.** AI changes the effort calculus. A feature that takes 2 weeks of human time might take 2 hours with AI. Always present dual estimates (human time vs AI-assisted time). When AI makes completeness cheap, there is no excuse for half-measures.\n\n**4. Opportunity cost.** Every \"yes\" is a \"no\" to something else. The question isn't \"is this good?\" but \"is this the best use of the next unit of time?\"\n\n## Forcing questions\n\nBefore scoring any feature, ask these. Do not skip them. Do not accept vague answers.\n\n1. **Who specifically needs this?** Name a real user, customer, or persona. \"Everyone\" is not an answer.\n2. **What evidence says they need it?** Support tickets, churn data, user interviews, competitor analysis, or direct requests. \"I think\" is not evidence.\n3. **What happens if we don't build it?** If the answer is \"nothing much,\" it's not a priority.\n4. **What's the smallest version that delivers value?** Resist scope creep. What's the MVP?\n5. **What would change your mind?** If no evidence could convince you this is wrong, you're not thinking — you're defending.\n\n## Scoring framework\n\nScore each feature on 4 dimensions (1-10 each):\n\n| Dimension | What it measures | Evidence sources |\n|---|---|---|\n| **Demand** | Real user/market pull | Support tickets, churn reasons, competitor features, direct requests, usage data |\n| **Impact** | Value delivered when built | Revenue potential, retention improvement, unlock other features, strategic positioning |\n| **Effort** | AI-assisted implementation cost | Complexity, dependencies, unknowns. Use dual estimate: human time / AI-assisted time |\n| **Alignment** | Fits current strategy/mission | Core vs adjacent, tech debt reduction, platform strengthening |\n\n**Priority score = (Demand × 3 + Impact × 2 + Alignment × 1) / Effort**\n\nDemand is weighted highest because it's the hardest to fake.\n\n## Usage modes\n\n### Mode A: Score a single feature\n\nUser says: \"should we build X?\" or \"is X worth building?\"\n\nRun the forcing questions, then score:\n\n```\n## Feature Assessment: <title>\n\n### Forcing Questions\n1. **Who needs it:** <specific answer>\n2. **Evidence:** <concrete data points>\n3. **If we don't build it:** <consequence>\n4. **Smallest valuable version:** <MVP description>\n5. **What would change your mind:** <falsifiability>\n\n### Score\n| Dimension | Score | Reasoning |\n|---|---|---|\n| Demand | 7/10 | 12 requests in last month, 2 competitor launches |\n| Impact | 6/10 | ~15% retention improvement for power users |\n| Effort | 3/10 | ~4h AI-assisted (2 weeks manual) |\n| Alignment | 8/10 | Core feature, reduces support load |\n\n**Priority: 8.7** (high — strong demand, low effort with AI)\n\n### Recommendation\n<concrete recommendation with caveats>\n```\n\n### Mode B: Rank a backlog\n\nUser says: \"prioritize my backlog\" or \"what should we build next?\"\n\n1. Read `projects/commitments/open/` for items tagged as features\n2. Read `projects/commitments/parked-ideas/` for candidate ideas\n3. Read `projects/commitments/tech-debt/` for debt items that could be packaged as improvements\n4. For each, run a quick score (skip forcing questions, use available context)\n5. Present ranked:\n\n```\n## Priority Ranking — <date>\n\n| Rank | Feature | Demand | Impact | Effort | Align | Score | Est. |\n|------|---------|--------|--------|--------|-------|-------|------|\n| 1 | <title> | 9 | 7 | 2 | 8 | 14.5 | 3h AI |\n| 2 | <title> | 7 | 8 | 4 | 7 | 8.0 | 8h AI |\n| 3 | <title> | 5 | 5 | 8 | 6 | 2.6 | 3d AI |\n\n### Recommendations\n- **Build now:** #1, #2 — high demand, low effort with AI\n- **Defer:** #3 — moderate demand but high effort even with AI\n- **Kill:** <items with demand < 3 and no strategic value>\n- **Investigate:** <items where demand evidence is unclear — go talk to users>\n```\n\n### Mode C: Analyze user feedback\n\nUser says: \"analyze this feedback\" or \"what are users telling us?\"\n\n1. Parse the feedback source (pasted text, linked document, or workspace file)\n2. Extract signal categories: feature requests, bug reports, frustrations, praise\n3. Cluster by theme\n4. Score each theme by frequency × severity\n5. Present:\n\n```\n## Feedback Analysis — <source>\n\n### Top Themes (by frequency × severity)\n1. **<theme>** — <N> mentions, severity: <high/medium/low>\n   Representative quotes: \"<quote1>\", \"<quote2>\"\n   Implication: <what to build/fix>\n\n2. **<theme>** — ...\n\n### Demand Signals\n- <N> users asked for <feature> — consider promoting from parked ideas\n- <N> users reported <bug> — matches tech debt item: <reference>\n\n### Non-signals (noise to filter)\n- <theme> — only <N> mentions, no severity pattern, likely edge case\n```\n\n## Integration with commitments\n\n- Features promoted from this analysis → create commitment in `projects/commitments/open/` with `tags: [product, prioritized]`\n- Killed features → dismiss from parked ideas with rationale\n- Investigate items → create signal with `obligation_type: research`\n- Decisions made during prioritization → capture via `decision-capture` skill\n\n## Anti-patterns to call out\n\n- **Building for yourself**: \"I want this feature\" ≠ users want this feature\n- **Competitor copying**: building what competitors have without evidence your users want it\n- **Sunk cost**: \"we already started\" is not a reason to continue\n- **Feature creep**: the MVP expanded to include \"just one more thing\" five times\n- **Opinion laundering**: \"users say they want X\" when actually one user mentioned it once\n","frontmatter":{"name":"product-prioritization","version":"0.1.0","description":"Product strategy and feature prioritization — score features by user demand evidence, effort (human vs AI-assisted), strategic alignment, and market signal. Anti-sycophantic forcing questions to cut through opinion.","activation":{"keywords":["prioritize","what to build","roadmap","user feedback","feature priority","product strategy","market signal","user demand","product review","what matters most","worth building","should we build"],"patterns":["(?i)(prioritize|rank|score) (features|tasks|backlog|ideas)","(?i)what should (we|I) (build|work on|focus on) (next|first)","(?i)is (this|it) worth (building|doing|investing)","(?i)(product|roadmap|strategy) (review|planning|session)","(?i)(user|customer) (feedback|demand|signal)"],"tags":["product","strategy","prioritization"],"max_context_tokens":2000}},"isInternal":false,"tokens":1789,"sizeBytes":7006},{"name":"SKILL.md","path":"skills/qa-review/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/qa-review/SKILL.md","title":"qa-review","category":"anthropic-skill","format":"markdown","content":"---\nname: qa-review\nversion: 0.1.0\ndescription: QA review for code changes — test coverage analysis, edge case identification, test plan generation, regression detection, test health tracking over time.\nactivation:\n  keywords:\n    - QA review\n    - test coverage\n    - test plan\n    - quality check\n    - edge cases\n    - regression test\n    - test health\n    - missing tests\n    - test strategy\n    - testing review\n  patterns:\n    - \"(?i)(QA|quality|test|testing) (review|check|audit|plan)\"\n    - \"(?i)(check|review|improve) (test )?coverage\"\n    - \"(?i)what (edge cases|tests) am I missing\"\n    - \"(?i)generate (a )?test plan\"\n  tags:\n    - developer\n    - testing\n    - review\n  max_context_tokens: 1800\n---\n\n# QA Review\n\nYou are a QA engineer reviewing code for test coverage, edge cases, and regression risks. Focus on what breaks in production, not theoretical completeness.\n\n## When to run\n\n- Before merging PRs with logic changes\n- When user asks about test coverage or edge cases\n- As part of the review readiness pipeline (`/review-readiness`)\n- When the weekly retro shows declining test health\n\n## Review methodology\n\n### 1. Coverage analysis\n- Identify changed functions/modules and check for corresponding tests\n- Flag untested code paths: error handlers, edge cases, boundary conditions\n- Check test quality, not just existence — a test that never asserts is worse than no test\n\n### 2. Edge case identification\nFor each changed function, consider:\n- **Boundary values**: empty input, zero, max int, single element, exactly-at-limit\n- **Type boundaries**: null/None/nil, empty string vs missing, NaN, negative numbers\n- **Concurrency**: race conditions, concurrent access, timeout during operation\n- **State transitions**: invalid state transitions, repeated calls, out-of-order operations\n- **External failures**: network timeout, disk full, permission denied, malformed response\n\n### 3. Regression risk assessment\n- What existing behavior could break from these changes?\n- Are integration tests covering the changed interaction paths?\n- Are there implicit dependencies that tests don't capture?\n\n### 4. Test plan generation\nWhen asked to generate a test plan, produce:\n\n```\n## Test Plan — <feature/PR>\n\n### Unit Tests\n- [ ] <test description> — covers: <what scenario>\n- [ ] <test description> — covers: <edge case>\n\n### Integration Tests\n- [ ] <test description> — covers: <interaction between modules>\n\n### Regression Tests\n- [ ] <test description> — ensures: <existing behavior preserved>\n\n### Manual Verification\n- [ ] <step> — verify: <expected outcome>\n```\n\n### 5. Test health metrics\nTrack over time (via weekly retro integration):\n- Test-to-code ratio: lines of test per lines of production code\n- Flaky test rate: tests that pass/fail non-deterministically\n- Coverage trend: improving or declining\n- Time-to-test: how long the test suite takes\n\n## Output format\n\n```\n## QA Review — <scope>\n\n### Coverage Gaps\n- **<function/module>** — no tests for: <specific paths>\n  Suggested test: <concrete test description>\n\n### Edge Cases Missing\n- **<scenario>** — <why it matters in production>\n  Suggested test: <concrete test description>\n\n### Regression Risks\n- **<change>** could break: <existing behavior>\n  Mitigation: <test or verification step>\n\n### Test Quality Issues\n- **<test name>** — <issue: weak assertion, testing implementation not behavior, etc.>\n\n### Health Score: <0-100>\n- Coverage gaps: <count> (each -10 points)\n- Missing edge cases: <count> (each -5 points)\n- Regression risks: <count> (each -15 points)\n- Quality issues: <count> (each -5 points)\n```\n\n## Fix-first model\n\nFor obvious additions (missing null check test, no error path test):\n- Generate the test code and present it for approval\n- Mark `[TEST GENERATED]`\n\nFor architectural test decisions (what level to test at, mocking strategy):\n- Present options with tradeoffs\n- Ask the user\n\n## Integration with developer workflow\n\nQA findings are tracked as signals:\n- Coverage gaps on changed code → signal with `obligation_type: testing`, `immediacy: batch`\n- Missing regression test → signal with `immediacy: prompt` (higher risk)\n- Declining test health trend flagged in weekly retro\n","frontmatter":{"name":"qa-review","version":"0.1.0","description":"QA review for code changes — test coverage analysis, edge case identification, test plan generation, regression detection, test health tracking over time.","activation":{"keywords":["QA review","test coverage","test plan","quality check","edge cases","regression test","test health","missing tests","test strategy","testing review"],"patterns":["(?i)(QA|quality|test|testing) (review|check|audit|plan)","(?i)(check|review|improve) (test )?coverage","(?i)what (edge cases|tests) am I missing","(?i)generate (a )?test plan"],"tags":["developer","testing","review"],"max_context_tokens":1800}},"isInternal":false,"tokens":992,"sizeBytes":4212},{"name":"SKILL.md","path":"skills/review-checklist/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/review-checklist/SKILL.md","title":"review-checklist","category":"anthropic-skill","format":"markdown","content":"---\nname: review-checklist\nversion: 0.1.0\ndescription: Pre-merge review checklist based on recurring AI reviewer feedback patterns\nactivation:\n  patterns:\n    - \"review.*checklist\"\n    - \"ready to merge\"\n    - \"pre-merge check\"\n    - \"check.*before.*merge\"\n  keywords:\n    - review\n    - checklist\n    - merge\n    - pre-merge\n  max_context_tokens: 1500\n---\n\n# Pre-Merge Review Checklist\n\nBefore merging, verify these items. They represent the most common issues caught by automated code reviewers (Copilot, Gemini) on IronClaw PRs.\n\n## Database Operations\n- [ ] Multi-step DB operations are wrapped in transactions (INSERT+INSERT, UPDATE+DELETE, read-modify-write)\n- [ ] Both postgres AND libsql backends updated for any new Database trait methods\n- [ ] Migrations are atomic (SQL execution + version recording in same transaction)\n\n## Security & Data Safety\n- [ ] Tool parameters are redacted via `redact_params()` before logging or SSE/WebSocket broadcast\n- [ ] URL validation resolves DNS before checking for private/loopback IPs (anti-SSRF via DNS rebinding)\n- [ ] Destructive tools have `requires_approval()` returning `Always` or `UnlessAutoApproved`\n- [ ] Data from worker containers is treated as untrusted (tool domain checks, server-side nesting depth)\n- [ ] No secrets or credentials in error messages, logs, or SSE events\n\n## String Safety\n- [ ] No byte-index slicing (`&s[..n]`) on external/user strings -- use `is_char_boundary()` or `char_indices()`\n- [ ] File extension and media type comparisons are case-insensitive (`.to_ascii_lowercase()` before matching)\n- [ ] Path comparisons are case-insensitive where needed (macOS/Windows filesystems)\n\n## Trait Wrappers & Decorator Chain\n- [ ] New `LlmProvider` trait methods are delegated in ALL wrapper types (grep `impl LlmProvider for`)\n- [ ] New trait methods are tested through the full decorator/provider chain, not just the base impl\n- [ ] Default trait method implementations are intentional -- wrappers that silently return defaults are bugs\n\n## Tests\n- [ ] Temporary files/dirs use `tempfile` crate, no hardcoded `/tmp/` paths\n- [ ] Tests don't mutate global statics without synchronization (use per-test state or `serial_test`)\n- [ ] Tests don't make real network requests (use mocks, stubs, or RFC 5737 TEST-NET IPs like 192.0.2.1)\n- [ ] Test names and comments match actual test behavior and assertions\n\n## Comments & Documentation\n- [ ] Code comments match actual behavior (especially route paths, tool names, function semantics)\n- [ ] Spec/README files updated if module behavior changed\n- [ ] Error messages are clear and non-redundant (don't nest tool name inside tool error that already contains it)\n","frontmatter":{"name":"review-checklist","version":"0.1.0","description":"Pre-merge review checklist based on recurring AI reviewer feedback patterns","activation":{"patterns":["review.*checklist","ready to merge","pre-merge check","check.*before.*merge"],"keywords":["review","checklist","merge","pre-merge"],"max_context_tokens":1500}},"isInternal":false,"tokens":626,"sizeBytes":2679},{"name":"SKILL.md","path":"skills/review-readiness/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/review-readiness/SKILL.md","title":"review-readiness","category":"anthropic-skill","format":"markdown","content":"---\nname: review-readiness\nversion: 0.1.0\ndescription: PR readiness dashboard — tracks which reviews have been completed per branch and gates merge decisions. Shows code review, tests, security, QA, and linting status.\nactivation:\n  keywords:\n    - review readiness\n    - ready to merge\n    - PR readiness\n    - ship checklist\n    - merge checklist\n    - review status\n    - PR status\n    - can I merge\n    - ready to ship\n  patterns:\n    - \"(?i)(is|are) (this|it|PR|the PR) ready (to|for) (merge|ship|review)\"\n    - \"(?i)(review|merge|ship) (readiness|checklist|status)\"\n    - \"(?i)what (checks|reviews) are (missing|left|needed)\"\n  tags:\n    - developer\n    - review\n    - process\n  max_context_tokens: 1200\n---\n\n# Review Readiness Dashboard\n\nTrack process completeness per PR branch. Gate merges on evidence, not gut feel.\n\n## How it works\n\nFor each active PR branch, maintain a readiness state in `projects/<owner>-<repo>/readiness/<branch-slug>.md`:\n\n```\n---\ntype: review-readiness\nrepo: owner/repo\nbranch: feature-branch-name\npr_number: 123\nupdated_at: YYYY-MM-DD\n---\n# Review Readiness — PR #123\n\n| Check | Status | Last Run | Score | Notes |\n|-------|--------|----------|-------|-------|\n| Code review | completed | 2026-03-28 | — | Approved by @alice |\n| Tests | passing | 2026-03-28 | — | CI green, 3 new tests |\n| Security review | completed | 2026-03-28 | 85/100 | 1 P3 finding (accepted) |\n| QA review | pending | — | — | Not yet run |\n| Linting | passing | 2026-03-28 | — | Zero warnings |\n\n## Verdict: NOT READY\nMissing: QA review\n\n## Findings log\n- [2026-03-28] Security: P3 — missing rate limit on new endpoint (accepted risk)\n- [2026-03-28] Code review: approved, 2 nits addressed\n```\n\n## When to use\n\n**Checking readiness:** User asks \"is this PR ready?\" or \"can I merge?\"\n1. Read the readiness file for the branch\n2. If no file exists, create one with all checks as `pending`\n3. Present the dashboard\n4. If all checks passed: \"Ready to merge.\"\n5. If checks missing: \"Not ready. Missing: <list>. Run `/security-review` and `/qa-review` to complete.\"\n\n**After running a review skill:** When `/security-review` or `/qa-review` completes, update the readiness file with the result and score.\n\n**In the morning brief:** For PRs that are \"READY TO MERGE\" (approved + CI green), also check review readiness. If security or QA is missing, note it: \"READY TO MERGE (code + CI), but security review not run.\"\n\n## Automated updates\n\nThe readiness file is updated by:\n- **Code review**: when PR gets GitHub approval or changes-requested\n- **Tests**: from CI status (green/red/pending)\n- **Security review**: when `/security-review` runs on the branch\n- **QA review**: when `/qa-review` runs on the branch\n- **Linting**: from CI or manual `cargo clippy` / `eslint` output\n\n## Readiness verdict logic\n\n- **READY**: All checks completed, no unresolved P1/P2 findings, CI green\n- **ALMOST READY**: All checks completed but has accepted findings or pending CI\n- **NOT READY**: One or more checks not yet run\n- **BLOCKED**: P1 finding unresolved, or CI failing\n\n## Effort estimates\n\nWhen presenting readiness, show dual-time estimates for remaining work:\n- \"Missing: QA review (~15min AI-assisted, ~2h manual)\"\n- \"Missing: Security review (~10min AI-assisted, ~1h manual)\"\n\nThis reframes the cost — completeness is cheap with AI assistance.\n","frontmatter":{"name":"review-readiness","version":"0.1.0","description":"PR readiness dashboard — tracks which reviews have been completed per branch and gates merge decisions. Shows code review, tests, security, QA, and linting status.","activation":{"keywords":["review readiness","ready to merge","PR readiness","ship checklist","merge checklist","review status","PR status","can I merge","ready to ship"],"patterns":["(?i)(is|are) (this|it|PR|the PR) ready (to|for) (merge|ship|review)","(?i)(review|merge|ship) (readiness|checklist|status)","(?i)what (checks|reviews) are (missing|left|needed)"],"tags":["developer","review","process"],"max_context_tokens":1200}},"isInternal":false,"tokens":900,"sizeBytes":3361},{"name":"SKILL.md","path":"skills/routine-advisor/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/routine-advisor/SKILL.md","title":"routine-advisor","category":"anthropic-skill","format":"markdown","content":"---\nname: routine-advisor\nversion: 0.1.1\ndescription: Suggests relevant cron routines based on user context, goals, and observed patterns\nactivation:\n  keywords:\n    - every day\n    - every morning\n    - every week\n    - routine\n    - automate\n    - remind me\n    - check daily\n    - monitor\n    - recurring\n    - schedule\n    - habit\n    - workflow\n    - keep forgetting\n    - always have to\n    - repetitive\n    - notifications\n    - digest\n    - review daily\n    - weekly review\n  patterns:\n    - \"I (always|usually|often|regularly) (check|do|look at|review)\"\n    - \"every (morning|evening|week|day|monday|friday)\"\n    - \"I (wish|want) (I|it) (could|would) (automatically|auto)\"\n    - \"is there a way to (auto|schedule|set up)\"\n    - \"can you (check|monitor|watch|track).*for me\"\n    - \"I keep (forgetting|missing|having to)\"\n  tags:\n    - automation\n    - scheduling\n    - personal-assistant\n    - productivity\n  max_context_tokens: 1500\n---\n\n# Routine Advisor\n\nWhen the conversation suggests the user has a repeatable task or could benefit from automation, consider suggesting a routine.\n\n## When to Suggest\n\nSuggest a routine when you notice:\n- The user describes doing something repeatedly (\"I check my PRs every morning\")\n- The user mentions forgetting recurring tasks (\"I keep forgetting to...\")\n- The user asks you to do something that sounds periodic\n- You've learned enough about the user to propose a relevant automation\n- The user has installed extensions that enable new monitoring capabilities\n\nDo not suggest or create a routine when the user asks for a one-time answer or says to do something now, right now, immediately, or ASAP without also asking for scheduling or recurrence.\n\n## How to Suggest\n\nBe specific and concrete. Not \"Want me to set up a routine?\" but rather: \"I noticed you review PRs every morning. Want me to create a daily 9am routine that checks your open PRs and sends you a summary?\"\n\nAlways include:\n1. What the routine would do (specific action)\n2. When it would run (specific schedule in plain language)\n3. How it would notify them (which channel they're on)\n\nWait for the user to confirm before creating.\n\n## Pacing\n\n- First 1-3 conversations: Do NOT suggest routines. Focus on helping and learning.\n- After learning 2-3 user patterns: Suggest your first routine. Keep it simple.\n- After 5+ conversations: Suggest more routines as patterns emerge.\n- Never suggest more than 1 routine per conversation unless the user is clearly interested.\n- If the user declines, wait at least 3 conversations before suggesting again.\n\n## Creating Routines\n\nUse the `builtin__trigger_create` capability. Before creating, check `builtin__trigger_list` to avoid duplicates. A uniqueness request such as \"make sure there is exactly one\" or \"don't create a duplicate\" is read-only after that check when a matching routine already exists: do not pause, resume, rename, or otherwise alter the existing routine unless the user explicitly asks for that lifecycle change. In particular, a paused match still satisfies \"do not create a duplicate\"; do not infer that it should be resumed.\n\nParameters:\n- `name`: Short human-readable routine name\n- `prompt`: Clear, specific instruction for the full task each fire performs, written for a future run with no memory of this conversation. Each fire's final reply is recorded automatically in the routine's own run thread — never write a prompt step telling it to message or reply to the requesting user with the result; that's not a task, it's redundant. If the user wants the result pushed somewhere else too (a Slack DM, a Slack channel, a Telegram chat, ...), write delivery as an explicit prompt step naming the destination (for example \"then deliver the summary to my Slack DM using builtin__outbound_deliver\") and resolve the destination id from `builtin__outbound_delivery_targets_list` while creating the routine — while the user is present to confirm — then pin that id in the prompt so a fire never has to look a destination up by name. A fire whose prompt makes no delivery call delivers nothing externally; that's how conditional routines work (for example, \"only alert me if the build is red\"). The same applies to messaging a third party: when that itself is the routine's task (for example \"send Firat a joke every morning\"), resolve the exact recipient conversation ID while creating the routine and pin it in the prompt, so a fire never has to look a recipient up by name.\n- `schedule`: An object — `{\"kind\": \"cron\", \"expression\": \"0 9 * * *\", \"timezone\": \"America/New_York\"}` for recurring, or `{\"kind\": \"once\", \"at\": \"2026-07-01T09:00:00\", \"timezone\": \"America/New_York\"}` for one-time. The timezone is required (IANA name). Common cron schedules:\n  - Daily 9am: `0 9 * * *`\n  - Weekday mornings: `0 9 * * MON-FRI`\n  - Weekly Monday: `0 9 * * MON`\n  - Every 2 hours during work: `0 9-17/2 * * MON-FRI`\n  - Sunday evening: `0 18 * * SUN`\n\n## Delivering Results\n\nA routine's fire doesn't need a delivery step to be useful: each fire's final reply lands in that routine's own run thread automatically, the same way a normal reply lands in the conversation it answers. Never write a prompt step that re-sends the result to the requesting user with a messaging capability — the run thread already has it, so a self-send is redundant, not helpful. Messaging a third party is different: when that is the routine's actual task, the fire performs it with the messaging capability as instructed by the pinned prompt.\n\nTo put a routine's result on ANOTHER surface, write delivery as an explicit prompt step: call `builtin__outbound_delivery_targets_list` while creating the routine (while the user is present) to get the destination id, then have the prompt call `builtin__outbound_deliver` with that id (see `prompt` above). A fire whose prompt makes no delivery call delivers nothing externally — this is intentional, and it's how conditional routines work.\n\n**The default destination is the surface the user is asking from — apply it, never ask.** A bare \"send me X every morning\" asked in a Slack or Telegram conversation means that conversation's channel: resolve the current channel's target id from `builtin__outbound_delivery_targets_list` and pin it in the delivery step, exactly as if the user had named it. Asked from the web app, a bare \"send me\" needs no delivery step — the result already lands in the routine's run thread the user will see there; create the routine without one and say where results will appear. Do not respond to a bare \"send me\" with a which-channel question in either case. Naming destinations overrides this default (\"in Telegram\" from Slack → Telegram; \"to Slack and Telegram\" → one delivery call per channel).\n\nDelivery and notifications are different concerns. Delivery puts the routine's actual result on a destination the prompt names, one call per destination. Notifications are host-owned pings that a background run needs attention — an approval gate, a reconnect prompt, a failure — and they ride the user's configured notification channels (`builtin__notification_channels_set`), independent of any routine's own delivery steps; if the user wants to be pinged when a routine stalls waiting for approval, that's a notification-channel setting, not a prompt step. Routines carry no stored default destination: if a fire's prompt makes no delivery call and no notification is due, the result stays in the run thread only.\n\n## Routine Ideas by User Type\n\n**Developer:**\n- Daily PR review digest (check open PRs, summarize what needs attention)\n- CI/CD failure alerts (monitor build status)\n- Weekly dependency update check\n- Daily standup prep (summarize yesterday's work from daily logs)\n\n**Professional:**\n- Morning briefing (today's priorities from memory + any pending tasks)\n- End-of-day summary (what was accomplished, what's pending)\n- Weekly goal review (check progress against stated goals)\n- Meeting prep reminders\n\n**Health/Personal:**\n- Daily exercise or habit check-in\n- Weekly meal planning prompt\n- Monthly budget review reminder\n\n**General:**\n- Daily news digest on topics of interest\n- Weekly reflection prompt (what went well, what to improve)\n- Periodic task/reminder check-in\n- Regular cleanup of stale tasks or notes\n- Weekly profile evolution (if the user has a profile in `context/profile.json`, suggest a Monday routine that reads the profile via `memory_read`, searches recent conversations for new patterns with `memory_search`, and updates the profile via `memory_write` if any fields should change with confidence > 0.6 — be conservative, only update with clear evidence)\n\n## Awareness\n\nBefore suggesting, consider what tools and extensions are currently available. Only suggest routines the agent can actually execute. If a routine would need a tool that isn't installed, mention that too: \"If you connect your calendar, I could also send you a morning briefing with today's meetings.\"\n","frontmatter":{"name":"routine-advisor","version":"0.1.1","description":"Suggests relevant cron routines based on user context, goals, and observed patterns","activation":{"keywords":["every day","every morning","every week","routine","automate","remind me","check daily","monitor","recurring","schedule","habit","workflow","keep forgetting","always have to","repetitive","notifications","digest","review daily","weekly review"],"patterns":["I (always|usually|often|regularly) (check|do|look at|review)","every (morning|evening|week|day|monday|friday)","I (wish|want) (I|it) (could|would) (automatically|auto)","is there a way to (auto|schedule|set up)","can you (check|monitor|watch|track).*for me","I keep (forgetting|missing|having to)"],"tags":["automation","scheduling","personal-assistant","productivity"],"max_context_tokens":1500}},"isInternal":false,"tokens":2000,"sizeBytes":8953},{"name":"SKILL.md","path":"skills/security-review/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/security-review/SKILL.md","title":"security-review","category":"anthropic-skill","format":"markdown","content":"---\nname: security-review\nversion: 0.1.0\ndescription: Security audit for code changes and PRs — OWASP top 10, auth flows, data handling, secrets exposure, supply chain risks. Writes findings as actionable items.\nactivation:\n  keywords:\n    - security review\n    - security audit\n    - vulnerability\n    - OWASP\n    - injection\n    - XSS\n    - CSRF\n    - auth security\n    - secrets exposure\n    - supply chain\n    - CVE\n    - security check\n  patterns:\n    - \"(?i)(security|vulnerability|exploit) (review|audit|check|scan)\"\n    - \"(?i)check (for|this for) (vulnerabilities|security|injection|XSS)\"\n    - \"(?i)is (this|it) (secure|safe)\"\n    - \"(?i)(OWASP|CVE|CWE)\"\n  tags:\n    - developer\n    - security\n    - review\n  max_context_tokens: 2000\n---\n\n# Security Review\n\nYou are a security engineer reviewing code for vulnerabilities. Be thorough but practical — flag real risks, not theoretical ones. Every finding must include a concrete fix, not just a warning.\n\n## When to run\n\n- Before merging PRs with auth, crypto, input handling, or API changes\n- When user asks for a security check on specific code\n- As part of the review readiness pipeline (`/review-readiness`)\n\n## Review methodology\n\nWork through these categories systematically. For each finding, classify severity and auto-fix when possible.\n\n### 1. Injection (SQLi, XSS, Command injection, Template injection)\n- Trace all user input from entry point to database/shell/template\n- Check for parameterized queries, proper escaping, input validation\n- Look for `.unwrap()` on user input, string interpolation in queries\n\n### 2. Authentication & Authorization\n- Session tokens: secure generation, httpOnly, secure flags, rotation\n- Password handling: hashing algorithm, salt, timing-safe comparison\n- Authorization: IDOR checks, role enforcement at every endpoint\n- API keys: not hardcoded, not in logs, not in error messages\n\n### 3. Data exposure\n- Error messages: no stack traces, DB details, or internal paths in responses\n- Logging: no PII, tokens, or secrets in log output\n- API responses: no over-fetching (returning more fields than needed)\n- CORS: restrictive origins, not wildcard in production\n\n### 4. Cryptography\n- TLS: enforced, no downgrade paths\n- Encryption: AES-256-GCM or ChaCha20-Poly1305, no ECB mode\n- Key management: keys in env/secrets store, not in code\n- Random: crypto-secure RNG for tokens and keys, not `Math.random()`\n\n### 5. Supply chain\n- New dependencies: check for known CVEs, assess maintainer reputation\n- Lock files: committed, hashes verified\n- Build pipeline: no arbitrary code execution from dependencies at build time\n\n### 6. Secrets\n- Grep for hardcoded secrets: API keys, passwords, tokens, connection strings\n- Check `.env` files are gitignored\n- Verify secrets aren't logged, broadcast via SSE, or included in error messages\n\n## Output format\n\n```\n## Security Review — <scope>\n\n### Findings\n\n#### [P1/CRITICAL] <title>\n**Location:** <file:line>\n**Risk:** <what an attacker could do>\n**Fix:** <concrete code change>\n**Auto-fixed:** yes/no\n\n#### [P2/HIGH] <title>\n...\n\n#### [P3/MEDIUM] <title>\n...\n\n### No issues found in:\n- <category checked with no findings>\n\n### Health Score: <0-100>\n- P1 findings: <count> (each -30 points)\n- P2 findings: <count> (each -15 points)\n- P3 findings: <count> (each -5 points)\n```\n\n## Fix-first model\n\nFor obvious fixes (missing input validation, hardcoded secret, missing CSRF token):\n- Auto-fix and mark `[AUTO-FIXED]`\n- Still report the finding so the developer knows\n\nFor ambiguous issues (architectural auth decisions, risk tradeoffs):\n- Present the options with severity labels\n- Ask the user to decide\n\n## Tracking\n\nWrite findings to `projects/commitments/signals/pending/security-<slug>.md` with `immediacy: prompt` for P1, `batch` for P2/P3. P1 findings also create a commitment in `projects/commitments/open/` automatically with `urgency: critical`.\n\n## False positive management\n\nIf the user dismisses a finding, note the pattern in `projects/commitments/calibration.md` so it's not re-flagged:\n```\n- Security FP: <pattern description> — dismissed on <date>, reason: <why>\n```\n","frontmatter":{"name":"security-review","version":"0.1.0","description":"Security audit for code changes and PRs — OWASP top 10, auth flows, data handling, secrets exposure, supply chain risks. Writes findings as actionable items.","activation":{"keywords":["security review","security audit","vulnerability","OWASP","injection","XSS","CSRF","auth security","secrets exposure","supply chain","CVE","security check"],"patterns":["(?i)(security|vulnerability|exploit) (review|audit|check|scan)","(?i)check (for|this for) (vulnerabilities|security|injection|XSS)","(?i)is (this|it) (secure|safe)","(?i)(OWASP|CVE|CWE)"],"tags":["developer","security","review"],"max_context_tokens":2000}},"isInternal":false,"tokens":1032,"sizeBytes":4129},{"name":"SKILL.md","path":"skills/tech-debt-tracker/SKILL.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/skills/tech-debt-tracker/SKILL.md","title":"tech-debt-tracker","category":"anthropic-skill","format":"markdown","content":"---\nname: tech-debt-tracker\nversion: 0.1.0\ndescription: Detect and track technical debt from conversation and PR review comments. Resurface in weekly retros, promote to commitments when ready to fix.\nactivation:\n  keywords:\n    - tech debt\n    - technical debt\n    - hack\n    - hacky\n    - refactor later\n    - fixme\n    - workaround\n    - shortcut\n    - should refactor\n    - bandaid\n    - temporary fix\n    - show tech debt\n    - debt backlog\n  patterns:\n    - \"(?i)(this|that) is (a |kind of )?(hack|workaround|bandaid|band-aid|shortcut|kludge)\"\n    - \"(?i)(we |I )should (refactor|clean up|rewrite|fix) (this|that) (later|eventually|someday)\"\n    - \"(?i)(show|list|review) (tech )?debt\"\n    - \"(?i)add.*tech ?debt\"\n  tags:\n    - commitments\n    - developer\n    - tech-debt\n  max_context_tokens: 1200\n---\n\n# Tech Debt Tracker\n\nTrack technical debt from conversation and PR review comments. Debt items live in `projects/commitments/tech-debt/` and are resurfaced weekly.\n\n## Mode A: Passive detection\n\nWhen the user says something implying tech debt (\"this is a hack but it works\", \"we should really refactor the auth module\", \"adding another TODO\"), silently extract it.\n\n**Action:**\n1. Check for duplicates via `memory_search` in `projects/commitments/tech-debt/`.\n2. Write to `projects/commitments/tech-debt/<slug>.md`:\n\n```\n---\ntype: tech-debt\ndetected_at: <today YYYY-MM-DD>\nrepo: <current repo context if known, else null>\nseverity: <high|medium|low>\ncategory: <refactor|performance|security|testing|documentation|architecture>\nsource: conversation\nsource_pr: null\n---\n# <Brief title>\n<What the debt is and why it exists.>\n\n## Context\n<What prompted the shortcut — deadline, complexity, missing knowledge.>\n\n## Proposed fix\n<What a proper fix would look like, if discussed.>\n```\n\n**Severity rules:**\n- `high`: security shortcuts, data integrity risks, architectural violations\n- `medium`: code quality, missing tests, poor abstractions\n- `low`: style issues, minor workarounds, documentation gaps\n\n3. At a natural pause: \"Tracked tech debt: <brief description>.\"\n\nDo NOT interrupt conversation flow.\n\n## Mode B: PR review scan (used by triage mission)\n\nWhen the triage mission processes recently merged PRs, it should scan review comments for tech-debt patterns:\n- \"can be addressed in follow-up work\"\n- \"not blocking but should fix later\"\n- \"TODO: address in next PR\"\n- \"leaving for now\", \"good enough for now\"\n- \"nit: ... (not blocking)\"\n- \"tech debt\", \"hack\", \"workaround\" in review comments\n\nFor each match, create a tech-debt item with `source: pr-review` and `source_pr: owner/repo#123`.\n\n## Mode C: Explicit capture\n\nUser says: \"add tech debt: the caching layer needs TTL eviction.\"\n\nWrite directly to `projects/commitments/tech-debt/`, confirm briefly.\n\n## Mode D: Listing\n\nUser says: \"show tech debt\" or \"debt backlog\"\n\n**Action:**\n1. `memory_tree(\"projects/commitments/tech-debt/\", depth=1)` — list files (skip README.md)\n2. `memory_read` each for title, severity, detected_at, repo, source\n3. Display grouped by severity, then age:\n\n```\n## Tech Debt Backlog\n\n### High Severity\n- **<title>** (repo: <repo>, <N> days old, source: <conversation|PR #X>) — <category>\n\n### Medium Severity\n- ...\n\n### Low Severity\n- ...\n\n---\n<count> total. <count> chronic (30+ days).\nSay \"resolve <title>\" to mark fixed, or \"promote <title>\" to create a commitment.\nFor large items, use `/plan <description>` to create a structured fix plan.\n```\n\n## Mode E: Resolution\n\nUser says: \"resolved the caching TTL debt\"\n\nMove to `projects/commitments/resolved/` with original type preserved. Confirm.\n\n## Mode F: Promotion to commitment\n\nUser says: \"let's fix the auth refactor\" or \"promote the caching debt\"\n\nCreate commitment in `projects/commitments/open/` with `tags: [tech-debt]` and `resolution_path: agent_can_handle` if it's a code task. For complex items, suggest: \"This looks like a multi-step refactor. Use `/plan <description>` to create a structured fix plan.\"\n\n## Filename conventions\n\nSlugify: lowercase, hyphens, max 50 chars. Prefix with repo slug if known:\n- \"Auth module needs refactor\" in nearai/ironclaw → `nearai-ironclaw-auth-refactor.md`\n- Generic debt → `caching-ttl-eviction.md`\n","frontmatter":{"name":"tech-debt-tracker","version":"0.1.0","description":"Detect and track technical debt from conversation and PR review comments. Resurface in weekly retros, promote to commitments when ready to fix.","activation":{"keywords":["tech debt","technical debt","hack","hacky","refactor later","fixme","workaround","shortcut","should refactor","bandaid","temporary fix","show tech debt","debt backlog"],"patterns":["(?i)(this|that) is (a |kind of )?(hack|workaround|bandaid|band-aid|shortcut|kludge)","(?i)(we |I )should (refactor|clean up|rewrite|fix) (this|that) (later|eventually|someday)","(?i)(show|list|review) (tech )?debt","(?i)add.*tech ?debt"],"tags":["commitments","developer","tech-debt"],"max_context_tokens":1200}},"isInternal":false,"tokens":1112,"sizeBytes":4205},{"name":"http_get_replay.json","path":"tests/fixtures/llm_traces/tools/http_get_replay.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/http_get_replay.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/http_get_replay.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/http_get_replay.json)","tokens":300,"sizeBytes":214},{"name":"job_create_status.json","path":"tests/fixtures/llm_traces/tools/job_create_status.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/job_create_status.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/job_create_status.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/job_create_status.json)","tokens":300,"sizeBytes":218},{"name":"job_list_cancel.json","path":"tests/fixtures/llm_traces/tools/job_list_cancel.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/job_list_cancel.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/job_list_cancel.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/job_list_cancel.json)","tokens":300,"sizeBytes":214},{"name":"routine_create_grouped.json","path":"tests/fixtures/llm_traces/tools/routine_create_grouped.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_create_grouped.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_create_grouped.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_create_grouped.json)","tokens":300,"sizeBytes":228},{"name":"routine_create_list.json","path":"tests/fixtures/llm_traces/tools/routine_create_list.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_create_list.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_create_list.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_create_list.json)","tokens":300,"sizeBytes":222},{"name":"routine_history.json","path":"tests/fixtures/llm_traces/tools/routine_history.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_history.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_history.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_history.json)","tokens":300,"sizeBytes":214},{"name":"routine_manual_create_no_tools.json","path":"tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_manual_create_no_tools.json)","tokens":300,"sizeBytes":244},{"name":"routine_manual_create.json","path":"tests/fixtures/llm_traces/tools/routine_manual_create.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_manual_create.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_manual_create.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_manual_create.json)","tokens":300,"sizeBytes":226},{"name":"routine_system_event_emit_grouped.json","path":"tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_system_event_emit_grouped.json)","tokens":300,"sizeBytes":250},{"name":"routine_system_event_emit.json","path":"tests/fixtures/llm_traces/tools/routine_system_event_emit.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_system_event_emit.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_system_event_emit.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_system_event_emit.json)","tokens":300,"sizeBytes":234},{"name":"routine_update_delete.json","path":"tests/fixtures/llm_traces/tools/routine_update_delete.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_update_delete.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_update_delete.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_update_delete.json)","tokens":300,"sizeBytes":226},{"name":"routine_update_fail_delete_fallback.json","path":"tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/routine_update_fail_delete_fallback.json)","tokens":300,"sizeBytes":254},{"name":"skill_install_routine_webhook_sim.json","path":"tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/skill_install_routine_webhook_sim.json)","tokens":300,"sizeBytes":250},{"name":"time_parse_diff.json","path":"tests/fixtures/llm_traces/tools/time_parse_diff.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/time_parse_diff.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/time_parse_diff.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/time_parse_diff.json)","tokens":300,"sizeBytes":214},{"name":"time_parse_invalid.json","path":"tests/fixtures/llm_traces/tools/time_parse_invalid.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/time_parse_invalid.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/time_parse_invalid.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/time_parse_invalid.json)","tokens":300,"sizeBytes":220},{"name":"tool_info_discovery.json","path":"tests/fixtures/llm_traces/tools/tool_info_discovery.json","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/tool_info_discovery.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `tests/fixtures/llm_traces/tools/tool_info_discovery.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/tests/fixtures/llm_traces/tools/tool_info_discovery.json)","tokens":300,"sizeBytes":222},{"name":"CLAUDE.md","path":"CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/CLAUDE.md","title":"Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"# Claude Agent Guidelines & System Prompt\n\nPath: `CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/CLAUDE.md)","tokens":300,"sizeBytes":156},{"name":"README.md","path":"src/tools/README.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/src/tools/README.md","title":"tools Documentation","category":"plugin-manifest","format":"markdown","content":"# tools Documentation\n\nPath: `src/tools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/src/tools/README.md)","tokens":300,"sizeBytes":156},{"name":"add-sse-event.md","path":".claude/commands/add-sse-event.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/add-sse-event.md","title":"Command: /add-sse-event","category":"command-prompt","format":"markdown","content":"# Command: /add-sse-event\n\nPath: `.claude/commands/add-sse-event.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/add-sse-event.md)","tokens":300,"sizeBytes":188},{"name":"add-tool.md","path":".claude/commands/add-tool.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/add-tool.md","title":"Command: /add-tool","category":"command-prompt","format":"markdown","content":"# Command: /add-tool\n\nPath: `.claude/commands/add-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/add-tool.md)","tokens":300,"sizeBytes":173},{"name":"fix-issue.md","path":".claude/commands/fix-issue.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/fix-issue.md","title":"Command: /fix-issue","category":"command-prompt","format":"markdown","content":"# Command: /fix-issue\n\nPath: `.claude/commands/fix-issue.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/fix-issue.md)","tokens":300,"sizeBytes":176},{"name":"pr-shepherd.md","path":".claude/commands/pr-shepherd.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/pr-shepherd.md","title":"Command: /pr-shepherd","category":"command-prompt","format":"markdown","content":"# Command: /pr-shepherd\n\nPath: `.claude/commands/pr-shepherd.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/pr-shepherd.md)","tokens":300,"sizeBytes":182},{"name":"respond-pr.md","path":".claude/commands/respond-pr.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/respond-pr.md","title":"Command: /respond-pr","category":"command-prompt","format":"markdown","content":"# Command: /respond-pr\n\nPath: `.claude/commands/respond-pr.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/respond-pr.md)","tokens":300,"sizeBytes":179},{"name":"review-crate.md","path":".claude/commands/review-crate.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/review-crate.md","title":"Command: /review-crate","category":"command-prompt","format":"markdown","content":"# Command: /review-crate\n\nPath: `.claude/commands/review-crate.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/review-crate.md)","tokens":300,"sizeBytes":185},{"name":"review-pr.md","path":".claude/commands/review-pr.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/review-pr.md","title":"Command: /review-pr","category":"command-prompt","format":"markdown","content":"# Command: /review-pr\n\nPath: `.claude/commands/review-pr.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/review-pr.md)","tokens":300,"sizeBytes":176},{"name":"ship.md","path":".claude/commands/ship.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/ship.md","title":"Command: /ship","category":"command-prompt","format":"markdown","content":"# Command: /ship\n\nPath: `.claude/commands/ship.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/ship.md)","tokens":300,"sizeBytes":161},{"name":"trace.md","path":".claude/commands/trace.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/trace.md","title":"Command: /trace","category":"command-prompt","format":"markdown","content":"# Command: /trace\n\nPath: `.claude/commands/trace.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/trace.md)","tokens":300,"sizeBytes":164},{"name":"triage-issues.md","path":".claude/commands/triage-issues.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/triage-issues.md","title":"Command: /triage-issues","category":"command-prompt","format":"markdown","content":"# Command: /triage-issues\n\nPath: `.claude/commands/triage-issues.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/triage-issues.md)","tokens":300,"sizeBytes":188},{"name":"triage-prs.md","path":".claude/commands/triage-prs.md","rawUrl":"https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/triage-prs.md","title":"Command: /triage-prs","category":"command-prompt","format":"markdown","content":"# Command: /triage-prs\n\nPath: `.claude/commands/triage-prs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/commands/triage-prs.md)","tokens":300,"sizeBytes":179}],"systemPromptSnippet":"<yakaai_skills repo=\"nearai/ironclaw\">\n<!-- File: AGENTS.md (Tokens: ~300 | Category: root-instruction) -->\n# AI Agent Protocol & Instructions\n\nPath: `AGENTS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/AGENTS.md)\n\n<!-- File: .claude/rules/database.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/database.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/database.md)\n\n<!-- File: .claude/rules/doc-hygiene.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/doc-hygiene.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/doc-hygiene.md)\n\n<!-- File: .claude/rules/error-handling.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/error-handling.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/error-handling.md)\n\n<!-- File: .claude/rules/gateway-events.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/gateway-events.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/gateway-events.md)\n\n<!-- File: .claude/rules/lifecycle.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/lifecycle.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/lifecycle.md)\n\n<!-- File: .claude/rules/review-discipline.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/review-discipline.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/review-discipline.md)\n\n<!-- File: .claude/rules/safety-and-sandbox.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/safety-and-sandbox.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/safety-and-sandbox.md)\n\n<!-- File: .claude/rules/skills.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/skills.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/skills.md)\n\n<!-- File: .claude/rules/testing.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/testing.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/testing.md)\n\n<!-- File: .claude/rules/tool-evidence.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/tool-evidence.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/tool-evidence.md)\n\n<!-- File: .claude/rules/tools.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/tools.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/tools.md)\n\n<!-- File: .claude/rules/types.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Rules Skill\n\nPath: `.claude/rules/types.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/rules/types.md)\n\n<!-- File: .claude/skills/architecture-video/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# architecture-video\n\nPath: `.claude/skills/architecture-video/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/skills/architecture-video/SKILL.md)\n\n<!-- File: .claude/skills/mintlify-docs/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# mintlify-docs\n\nPath: `.claude/skills/mintlify-docs/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/.claude/skills/mintlify-docs/SKILL.md)\n\n<!-- File: docs/extensions/building-a-tool.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Extensions Skill\n\nPath: `docs/extensions/building-a-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/building-a-tool.md)\n\n<!-- File: docs/extensions/github.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Extensions Skill\n\nPath: `docs/extensions/github.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/github.md)\n\n<!-- File: docs/extensions/google/calendar.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Google Skill\n\nPath: `docs/extensions/google/calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/calendar.md)\n\n<!-- File: docs/extensions/google/docs.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Google Skill\n\nPath: `docs/extensions/google/docs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/docs.md)\n\n<!-- File: docs/extensions/google/drive.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Google Skill\n\nPath: `docs/extensions/google/drive.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/drive.md)\n\n<!-- File: docs/extensions/google/gmail.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Google Skill\n\nPath: `docs/extensions/google/gmail.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/gmail.md)\n\n<!-- File: docs/extensions/google/oauth-setup.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Google Skill\n\nPath: `docs/extensions/google/oauth-setup.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/oauth-setup.md)\n\n<!-- File: docs/extensions/google/sheets.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Google Skill\n\nPath: `docs/extensions/google/sheets.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/sheets.md)\n\n<!-- File: docs/extensions/google/slides.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Google Skill\n\nPath: `docs/extensions/google/slides.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/google/slides.md)\n\n<!-- File: docs/extensions/web-search.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Extensions Skill\n\nPath: `docs/extensions/web-search.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/extensions/web-search.md)\n\n<!-- File: docs/zh/extensions/building-a-tool.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Extensions Skill\n\nPath: `docs/zh/extensions/building-a-tool.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/building-a-tool.md)\n\n<!-- File: docs/zh/extensions/github.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Extensions Skill\n\nPath: `docs/zh/extensions/github.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/github.md)\n\n<!-- File: docs/zh/extensions/google-calendar.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Extensions Skill\n\nPath: `docs/zh/extensions/google-calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google-calendar.md)\n\n<!-- File: docs/zh/extensions/google/calendar.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Google Skill\n\nPath: `docs/zh/extensions/google/calendar.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/calendar.md)\n\n<!-- File: docs/zh/extensions/google/docs.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Google Skill\n\nPath: `docs/zh/extensions/google/docs.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/nearai/ironclaw/HEAD/docs/zh/extensions/google/docs.md)\n\n<!-- ... +76 more modular skills available via /api/skills/nearai/ironclaw?path={path} -->\n</yakaai_skills>"}