claudecode-omc 5.5.2 → 5.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -0
- package/bundled/manifest.json +3 -2
- package/bundled/upstream/ecc/.omc-source/bundle.json +23 -0
- package/bundled/upstream/ecc/.omc-source/last-plan-apply.json +439 -0
- package/bundled/upstream/ecc/.omc-source/manifests/.claude-plugin/marketplace.json +47 -0
- package/bundled/upstream/ecc/agents/a11y-architect.md +141 -0
- package/bundled/upstream/ecc/agents/architect.md +211 -0
- package/bundled/upstream/ecc/agents/build-error-resolver.md +114 -0
- package/bundled/upstream/ecc/agents/chief-of-staff.md +151 -0
- package/bundled/upstream/ecc/agents/code-architect.md +71 -0
- package/bundled/upstream/ecc/agents/code-explorer.md +69 -0
- package/bundled/upstream/ecc/agents/code-reviewer.md +237 -0
- package/bundled/upstream/ecc/agents/code-simplifier.md +47 -0
- package/bundled/upstream/ecc/agents/comment-analyzer.md +45 -0
- package/bundled/upstream/ecc/agents/conversation-analyzer.md +52 -0
- package/bundled/upstream/ecc/agents/cpp-build-resolver.md +90 -0
- package/bundled/upstream/ecc/agents/cpp-reviewer.md +72 -0
- package/bundled/upstream/ecc/agents/csharp-reviewer.md +101 -0
- package/bundled/upstream/ecc/agents/dart-build-resolver.md +201 -0
- package/bundled/upstream/ecc/agents/database-reviewer.md +91 -0
- package/bundled/upstream/ecc/agents/doc-updater.md +107 -0
- package/bundled/upstream/ecc/agents/docs-lookup.md +68 -0
- package/bundled/upstream/ecc/agents/e2e-runner.md +107 -0
- package/bundled/upstream/ecc/agents/flutter-reviewer.md +243 -0
- package/bundled/upstream/ecc/agents/gan-evaluator.md +209 -0
- package/bundled/upstream/ecc/agents/gan-generator.md +131 -0
- package/bundled/upstream/ecc/agents/gan-planner.md +99 -0
- package/bundled/upstream/ecc/agents/go-build-resolver.md +94 -0
- package/bundled/upstream/ecc/agents/go-reviewer.md +76 -0
- package/bundled/upstream/ecc/agents/harness-optimizer.md +35 -0
- package/bundled/upstream/ecc/agents/healthcare-reviewer.md +83 -0
- package/bundled/upstream/ecc/agents/java-build-resolver.md +153 -0
- package/bundled/upstream/ecc/agents/java-reviewer.md +92 -0
- package/bundled/upstream/ecc/agents/kotlin-build-resolver.md +118 -0
- package/bundled/upstream/ecc/agents/kotlin-reviewer.md +159 -0
- package/bundled/upstream/ecc/agents/loop-operator.md +36 -0
- package/bundled/upstream/ecc/agents/opensource-forker.md +198 -0
- package/bundled/upstream/ecc/agents/opensource-packager.md +249 -0
- package/bundled/upstream/ecc/agents/opensource-sanitizer.md +188 -0
- package/bundled/upstream/ecc/agents/performance-optimizer.md +446 -0
- package/bundled/upstream/ecc/agents/planner.md +212 -0
- package/bundled/upstream/ecc/agents/pr-test-analyzer.md +45 -0
- package/bundled/upstream/ecc/agents/python-reviewer.md +98 -0
- package/bundled/upstream/ecc/agents/pytorch-build-resolver.md +120 -0
- package/bundled/upstream/ecc/agents/refactor-cleaner.md +85 -0
- package/bundled/upstream/ecc/agents/rust-build-resolver.md +148 -0
- package/bundled/upstream/ecc/agents/rust-reviewer.md +94 -0
- package/bundled/upstream/ecc/agents/security-reviewer.md +108 -0
- package/bundled/upstream/ecc/agents/seo-specialist.md +62 -0
- package/bundled/upstream/ecc/agents/silent-failure-hunter.md +50 -0
- package/bundled/upstream/ecc/agents/tdd-guide.md +91 -0
- package/bundled/upstream/ecc/agents/type-design-analyzer.md +41 -0
- package/bundled/upstream/ecc/agents/typescript-reviewer.md +112 -0
- package/bundled/upstream/ecc/commands/agent-sort.md +23 -0
- package/bundled/upstream/ecc/commands/aside.md +164 -0
- package/bundled/upstream/ecc/commands/build-fix.md +62 -0
- package/bundled/upstream/ecc/commands/checkpoint.md +74 -0
- package/bundled/upstream/ecc/commands/claw.md +23 -0
- package/bundled/upstream/ecc/commands/code-review.md +289 -0
- package/bundled/upstream/ecc/commands/context-budget.md +23 -0
- package/bundled/upstream/ecc/commands/cpp-build.md +173 -0
- package/bundled/upstream/ecc/commands/cpp-review.md +132 -0
- package/bundled/upstream/ecc/commands/cpp-test.md +251 -0
- package/bundled/upstream/ecc/commands/devfleet.md +23 -0
- package/bundled/upstream/ecc/commands/docs.md +23 -0
- package/bundled/upstream/ecc/commands/e2e.md +268 -0
- package/bundled/upstream/ecc/commands/eval.md +23 -0
- package/bundled/upstream/ecc/commands/evolve.md +178 -0
- package/bundled/upstream/ecc/commands/feature-dev.md +49 -0
- package/bundled/upstream/ecc/commands/flutter-build.md +164 -0
- package/bundled/upstream/ecc/commands/flutter-review.md +116 -0
- package/bundled/upstream/ecc/commands/flutter-test.md +144 -0
- package/bundled/upstream/ecc/commands/gan-build.md +99 -0
- package/bundled/upstream/ecc/commands/gan-design.md +35 -0
- package/bundled/upstream/ecc/commands/go-build.md +183 -0
- package/bundled/upstream/ecc/commands/go-review.md +148 -0
- package/bundled/upstream/ecc/commands/go-test.md +268 -0
- package/bundled/upstream/ecc/commands/gradle-build.md +70 -0
- package/bundled/upstream/ecc/commands/harness-audit.md +73 -0
- package/bundled/upstream/ecc/commands/hookify-configure.md +14 -0
- package/bundled/upstream/ecc/commands/hookify-help.md +46 -0
- package/bundled/upstream/ecc/commands/hookify-list.md +21 -0
- package/bundled/upstream/ecc/commands/hookify.md +50 -0
- package/bundled/upstream/ecc/commands/instinct-export.md +66 -0
- package/bundled/upstream/ecc/commands/instinct-import.md +114 -0
- package/bundled/upstream/ecc/commands/instinct-status.md +59 -0
- package/bundled/upstream/ecc/commands/jira.md +106 -0
- package/bundled/upstream/ecc/commands/kotlin-build.md +174 -0
- package/bundled/upstream/ecc/commands/kotlin-review.md +140 -0
- package/bundled/upstream/ecc/commands/kotlin-test.md +312 -0
- package/bundled/upstream/ecc/commands/learn-eval.md +116 -0
- package/bundled/upstream/ecc/commands/learn.md +70 -0
- package/bundled/upstream/ecc/commands/loop-start.md +32 -0
- package/bundled/upstream/ecc/commands/loop-status.md +24 -0
- package/bundled/upstream/ecc/commands/model-route.md +26 -0
- package/bundled/upstream/ecc/commands/multi-backend.md +158 -0
- package/bundled/upstream/ecc/commands/multi-execute.md +315 -0
- package/bundled/upstream/ecc/commands/multi-frontend.md +158 -0
- package/bundled/upstream/ecc/commands/multi-plan.md +268 -0
- package/bundled/upstream/ecc/commands/multi-workflow.md +191 -0
- package/bundled/upstream/ecc/commands/orchestrate.md +135 -0
- package/bundled/upstream/ecc/commands/plan.md +117 -0
- package/bundled/upstream/ecc/commands/pm2.md +272 -0
- package/bundled/upstream/ecc/commands/projects.md +39 -0
- package/bundled/upstream/ecc/commands/promote.md +41 -0
- package/bundled/upstream/ecc/commands/prompt-optimize.md +23 -0
- package/bundled/upstream/ecc/commands/prp-commit.md +112 -0
- package/bundled/upstream/ecc/commands/prp-implement.md +385 -0
- package/bundled/upstream/ecc/commands/prp-plan.md +502 -0
- package/bundled/upstream/ecc/commands/prp-pr.md +184 -0
- package/bundled/upstream/ecc/commands/prp-prd.md +447 -0
- package/bundled/upstream/ecc/commands/prune.md +31 -0
- package/bundled/upstream/ecc/commands/python-review.md +297 -0
- package/bundled/upstream/ecc/commands/quality-gate.md +29 -0
- package/bundled/upstream/ecc/commands/refactor-clean.md +80 -0
- package/bundled/upstream/ecc/commands/resume-session.md +156 -0
- package/bundled/upstream/ecc/commands/review-pr.md +37 -0
- package/bundled/upstream/ecc/commands/rules-distill.md +20 -0
- package/bundled/upstream/ecc/commands/rust-build.md +187 -0
- package/bundled/upstream/ecc/commands/rust-review.md +142 -0
- package/bundled/upstream/ecc/commands/rust-test.md +308 -0
- package/bundled/upstream/ecc/commands/santa-loop.md +175 -0
- package/bundled/upstream/ecc/commands/save-session.md +275 -0
- package/bundled/upstream/ecc/commands/sessions.md +339 -0
- package/bundled/upstream/ecc/commands/setup-pm.md +80 -0
- package/bundled/upstream/ecc/commands/skill-create.md +174 -0
- package/bundled/upstream/ecc/commands/skill-health.md +54 -0
- package/bundled/upstream/ecc/commands/tdd.md +231 -0
- package/bundled/upstream/ecc/commands/test-coverage.md +69 -0
- package/bundled/upstream/ecc/commands/update-codemaps.md +72 -0
- package/bundled/upstream/ecc/commands/update-docs.md +84 -0
- package/bundled/upstream/ecc/commands/verify.md +23 -0
- package/bundled/upstream/ecc/hooks/README.md +237 -0
- package/bundled/upstream/ecc/hooks/hooks.json +330 -0
- package/bundled/upstream/ecc/skills/accessibility/SKILL.md +146 -0
- package/bundled/upstream/ecc/skills/agent-eval/SKILL.md +145 -0
- package/bundled/upstream/ecc/skills/agent-harness-construction/SKILL.md +73 -0
- package/bundled/upstream/ecc/skills/agent-introspection-debugging/SKILL.md +153 -0
- package/bundled/upstream/ecc/skills/agent-payment-x402/SKILL.md +178 -0
- package/bundled/upstream/ecc/skills/agent-sort/SKILL.md +215 -0
- package/bundled/upstream/ecc/skills/agentic-engineering/SKILL.md +63 -0
- package/bundled/upstream/ecc/skills/ai-first-engineering/SKILL.md +51 -0
- package/bundled/upstream/ecc/skills/ai-regression-testing/SKILL.md +385 -0
- package/bundled/upstream/ecc/skills/android-clean-architecture/SKILL.md +339 -0
- package/bundled/upstream/ecc/skills/api-connector-builder/SKILL.md +120 -0
- package/bundled/upstream/ecc/skills/api-design/SKILL.md +523 -0
- package/bundled/upstream/ecc/skills/architecture-decision-records/SKILL.md +179 -0
- package/bundled/upstream/ecc/skills/article-writing/SKILL.md +79 -0
- package/bundled/upstream/ecc/skills/automation-audit-ops/SKILL.md +142 -0
- package/bundled/upstream/ecc/skills/autonomous-agent-harness/SKILL.md +267 -0
- package/bundled/upstream/ecc/skills/autonomous-loops/SKILL.md +610 -0
- package/bundled/upstream/ecc/skills/backend-patterns/SKILL.md +598 -0
- package/bundled/upstream/ecc/skills/benchmark/SKILL.md +93 -0
- package/bundled/upstream/ecc/skills/blueprint/SKILL.md +105 -0
- package/bundled/upstream/ecc/skills/brand-voice/SKILL.md +97 -0
- package/bundled/upstream/ecc/skills/brand-voice/references/voice-profile-schema.md +55 -0
- package/bundled/upstream/ecc/skills/browser-qa/SKILL.md +87 -0
- package/bundled/upstream/ecc/skills/bun-runtime/SKILL.md +84 -0
- package/bundled/upstream/ecc/skills/canary-watch/SKILL.md +99 -0
- package/bundled/upstream/ecc/skills/carrier-relationship-management/SKILL.md +212 -0
- package/bundled/upstream/ecc/skills/ck/SKILL.md +147 -0
- package/bundled/upstream/ecc/skills/ck/commands/forget.mjs +44 -0
- package/bundled/upstream/ecc/skills/ck/commands/info.mjs +24 -0
- package/bundled/upstream/ecc/skills/ck/commands/init.mjs +143 -0
- package/bundled/upstream/ecc/skills/ck/commands/list.mjs +40 -0
- package/bundled/upstream/ecc/skills/ck/commands/migrate.mjs +202 -0
- package/bundled/upstream/ecc/skills/ck/commands/resume.mjs +36 -0
- package/bundled/upstream/ecc/skills/ck/commands/save.mjs +210 -0
- package/bundled/upstream/ecc/skills/ck/commands/shared.mjs +387 -0
- package/bundled/upstream/ecc/skills/ck/hooks/session-start.mjs +224 -0
- package/bundled/upstream/ecc/skills/claude-api/SKILL.md +337 -0
- package/bundled/upstream/ecc/skills/claude-devfleet/SKILL.md +103 -0
- package/bundled/upstream/ecc/skills/click-path-audit/SKILL.md +244 -0
- package/bundled/upstream/ecc/skills/clickhouse-io/SKILL.md +439 -0
- package/bundled/upstream/ecc/skills/code-tour/SKILL.md +236 -0
- package/bundled/upstream/ecc/skills/codebase-onboarding/SKILL.md +233 -0
- package/bundled/upstream/ecc/skills/coding-standards/SKILL.md +549 -0
- package/bundled/upstream/ecc/skills/compose-multiplatform-patterns/SKILL.md +299 -0
- package/bundled/upstream/ecc/skills/configure-ecc/SKILL.md +367 -0
- package/bundled/upstream/ecc/skills/connections-optimizer/SKILL.md +189 -0
- package/bundled/upstream/ecc/skills/content-engine/SKILL.md +131 -0
- package/bundled/upstream/ecc/skills/content-hash-cache-pattern/SKILL.md +161 -0
- package/bundled/upstream/ecc/skills/context-budget/SKILL.md +135 -0
- package/bundled/upstream/ecc/skills/continuous-agent-loop/SKILL.md +45 -0
- package/bundled/upstream/ecc/skills/continuous-learning/SKILL.md +123 -0
- package/bundled/upstream/ecc/skills/continuous-learning/config.json +18 -0
- package/bundled/upstream/ecc/skills/continuous-learning/evaluate-session.sh +69 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/SKILL.md +346 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer-loop.sh +282 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/observer.md +198 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/session-guardian.sh +150 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/agents/start-observer.sh +244 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/config.json +8 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/hooks/observe.sh +460 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/detect-project.sh +243 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/instinct-cli.py +1426 -0
- package/bundled/upstream/ecc/skills/continuous-learning-v2/scripts/test_parse_instinct.py +984 -0
- package/bundled/upstream/ecc/skills/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/bundled/upstream/ecc/skills/council/SKILL.md +203 -0
- package/bundled/upstream/ecc/skills/cpp-coding-standards/SKILL.md +723 -0
- package/bundled/upstream/ecc/skills/cpp-testing/SKILL.md +324 -0
- package/bundled/upstream/ecc/skills/crosspost/SKILL.md +111 -0
- package/bundled/upstream/ecc/skills/csharp-testing/SKILL.md +321 -0
- package/bundled/upstream/ecc/skills/customer-billing-ops/SKILL.md +140 -0
- package/bundled/upstream/ecc/skills/customs-trade-compliance/SKILL.md +263 -0
- package/bundled/upstream/ecc/skills/dart-flutter-patterns/SKILL.md +563 -0
- package/bundled/upstream/ecc/skills/dashboard-builder/SKILL.md +108 -0
- package/bundled/upstream/ecc/skills/data-scraper-agent/SKILL.md +764 -0
- package/bundled/upstream/ecc/skills/database-migrations/SKILL.md +429 -0
- package/bundled/upstream/ecc/skills/deep-research/SKILL.md +155 -0
- package/bundled/upstream/ecc/skills/defi-amm-security/SKILL.md +160 -0
- package/bundled/upstream/ecc/skills/deployment-patterns/SKILL.md +427 -0
- package/bundled/upstream/ecc/skills/design-system/SKILL.md +82 -0
- package/bundled/upstream/ecc/skills/django-patterns/SKILL.md +734 -0
- package/bundled/upstream/ecc/skills/django-security/SKILL.md +593 -0
- package/bundled/upstream/ecc/skills/django-tdd/SKILL.md +729 -0
- package/bundled/upstream/ecc/skills/django-verification/SKILL.md +469 -0
- package/bundled/upstream/ecc/skills/dmux-workflows/SKILL.md +191 -0
- package/bundled/upstream/ecc/skills/docker-patterns/SKILL.md +364 -0
- package/bundled/upstream/ecc/skills/documentation-lookup/SKILL.md +90 -0
- package/bundled/upstream/ecc/skills/dotnet-patterns/SKILL.md +321 -0
- package/bundled/upstream/ecc/skills/e2e-testing/SKILL.md +326 -0
- package/bundled/upstream/ecc/skills/ecc-tools-cost-audit/SKILL.md +160 -0
- package/bundled/upstream/ecc/skills/email-ops/SKILL.md +121 -0
- package/bundled/upstream/ecc/skills/energy-procurement/SKILL.md +228 -0
- package/bundled/upstream/ecc/skills/enterprise-agent-ops/SKILL.md +50 -0
- package/bundled/upstream/ecc/skills/eval-harness/SKILL.md +270 -0
- package/bundled/upstream/ecc/skills/evm-token-decimals/SKILL.md +130 -0
- package/bundled/upstream/ecc/skills/exa-search/SKILL.md +103 -0
- package/bundled/upstream/ecc/skills/fal-ai-media/SKILL.md +284 -0
- package/bundled/upstream/ecc/skills/finance-billing-ops/SKILL.md +127 -0
- package/bundled/upstream/ecc/skills/flutter-dart-code-review/SKILL.md +435 -0
- package/bundled/upstream/ecc/skills/foundation-models-on-device/SKILL.md +243 -0
- package/bundled/upstream/ecc/skills/frontend-design/SKILL.md +145 -0
- package/bundled/upstream/ecc/skills/frontend-patterns/SKILL.md +642 -0
- package/bundled/upstream/ecc/skills/frontend-slides/SKILL.md +184 -0
- package/bundled/upstream/ecc/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/bundled/upstream/ecc/skills/gan-style-harness/SKILL.md +278 -0
- package/bundled/upstream/ecc/skills/gateguard/SKILL.md +121 -0
- package/bundled/upstream/ecc/skills/git-workflow/SKILL.md +715 -0
- package/bundled/upstream/ecc/skills/github-ops/SKILL.md +144 -0
- package/bundled/upstream/ecc/skills/golang-patterns/SKILL.md +674 -0
- package/bundled/upstream/ecc/skills/golang-testing/SKILL.md +720 -0
- package/bundled/upstream/ecc/skills/google-workspace-ops/SKILL.md +95 -0
- package/bundled/upstream/ecc/skills/healthcare-cdss-patterns/SKILL.md +245 -0
- package/bundled/upstream/ecc/skills/healthcare-emr-patterns/SKILL.md +159 -0
- package/bundled/upstream/ecc/skills/healthcare-eval-harness/SKILL.md +207 -0
- package/bundled/upstream/ecc/skills/healthcare-phi-compliance/SKILL.md +145 -0
- package/bundled/upstream/ecc/skills/hexagonal-architecture/SKILL.md +276 -0
- package/bundled/upstream/ecc/skills/hipaa-compliance/SKILL.md +78 -0
- package/bundled/upstream/ecc/skills/hookify-rules/SKILL.md +128 -0
- package/bundled/upstream/ecc/skills/inventory-demand-planning/SKILL.md +247 -0
- package/bundled/upstream/ecc/skills/investor-materials/SKILL.md +96 -0
- package/bundled/upstream/ecc/skills/investor-outreach/SKILL.md +91 -0
- package/bundled/upstream/ecc/skills/iterative-retrieval/SKILL.md +211 -0
- package/bundled/upstream/ecc/skills/java-coding-standards/SKILL.md +147 -0
- package/bundled/upstream/ecc/skills/jira-integration/SKILL.md +293 -0
- package/bundled/upstream/ecc/skills/jpa-patterns/SKILL.md +151 -0
- package/bundled/upstream/ecc/skills/knowledge-ops/SKILL.md +154 -0
- package/bundled/upstream/ecc/skills/kotlin-coroutines-flows/SKILL.md +284 -0
- package/bundled/upstream/ecc/skills/kotlin-exposed-patterns/SKILL.md +719 -0
- package/bundled/upstream/ecc/skills/kotlin-ktor-patterns/SKILL.md +689 -0
- package/bundled/upstream/ecc/skills/kotlin-patterns/SKILL.md +711 -0
- package/bundled/upstream/ecc/skills/kotlin-testing/SKILL.md +824 -0
- package/bundled/upstream/ecc/skills/laravel-patterns/SKILL.md +415 -0
- package/bundled/upstream/ecc/skills/laravel-plugin-discovery/SKILL.md +229 -0
- package/bundled/upstream/ecc/skills/laravel-security/SKILL.md +285 -0
- package/bundled/upstream/ecc/skills/laravel-tdd/SKILL.md +283 -0
- package/bundled/upstream/ecc/skills/laravel-verification/SKILL.md +179 -0
- package/bundled/upstream/ecc/skills/lead-intelligence/SKILL.md +321 -0
- package/bundled/upstream/ecc/skills/lead-intelligence/agents/enrichment-agent.md +85 -0
- package/bundled/upstream/ecc/skills/lead-intelligence/agents/mutual-mapper.md +75 -0
- package/bundled/upstream/ecc/skills/lead-intelligence/agents/outreach-drafter.md +98 -0
- package/bundled/upstream/ecc/skills/lead-intelligence/agents/signal-scorer.md +60 -0
- package/bundled/upstream/ecc/skills/liquid-glass-design/SKILL.md +279 -0
- package/bundled/upstream/ecc/skills/llm-trading-agent-security/SKILL.md +146 -0
- package/bundled/upstream/ecc/skills/logistics-exception-management/SKILL.md +222 -0
- package/bundled/upstream/ecc/skills/manim-video/SKILL.md +89 -0
- package/bundled/upstream/ecc/skills/manim-video/assets/network_graph_scene.py +52 -0
- package/bundled/upstream/ecc/skills/market-research/SKILL.md +75 -0
- package/bundled/upstream/ecc/skills/mcp-server-patterns/SKILL.md +69 -0
- package/bundled/upstream/ecc/skills/messages-ops/SKILL.md +104 -0
- package/bundled/upstream/ecc/skills/nanoclaw-repl/SKILL.md +33 -0
- package/bundled/upstream/ecc/skills/nestjs-patterns/SKILL.md +230 -0
- package/bundled/upstream/ecc/skills/nextjs-turbopack/SKILL.md +44 -0
- package/bundled/upstream/ecc/skills/nodejs-keccak256/SKILL.md +102 -0
- package/bundled/upstream/ecc/skills/nutrient-document-processing/SKILL.md +167 -0
- package/bundled/upstream/ecc/skills/nuxt4-patterns/SKILL.md +100 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/SKILL.md +296 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/gacha.py +224 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/gacha.sh +5 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/references/avatar-style.md +124 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/references/boundary-rules.md +53 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/references/error-handling.md +53 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/references/identity-tension.md +48 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/references/naming-system.md +39 -0
- package/bundled/upstream/ecc/skills/openclaw-persona-forge/references/output-template.md +166 -0
- package/bundled/upstream/ecc/skills/opensource-pipeline/SKILL.md +255 -0
- package/bundled/upstream/ecc/skills/perl-patterns/SKILL.md +504 -0
- package/bundled/upstream/ecc/skills/perl-security/SKILL.md +503 -0
- package/bundled/upstream/ecc/skills/perl-testing/SKILL.md +475 -0
- package/bundled/upstream/ecc/skills/plankton-code-quality/SKILL.md +236 -0
- package/bundled/upstream/ecc/skills/postgres-patterns/SKILL.md +147 -0
- package/bundled/upstream/ecc/skills/product-capability/SKILL.md +141 -0
- package/bundled/upstream/ecc/skills/product-lens/SKILL.md +92 -0
- package/bundled/upstream/ecc/skills/production-scheduling/SKILL.md +238 -0
- package/bundled/upstream/ecc/skills/project-flow-ops/SKILL.md +111 -0
- package/bundled/upstream/ecc/skills/prompt-optimizer/SKILL.md +397 -0
- package/bundled/upstream/ecc/skills/python-patterns/SKILL.md +750 -0
- package/bundled/upstream/ecc/skills/python-testing/SKILL.md +816 -0
- package/bundled/upstream/ecc/skills/pytorch-patterns/SKILL.md +396 -0
- package/bundled/upstream/ecc/skills/quality-nonconformance/SKILL.md +260 -0
- package/bundled/upstream/ecc/skills/ralphinho-rfc-pipeline/SKILL.md +67 -0
- package/bundled/upstream/ecc/skills/regex-vs-llm-structured-text/SKILL.md +220 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/SKILL.md +43 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/3d.md +86 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/animations.md +29 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/assets/charts-bar-chart.tsx +173 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/assets/text-animations-typewriter.tsx +100 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/assets.md +78 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/audio.md +172 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/calculate-metadata.md +104 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/can-decode.md +75 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/charts.md +58 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/compositions.md +146 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/display-captions.md +126 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/extract-frames.md +229 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/fonts.md +152 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/get-audio-duration.md +58 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/get-video-dimensions.md +68 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/get-video-duration.md +58 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/gifs.md +138 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/images.md +130 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/import-srt-captions.md +67 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/lottie.md +67 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/measuring-dom-nodes.md +34 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/measuring-text.md +143 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/sequencing.md +106 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/tailwind.md +11 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/text-animations.md +20 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/timing.md +179 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/transcribe-captions.md +19 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/transitions.md +122 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/trimming.md +52 -0
- package/bundled/upstream/ecc/skills/remotion-video-creation/rules/videos.md +171 -0
- package/bundled/upstream/ecc/skills/repo-scan/SKILL.md +78 -0
- package/bundled/upstream/ecc/skills/research-ops/SKILL.md +112 -0
- package/bundled/upstream/ecc/skills/returns-reverse-logistics/SKILL.md +240 -0
- package/bundled/upstream/ecc/skills/rules-distill/SKILL.md +264 -0
- package/bundled/upstream/ecc/skills/rules-distill/scripts/scan-rules.sh +58 -0
- package/bundled/upstream/ecc/skills/rules-distill/scripts/scan-skills.sh +129 -0
- package/bundled/upstream/ecc/skills/rust-patterns/SKILL.md +499 -0
- package/bundled/upstream/ecc/skills/rust-testing/SKILL.md +500 -0
- package/bundled/upstream/ecc/skills/safety-guard/SKILL.md +75 -0
- package/bundled/upstream/ecc/skills/santa-method/SKILL.md +306 -0
- package/bundled/upstream/ecc/skills/search-first/SKILL.md +161 -0
- package/bundled/upstream/ecc/skills/security-bounty-hunter/SKILL.md +99 -0
- package/bundled/upstream/ecc/skills/security-review/SKILL.md +495 -0
- package/bundled/upstream/ecc/skills/security-review/cloud-infrastructure-security.md +361 -0
- package/bundled/upstream/ecc/skills/security-scan/SKILL.md +165 -0
- package/bundled/upstream/ecc/skills/seo/SKILL.md +154 -0
- package/bundled/upstream/ecc/skills/skill-comply/SKILL.md +58 -0
- package/bundled/upstream/ecc/skills/skill-comply/fixtures/compliant_trace.jsonl +5 -0
- package/bundled/upstream/ecc/skills/skill-comply/fixtures/noncompliant_trace.jsonl +3 -0
- package/bundled/upstream/ecc/skills/skill-comply/fixtures/tdd_spec.yaml +44 -0
- package/bundled/upstream/ecc/skills/skill-comply/prompts/classifier.md +24 -0
- package/bundled/upstream/ecc/skills/skill-comply/prompts/scenario_generator.md +62 -0
- package/bundled/upstream/ecc/skills/skill-comply/prompts/spec_generator.md +42 -0
- package/bundled/upstream/ecc/skills/skill-comply/pyproject.toml +15 -0
- package/bundled/upstream/ecc/skills/skill-comply/scripts/__init__.py +0 -0
- package/bundled/upstream/ecc/skills/skill-comply/scripts/classifier.py +85 -0
- package/bundled/upstream/ecc/skills/skill-comply/scripts/grader.py +124 -0
- package/bundled/upstream/ecc/skills/skill-comply/scripts/parser.py +107 -0
- package/bundled/upstream/ecc/skills/skill-comply/scripts/report.py +170 -0
- package/bundled/upstream/ecc/skills/skill-comply/scripts/run.py +127 -0
- package/bundled/upstream/ecc/skills/skill-comply/scripts/runner.py +161 -0
- package/bundled/upstream/ecc/skills/skill-comply/scripts/scenario_generator.py +70 -0
- package/bundled/upstream/ecc/skills/skill-comply/scripts/spec_generator.py +72 -0
- package/bundled/upstream/ecc/skills/skill-comply/scripts/utils.py +13 -0
- package/bundled/upstream/ecc/skills/skill-comply/tests/test_grader.py +197 -0
- package/bundled/upstream/ecc/skills/skill-comply/tests/test_parser.py +90 -0
- package/bundled/upstream/ecc/skills/skill-stocktake/SKILL.md +193 -0
- package/bundled/upstream/ecc/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/bundled/upstream/ecc/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/bundled/upstream/ecc/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/bundled/upstream/ecc/skills/social-graph-ranker/SKILL.md +154 -0
- package/bundled/upstream/ecc/skills/springboot-patterns/SKILL.md +314 -0
- package/bundled/upstream/ecc/skills/springboot-security/SKILL.md +272 -0
- package/bundled/upstream/ecc/skills/springboot-tdd/SKILL.md +158 -0
- package/bundled/upstream/ecc/skills/springboot-verification/SKILL.md +231 -0
- package/bundled/upstream/ecc/skills/strategic-compact/SKILL.md +131 -0
- package/bundled/upstream/ecc/skills/strategic-compact/suggest-compact.sh +54 -0
- package/bundled/upstream/ecc/skills/swift-actor-persistence/SKILL.md +143 -0
- package/bundled/upstream/ecc/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/bundled/upstream/ecc/skills/swift-protocol-di-testing/SKILL.md +190 -0
- package/bundled/upstream/ecc/skills/swiftui-patterns/SKILL.md +259 -0
- package/bundled/upstream/ecc/skills/tdd-workflow/SKILL.md +463 -0
- package/bundled/upstream/ecc/skills/team-builder/SKILL.md +168 -0
- package/bundled/upstream/ecc/skills/terminal-ops/SKILL.md +109 -0
- package/bundled/upstream/ecc/skills/token-budget-advisor/SKILL.md +133 -0
- package/bundled/upstream/ecc/skills/ui-demo/SKILL.md +465 -0
- package/bundled/upstream/ecc/skills/unified-notifications-ops/SKILL.md +187 -0
- package/bundled/upstream/ecc/skills/verification-loop/SKILL.md +126 -0
- package/bundled/upstream/ecc/skills/video-editing/SKILL.md +310 -0
- package/bundled/upstream/ecc/skills/videodb/SKILL.md +374 -0
- package/bundled/upstream/ecc/skills/videodb/reference/api-reference.md +550 -0
- package/bundled/upstream/ecc/skills/videodb/reference/capture-reference.md +407 -0
- package/bundled/upstream/ecc/skills/videodb/reference/capture.md +101 -0
- package/bundled/upstream/ecc/skills/videodb/reference/editor.md +443 -0
- package/bundled/upstream/ecc/skills/videodb/reference/generative.md +331 -0
- package/bundled/upstream/ecc/skills/videodb/reference/rtstream-reference.md +564 -0
- package/bundled/upstream/ecc/skills/videodb/reference/rtstream.md +65 -0
- package/bundled/upstream/ecc/skills/videodb/reference/search.md +230 -0
- package/bundled/upstream/ecc/skills/videodb/reference/streaming.md +406 -0
- package/bundled/upstream/ecc/skills/videodb/reference/use-cases.md +118 -0
- package/bundled/upstream/ecc/skills/videodb/scripts/ws_listener.py +282 -0
- package/bundled/upstream/ecc/skills/visa-doc-translate/README.md +86 -0
- package/bundled/upstream/ecc/skills/visa-doc-translate/SKILL.md +117 -0
- package/bundled/upstream/ecc/skills/workspace-surface-audit/SKILL.md +125 -0
- package/bundled/upstream/ecc/skills/x-api/SKILL.md +230 -0
- package/bundled/upstream/superpowers/.omc-source/last-plan-apply.json +22 -0
- package/package.json +3 -1
- package/src/catalog/source-catalog.js +391 -0
- package/src/cli/artifact.js +3 -2
- package/src/cli/doctor.js +25 -4
- package/src/cli/index.js +19 -0
- package/src/cli/plan.js +220 -0
- package/src/cli/setup.js +209 -12
- package/src/cli/source.js +110 -3
- package/src/config/paths.js +31 -0
- package/src/config/sources.js +103 -10
- package/src/merge/hook-merger.js +1 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: outreach-drafter
|
|
3
|
+
description: Generates personalized outreach messages for qualified leads. Creates warm intro requests, cold emails, X DMs, and follow-up sequences using enriched profile data.
|
|
4
|
+
tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Grep
|
|
7
|
+
model: sonnet
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Outreach Drafter Agent
|
|
11
|
+
|
|
12
|
+
You generate personalized outreach messages using enriched lead data.
|
|
13
|
+
|
|
14
|
+
## Task
|
|
15
|
+
|
|
16
|
+
Given enriched prospect profiles and warm path data, draft outreach messages that are short, specific, and actionable.
|
|
17
|
+
|
|
18
|
+
## Message Types
|
|
19
|
+
|
|
20
|
+
### 1. Warm Intro Request (to mutual)
|
|
21
|
+
|
|
22
|
+
Template structure:
|
|
23
|
+
- Greeting (first name, casual)
|
|
24
|
+
- The ask (1 sentence — can you intro me to [target])
|
|
25
|
+
- Why it's relevant (1 sentence — what you're building and why target cares)
|
|
26
|
+
- Offer to send forwardable blurb
|
|
27
|
+
- Sign off
|
|
28
|
+
|
|
29
|
+
Max length: 60 words.
|
|
30
|
+
|
|
31
|
+
### 2. Cold Email (to target directly)
|
|
32
|
+
|
|
33
|
+
Template structure:
|
|
34
|
+
- Subject: specific, under 8 words
|
|
35
|
+
- Opener: reference something specific about them (recent post, announcement, thesis)
|
|
36
|
+
- Pitch: what you do and why they specifically should care (2 sentences max)
|
|
37
|
+
- Ask: one concrete low-friction next step
|
|
38
|
+
- Sign off with one credibility anchor
|
|
39
|
+
|
|
40
|
+
Max length: 80 words.
|
|
41
|
+
|
|
42
|
+
### 3. X DM (to target)
|
|
43
|
+
|
|
44
|
+
Even shorter than email. 2-3 sentences max.
|
|
45
|
+
- Reference a specific post or take of theirs
|
|
46
|
+
- One line on why you're reaching out
|
|
47
|
+
- Clear ask
|
|
48
|
+
|
|
49
|
+
Max length: 40 words.
|
|
50
|
+
|
|
51
|
+
### 4. Follow-Up Sequence
|
|
52
|
+
|
|
53
|
+
- Day 4-5: short follow-up with one new data point
|
|
54
|
+
- Day 10-12: final follow-up with a clean close
|
|
55
|
+
- No more than 3 total touches unless user specifies otherwise
|
|
56
|
+
|
|
57
|
+
## Writing Rules
|
|
58
|
+
|
|
59
|
+
1. **Personalize or don't send.** Every message must reference something specific to the recipient.
|
|
60
|
+
2. **Short sentences.** No compound sentences with multiple clauses.
|
|
61
|
+
3. **Lowercase casual.** Match modern professional communication style.
|
|
62
|
+
4. **No AI slop.** Never use: "game-changer", "deep dive", "the key insight", "leverage", "synergy", "at the forefront of".
|
|
63
|
+
5. **Data over adjectives.** Use specific numbers, names, and facts instead of generic praise.
|
|
64
|
+
6. **One ask per message.** Never combine multiple requests.
|
|
65
|
+
7. **No fake familiarity.** Don't say "loved your talk" unless you can cite which talk.
|
|
66
|
+
|
|
67
|
+
## Personalization Sources (from enrichment data)
|
|
68
|
+
|
|
69
|
+
Use these hooks in order of preference:
|
|
70
|
+
1. Their recent post or take you genuinely agree with
|
|
71
|
+
2. A mutual connection who can vouch
|
|
72
|
+
3. Their company's recent milestone (funding, launch, hire)
|
|
73
|
+
4. A specific piece of their thesis or writing
|
|
74
|
+
5. Shared event attendance or community membership
|
|
75
|
+
|
|
76
|
+
## Output Format
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
TO: [name] ([email or @handle])
|
|
80
|
+
VIA: [direct / warm intro through @mutual]
|
|
81
|
+
TYPE: [cold email / DM / intro request]
|
|
82
|
+
|
|
83
|
+
Subject: [if email]
|
|
84
|
+
|
|
85
|
+
[message body]
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
Personalization notes:
|
|
89
|
+
- Referenced: [what specific thing was used]
|
|
90
|
+
- Warm path: [how connected]
|
|
91
|
+
- Confidence: [high/medium/low]
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Constraints
|
|
95
|
+
|
|
96
|
+
- Never generate messages that could be mistaken for spam.
|
|
97
|
+
- Never include false claims about the user's product or traction.
|
|
98
|
+
- If enrichment data is thin, flag the message as "needs manual personalization" rather than faking specifics.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: signal-scorer
|
|
3
|
+
description: Searches and ranks prospects by relevance signals across X, Exa, and LinkedIn. Assigns weighted scores based on role, industry, activity, influence, and location.
|
|
4
|
+
tools:
|
|
5
|
+
- Bash
|
|
6
|
+
- Read
|
|
7
|
+
- Grep
|
|
8
|
+
- Glob
|
|
9
|
+
- WebSearch
|
|
10
|
+
- WebFetch
|
|
11
|
+
model: sonnet
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Signal Scorer Agent
|
|
15
|
+
|
|
16
|
+
You are a lead intelligence agent that finds and scores high-value prospects.
|
|
17
|
+
|
|
18
|
+
## Task
|
|
19
|
+
|
|
20
|
+
Given target verticals, roles, and locations from the user, search for the highest-signal people using available tools.
|
|
21
|
+
|
|
22
|
+
## Scoring Rubric
|
|
23
|
+
|
|
24
|
+
| Signal | Weight | How to Assess |
|
|
25
|
+
|--------|--------|---------------|
|
|
26
|
+
| Role/title alignment | 30% | Is this person a decision maker in the target space? |
|
|
27
|
+
| Industry match | 25% | Does their company/work directly relate to target vertical? |
|
|
28
|
+
| Recent activity | 20% | Have they posted, published, or spoken about the topic recently? |
|
|
29
|
+
| Influence | 10% | Follower count, publication reach, speaking engagements |
|
|
30
|
+
| Location proximity | 10% | Same city/timezone as the user? |
|
|
31
|
+
| Engagement overlap | 5% | Have they interacted with the user's content or network? |
|
|
32
|
+
|
|
33
|
+
## Search Strategy
|
|
34
|
+
|
|
35
|
+
1. Use Exa web search with category filters for company and person discovery
|
|
36
|
+
2. Use X API search for active voices in the target verticals
|
|
37
|
+
3. Cross-reference to deduplicate and merge profiles
|
|
38
|
+
4. Score each prospect on the 0-100 scale using the rubric above
|
|
39
|
+
5. Return the top N prospects sorted by score
|
|
40
|
+
|
|
41
|
+
## Output Format
|
|
42
|
+
|
|
43
|
+
Return a structured list:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
PROSPECT #1 (Score: 94)
|
|
47
|
+
Name: [full name]
|
|
48
|
+
Handle: @[x_handle]
|
|
49
|
+
Role: [current title] @ [company]
|
|
50
|
+
Location: [city]
|
|
51
|
+
Industry: [vertical match]
|
|
52
|
+
Recent Signal: [what they posted/did recently that's relevant]
|
|
53
|
+
Score Breakdown: role=28/30, industry=24/25, activity=20/20, influence=8/10, location=10/10, engagement=4/5
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Constraints
|
|
57
|
+
|
|
58
|
+
- Do not fabricate profile data. Only report what you can verify from search results.
|
|
59
|
+
- If a person appears in multiple sources, merge into one entry.
|
|
60
|
+
- Flag low-confidence scores where data is sparse.
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: liquid-glass-design
|
|
3
|
+
description: iOS 26 Liquid Glass design system — dynamic glass material with blur, reflection, and interactive morphing for SwiftUI, UIKit, and WidgetKit.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Liquid Glass Design System (iOS 26)
|
|
7
|
+
|
|
8
|
+
Patterns for implementing Apple's Liquid Glass — a dynamic material that blurs content behind it, reflects color and light from surrounding content, and reacts to touch and pointer interactions. Covers SwiftUI, UIKit, and WidgetKit integration.
|
|
9
|
+
|
|
10
|
+
## When to Activate
|
|
11
|
+
|
|
12
|
+
- Building or updating apps for iOS 26+ with the new design language
|
|
13
|
+
- Implementing glass-style buttons, cards, toolbars, or containers
|
|
14
|
+
- Creating morphing transitions between glass elements
|
|
15
|
+
- Applying Liquid Glass effects to widgets
|
|
16
|
+
- Migrating existing blur/material effects to the new Liquid Glass API
|
|
17
|
+
|
|
18
|
+
## Core Pattern — SwiftUI
|
|
19
|
+
|
|
20
|
+
### Basic Glass Effect
|
|
21
|
+
|
|
22
|
+
The simplest way to add Liquid Glass to any view:
|
|
23
|
+
|
|
24
|
+
```swift
|
|
25
|
+
Text("Hello, World!")
|
|
26
|
+
.font(.title)
|
|
27
|
+
.padding()
|
|
28
|
+
.glassEffect() // Default: regular variant, capsule shape
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Customizing Shape and Tint
|
|
32
|
+
|
|
33
|
+
```swift
|
|
34
|
+
Text("Hello, World!")
|
|
35
|
+
.font(.title)
|
|
36
|
+
.padding()
|
|
37
|
+
.glassEffect(.regular.tint(.orange).interactive(), in: .rect(cornerRadius: 16.0))
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Key customization options:
|
|
41
|
+
- `.regular` — standard glass effect
|
|
42
|
+
- `.tint(Color)` — add color tint for prominence
|
|
43
|
+
- `.interactive()` — react to touch and pointer interactions
|
|
44
|
+
- Shape: `.capsule` (default), `.rect(cornerRadius:)`, `.circle`
|
|
45
|
+
|
|
46
|
+
### Glass Button Styles
|
|
47
|
+
|
|
48
|
+
```swift
|
|
49
|
+
Button("Click Me") { /* action */ }
|
|
50
|
+
.buttonStyle(.glass)
|
|
51
|
+
|
|
52
|
+
Button("Important") { /* action */ }
|
|
53
|
+
.buttonStyle(.glassProminent)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### GlassEffectContainer for Multiple Elements
|
|
57
|
+
|
|
58
|
+
Always wrap multiple glass views in a container for performance and morphing:
|
|
59
|
+
|
|
60
|
+
```swift
|
|
61
|
+
GlassEffectContainer(spacing: 40.0) {
|
|
62
|
+
HStack(spacing: 40.0) {
|
|
63
|
+
Image(systemName: "scribble.variable")
|
|
64
|
+
.frame(width: 80.0, height: 80.0)
|
|
65
|
+
.font(.system(size: 36))
|
|
66
|
+
.glassEffect()
|
|
67
|
+
|
|
68
|
+
Image(systemName: "eraser.fill")
|
|
69
|
+
.frame(width: 80.0, height: 80.0)
|
|
70
|
+
.font(.system(size: 36))
|
|
71
|
+
.glassEffect()
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The `spacing` parameter controls merge distance — closer elements blend their glass shapes together.
|
|
77
|
+
|
|
78
|
+
### Uniting Glass Effects
|
|
79
|
+
|
|
80
|
+
Combine multiple views into a single glass shape with `glassEffectUnion`:
|
|
81
|
+
|
|
82
|
+
```swift
|
|
83
|
+
@Namespace private var namespace
|
|
84
|
+
|
|
85
|
+
GlassEffectContainer(spacing: 20.0) {
|
|
86
|
+
HStack(spacing: 20.0) {
|
|
87
|
+
ForEach(symbolSet.indices, id: \.self) { item in
|
|
88
|
+
Image(systemName: symbolSet[item])
|
|
89
|
+
.frame(width: 80.0, height: 80.0)
|
|
90
|
+
.glassEffect()
|
|
91
|
+
.glassEffectUnion(id: item < 2 ? "group1" : "group2", namespace: namespace)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Morphing Transitions
|
|
98
|
+
|
|
99
|
+
Create smooth morphing when glass elements appear/disappear:
|
|
100
|
+
|
|
101
|
+
```swift
|
|
102
|
+
@State private var isExpanded = false
|
|
103
|
+
@Namespace private var namespace
|
|
104
|
+
|
|
105
|
+
GlassEffectContainer(spacing: 40.0) {
|
|
106
|
+
HStack(spacing: 40.0) {
|
|
107
|
+
Image(systemName: "scribble.variable")
|
|
108
|
+
.frame(width: 80.0, height: 80.0)
|
|
109
|
+
.glassEffect()
|
|
110
|
+
.glassEffectID("pencil", in: namespace)
|
|
111
|
+
|
|
112
|
+
if isExpanded {
|
|
113
|
+
Image(systemName: "eraser.fill")
|
|
114
|
+
.frame(width: 80.0, height: 80.0)
|
|
115
|
+
.glassEffect()
|
|
116
|
+
.glassEffectID("eraser", in: namespace)
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
Button("Toggle") {
|
|
122
|
+
withAnimation { isExpanded.toggle() }
|
|
123
|
+
}
|
|
124
|
+
.buttonStyle(.glass)
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Extending Horizontal Scrolling Under Sidebar
|
|
128
|
+
|
|
129
|
+
To allow horizontal scroll content to extend under a sidebar or inspector, ensure the `ScrollView` content reaches the leading/trailing edges of the container. The system automatically handles the under-sidebar scrolling behavior when the layout extends to the edges — no additional modifier is needed.
|
|
130
|
+
|
|
131
|
+
## Core Pattern — UIKit
|
|
132
|
+
|
|
133
|
+
### Basic UIGlassEffect
|
|
134
|
+
|
|
135
|
+
```swift
|
|
136
|
+
let glassEffect = UIGlassEffect()
|
|
137
|
+
glassEffect.tintColor = UIColor.systemBlue.withAlphaComponent(0.3)
|
|
138
|
+
glassEffect.isInteractive = true
|
|
139
|
+
|
|
140
|
+
let visualEffectView = UIVisualEffectView(effect: glassEffect)
|
|
141
|
+
visualEffectView.translatesAutoresizingMaskIntoConstraints = false
|
|
142
|
+
visualEffectView.layer.cornerRadius = 20
|
|
143
|
+
visualEffectView.clipsToBounds = true
|
|
144
|
+
|
|
145
|
+
view.addSubview(visualEffectView)
|
|
146
|
+
NSLayoutConstraint.activate([
|
|
147
|
+
visualEffectView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
|
|
148
|
+
visualEffectView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
|
|
149
|
+
visualEffectView.widthAnchor.constraint(equalToConstant: 200),
|
|
150
|
+
visualEffectView.heightAnchor.constraint(equalToConstant: 120)
|
|
151
|
+
])
|
|
152
|
+
|
|
153
|
+
// Add content to contentView
|
|
154
|
+
let label = UILabel()
|
|
155
|
+
label.text = "Liquid Glass"
|
|
156
|
+
label.translatesAutoresizingMaskIntoConstraints = false
|
|
157
|
+
visualEffectView.contentView.addSubview(label)
|
|
158
|
+
NSLayoutConstraint.activate([
|
|
159
|
+
label.centerXAnchor.constraint(equalTo: visualEffectView.contentView.centerXAnchor),
|
|
160
|
+
label.centerYAnchor.constraint(equalTo: visualEffectView.contentView.centerYAnchor)
|
|
161
|
+
])
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### UIGlassContainerEffect for Multiple Elements
|
|
165
|
+
|
|
166
|
+
```swift
|
|
167
|
+
let containerEffect = UIGlassContainerEffect()
|
|
168
|
+
containerEffect.spacing = 40.0
|
|
169
|
+
|
|
170
|
+
let containerView = UIVisualEffectView(effect: containerEffect)
|
|
171
|
+
|
|
172
|
+
let firstGlass = UIVisualEffectView(effect: UIGlassEffect())
|
|
173
|
+
let secondGlass = UIVisualEffectView(effect: UIGlassEffect())
|
|
174
|
+
|
|
175
|
+
containerView.contentView.addSubview(firstGlass)
|
|
176
|
+
containerView.contentView.addSubview(secondGlass)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Scroll Edge Effects
|
|
180
|
+
|
|
181
|
+
```swift
|
|
182
|
+
scrollView.topEdgeEffect.style = .automatic
|
|
183
|
+
scrollView.bottomEdgeEffect.style = .hard
|
|
184
|
+
scrollView.leftEdgeEffect.isHidden = true
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Toolbar Glass Integration
|
|
188
|
+
|
|
189
|
+
```swift
|
|
190
|
+
let favoriteButton = UIBarButtonItem(image: UIImage(systemName: "heart"), style: .plain, target: self, action: #selector(favoriteAction))
|
|
191
|
+
favoriteButton.hidesSharedBackground = true // Opt out of shared glass background
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Core Pattern — WidgetKit
|
|
195
|
+
|
|
196
|
+
### Rendering Mode Detection
|
|
197
|
+
|
|
198
|
+
```swift
|
|
199
|
+
struct MyWidgetView: View {
|
|
200
|
+
@Environment(\.widgetRenderingMode) var renderingMode
|
|
201
|
+
|
|
202
|
+
var body: some View {
|
|
203
|
+
if renderingMode == .accented {
|
|
204
|
+
// Tinted mode: white-tinted, themed glass background
|
|
205
|
+
} else {
|
|
206
|
+
// Full color mode: standard appearance
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Accent Groups for Visual Hierarchy
|
|
213
|
+
|
|
214
|
+
```swift
|
|
215
|
+
HStack {
|
|
216
|
+
VStack(alignment: .leading) {
|
|
217
|
+
Text("Title")
|
|
218
|
+
.widgetAccentable() // Accent group
|
|
219
|
+
Text("Subtitle")
|
|
220
|
+
// Primary group (default)
|
|
221
|
+
}
|
|
222
|
+
Image(systemName: "star.fill")
|
|
223
|
+
.widgetAccentable() // Accent group
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Image Rendering in Accented Mode
|
|
228
|
+
|
|
229
|
+
```swift
|
|
230
|
+
Image("myImage")
|
|
231
|
+
.widgetAccentedRenderingMode(.monochrome)
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Container Background
|
|
235
|
+
|
|
236
|
+
```swift
|
|
237
|
+
VStack { /* content */ }
|
|
238
|
+
.containerBackground(for: .widget) {
|
|
239
|
+
Color.blue.opacity(0.2)
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Key Design Decisions
|
|
244
|
+
|
|
245
|
+
| Decision | Rationale |
|
|
246
|
+
|----------|-----------|
|
|
247
|
+
| GlassEffectContainer wrapping | Performance optimization, enables morphing between glass elements |
|
|
248
|
+
| `spacing` parameter | Controls merge distance — fine-tune how close elements must be to blend |
|
|
249
|
+
| `@Namespace` + `glassEffectID` | Enables smooth morphing transitions on view hierarchy changes |
|
|
250
|
+
| `interactive()` modifier | Explicit opt-in for touch/pointer reactions — not all glass should respond |
|
|
251
|
+
| UIGlassContainerEffect in UIKit | Same container pattern as SwiftUI for consistency |
|
|
252
|
+
| Accented rendering mode in widgets | System applies tinted glass when user selects tinted Home Screen |
|
|
253
|
+
|
|
254
|
+
## Best Practices
|
|
255
|
+
|
|
256
|
+
- **Always use GlassEffectContainer** when applying glass to multiple sibling views — it enables morphing and improves rendering performance
|
|
257
|
+
- **Apply `.glassEffect()` after** other appearance modifiers (frame, font, padding)
|
|
258
|
+
- **Use `.interactive()`** only on elements that respond to user interaction (buttons, toggleable items)
|
|
259
|
+
- **Choose spacing carefully** in containers to control when glass effects merge
|
|
260
|
+
- **Use `withAnimation`** when changing view hierarchies to enable smooth morphing transitions
|
|
261
|
+
- **Test across appearances** — light mode, dark mode, and accented/tinted modes
|
|
262
|
+
- **Ensure accessibility contrast** — text on glass must remain readable
|
|
263
|
+
|
|
264
|
+
## Anti-Patterns to Avoid
|
|
265
|
+
|
|
266
|
+
- Using multiple standalone `.glassEffect()` views without a GlassEffectContainer
|
|
267
|
+
- Nesting too many glass effects — degrades performance and visual clarity
|
|
268
|
+
- Applying glass to every view — reserve for interactive elements, toolbars, and cards
|
|
269
|
+
- Forgetting `clipsToBounds = true` in UIKit when using corner radii
|
|
270
|
+
- Ignoring accented rendering mode in widgets — breaks tinted Home Screen appearance
|
|
271
|
+
- Using opaque backgrounds behind glass — defeats the translucency effect
|
|
272
|
+
|
|
273
|
+
## When to Use
|
|
274
|
+
|
|
275
|
+
- Navigation bars, toolbars, and tab bars with the new iOS 26 design
|
|
276
|
+
- Floating action buttons and card-style containers
|
|
277
|
+
- Interactive controls that need visual depth and touch feedback
|
|
278
|
+
- Widgets that should integrate with the system's Liquid Glass appearance
|
|
279
|
+
- Morphing transitions between related UI states
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: llm-trading-agent-security
|
|
3
|
+
description: Security patterns for autonomous trading agents with wallet or transaction authority. Covers prompt injection, spend limits, pre-send simulation, circuit breakers, MEV protection, and key handling.
|
|
4
|
+
origin: ECC direct-port adaptation
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# LLM Trading Agent Security
|
|
9
|
+
|
|
10
|
+
Autonomous trading agents have a harsher threat model than normal LLM apps: an injection or bad tool path can turn directly into asset loss.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Building an AI agent that signs and sends transactions
|
|
15
|
+
- Auditing a trading bot or on-chain execution assistant
|
|
16
|
+
- Designing wallet key management for an agent
|
|
17
|
+
- Giving an LLM access to order placement, swaps, or treasury operations
|
|
18
|
+
|
|
19
|
+
## How It Works
|
|
20
|
+
|
|
21
|
+
Layer the defenses. No single check is enough. Treat prompt hygiene, spend policy, simulation, execution limits, and wallet isolation as independent controls.
|
|
22
|
+
|
|
23
|
+
## Examples
|
|
24
|
+
|
|
25
|
+
### Treat prompt injection as a financial attack
|
|
26
|
+
|
|
27
|
+
```python
|
|
28
|
+
import re
|
|
29
|
+
|
|
30
|
+
INJECTION_PATTERNS = [
|
|
31
|
+
r'ignore (previous|all) instructions',
|
|
32
|
+
r'new (task|directive|instruction)',
|
|
33
|
+
r'system prompt',
|
|
34
|
+
r'send .{0,50} to 0x[0-9a-fA-F]{40}',
|
|
35
|
+
r'transfer .{0,50} to',
|
|
36
|
+
r'approve .{0,50} for',
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
def sanitize_onchain_data(text: str) -> str:
|
|
40
|
+
for pattern in INJECTION_PATTERNS:
|
|
41
|
+
if re.search(pattern, text, re.IGNORECASE):
|
|
42
|
+
raise ValueError(f"Potential prompt injection: {text[:100]}")
|
|
43
|
+
return text
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Do not blindly inject token names, pair labels, webhooks, or social feeds into an execution-capable prompt.
|
|
47
|
+
|
|
48
|
+
### Hard spend limits
|
|
49
|
+
|
|
50
|
+
```python
|
|
51
|
+
from decimal import Decimal
|
|
52
|
+
|
|
53
|
+
MAX_SINGLE_TX_USD = Decimal("500")
|
|
54
|
+
MAX_DAILY_SPEND_USD = Decimal("2000")
|
|
55
|
+
|
|
56
|
+
class SpendLimitError(Exception):
|
|
57
|
+
pass
|
|
58
|
+
|
|
59
|
+
class SpendLimitGuard:
|
|
60
|
+
def check_and_record(self, usd_amount: Decimal) -> None:
|
|
61
|
+
if usd_amount > MAX_SINGLE_TX_USD:
|
|
62
|
+
raise SpendLimitError(f"Single tx ${usd_amount} exceeds max ${MAX_SINGLE_TX_USD}")
|
|
63
|
+
|
|
64
|
+
daily = self._get_24h_spend()
|
|
65
|
+
if daily + usd_amount > MAX_DAILY_SPEND_USD:
|
|
66
|
+
raise SpendLimitError(f"Daily limit: ${daily} + ${usd_amount} > ${MAX_DAILY_SPEND_USD}")
|
|
67
|
+
|
|
68
|
+
self._record_spend(usd_amount)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Simulate before sending
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
class SlippageError(Exception):
|
|
75
|
+
pass
|
|
76
|
+
|
|
77
|
+
async def safe_execute(self, tx: dict, expected_min_out: int | None = None) -> str:
|
|
78
|
+
sim_result = await self.w3.eth.call(tx)
|
|
79
|
+
|
|
80
|
+
if expected_min_out is None:
|
|
81
|
+
raise ValueError("min_amount_out is required before send")
|
|
82
|
+
|
|
83
|
+
actual_out = decode_uint256(sim_result)
|
|
84
|
+
if actual_out < expected_min_out:
|
|
85
|
+
raise SlippageError(f"Simulation: {actual_out} < {expected_min_out}")
|
|
86
|
+
|
|
87
|
+
signed = self.account.sign_transaction(tx)
|
|
88
|
+
return await self.w3.eth.send_raw_transaction(signed.raw_transaction)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Circuit breaker
|
|
92
|
+
|
|
93
|
+
```python
|
|
94
|
+
class TradingCircuitBreaker:
|
|
95
|
+
MAX_CONSECUTIVE_LOSSES = 3
|
|
96
|
+
MAX_HOURLY_LOSS_PCT = 0.05
|
|
97
|
+
|
|
98
|
+
def check(self, portfolio_value: float) -> None:
|
|
99
|
+
if self.consecutive_losses >= self.MAX_CONSECUTIVE_LOSSES:
|
|
100
|
+
self.halt("Too many consecutive losses")
|
|
101
|
+
|
|
102
|
+
if self.hour_start_value <= 0:
|
|
103
|
+
self.halt("Invalid hour_start_value")
|
|
104
|
+
return
|
|
105
|
+
|
|
106
|
+
hourly_pnl = (portfolio_value - self.hour_start_value) / self.hour_start_value
|
|
107
|
+
if hourly_pnl < -self.MAX_HOURLY_LOSS_PCT:
|
|
108
|
+
self.halt(f"Hourly PnL {hourly_pnl:.1%} below threshold")
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Wallet isolation
|
|
112
|
+
|
|
113
|
+
```python
|
|
114
|
+
import os
|
|
115
|
+
from eth_account import Account
|
|
116
|
+
|
|
117
|
+
private_key = os.environ.get("TRADING_WALLET_PRIVATE_KEY")
|
|
118
|
+
if not private_key:
|
|
119
|
+
raise EnvironmentError("TRADING_WALLET_PRIVATE_KEY not set")
|
|
120
|
+
|
|
121
|
+
account = Account.from_key(private_key)
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Use a dedicated hot wallet with only the required session funds. Never point the agent at a primary treasury wallet.
|
|
125
|
+
|
|
126
|
+
### MEV and deadline protection
|
|
127
|
+
|
|
128
|
+
```python
|
|
129
|
+
import time
|
|
130
|
+
|
|
131
|
+
PRIVATE_RPC = "https://rpc.flashbots.net"
|
|
132
|
+
MAX_SLIPPAGE_BPS = {"stable": 10, "volatile": 50}
|
|
133
|
+
deadline = int(time.time()) + 60
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Pre-Deploy Checklist
|
|
137
|
+
|
|
138
|
+
- External data is sanitized before entering the LLM context
|
|
139
|
+
- Spend limits are enforced independently from model output
|
|
140
|
+
- Transactions are simulated before send
|
|
141
|
+
- `min_amount_out` is mandatory
|
|
142
|
+
- Circuit breakers halt on drawdown or invalid state
|
|
143
|
+
- Keys come from env or a secret manager, never code or logs
|
|
144
|
+
- Private mempool or protected routing is used when appropriate
|
|
145
|
+
- Slippage and deadlines are set per strategy
|
|
146
|
+
- All agent decisions are audit-logged, not just successful sends
|