cfsa-antigravity 1.0.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/bin/cli.mjs +324 -0
- package/package.json +34 -0
- package/template/.agent/instructions/commands.md +48 -0
- package/template/.agent/instructions/patterns.md +61 -0
- package/template/.agent/instructions/structure.md +29 -0
- package/template/.agent/instructions/tech-stack.md +43 -0
- package/template/.agent/instructions/workflow.md +41 -0
- package/template/.agent/kit-sync.md +15 -0
- package/template/.agent/rules/boundary-not-placeholder.md +146 -0
- package/template/.agent/rules/completion-checklist.md +48 -0
- package/template/.agent/rules/decision-classification.md +103 -0
- package/template/.agent/rules/extensibility.md +47 -0
- package/template/.agent/rules/question-vs-command.md +81 -0
- package/template/.agent/rules/security-first.md +43 -0
- package/template/.agent/rules/specificity-standards.md +54 -0
- package/template/.agent/rules/tdd-contract-first.md +57 -0
- package/template/.agent/rules/vertical-slices.md +42 -0
- package/template/.agent/skill-library/MANIFEST.md +480 -0
- package/template/.agent/skill-library/README.md +38 -0
- package/template/.agent/skill-library/meta/brand-guidelines/SKILL.md +73 -0
- package/template/.agent/skill-library/meta/claude-code/README.md +9 -0
- package/template/.agent/skill-library/meta/claude-code/agent-development/SKILL.md +415 -0
- package/template/.agent/skill-library/meta/claude-code/hook-development/SKILL.md +712 -0
- package/template/.agent/skill-library/meta/claude-code/plugin-structure/SKILL.md +476 -0
- package/template/.agent/skill-library/meta/git-advanced/SKILL.md +972 -0
- package/template/.agent/skill-library/meta/mcp-builder/SKILL.md +236 -0
- package/template/.agent/skill-library/meta/product-marketing-context/SKILL.md +241 -0
- package/template/.agent/skill-library/meta/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skill-library/meta/tmux-processes/SKILL.md +210 -0
- package/template/.agent/skill-library/meta/using-tmux-for-interactive-commands/SKILL.md +178 -0
- package/template/.agent/skill-library/stack/3d/threejs-pro/SKILL.md +300 -0
- package/template/.agent/skill-library/stack/ai/ai-sdk/SKILL.md +77 -0
- package/template/.agent/skill-library/stack/ai/langchain/SKILL.md +530 -0
- package/template/.agent/skill-library/stack/ai/ollama/SKILL.md +321 -0
- package/template/.agent/skill-library/stack/ai/openai-sdk/SKILL.md +549 -0
- package/template/.agent/skill-library/stack/analytics/google-analytics/SKILL.md +153 -0
- package/template/.agent/skill-library/stack/api/graphql/SKILL.md +1061 -0
- package/template/.agent/skill-library/stack/api/trpc/SKILL.md +576 -0
- package/template/.agent/skill-library/stack/auth/authjs/SKILL.md +569 -0
- package/template/.agent/skill-library/stack/auth/clerk/SKILL.md +590 -0
- package/template/.agent/skill-library/stack/auth/firebase-auth/SKILL.md +734 -0
- package/template/.agent/skill-library/stack/cms/payload-cms/SKILL.md +573 -0
- package/template/.agent/skill-library/stack/cms/shopify/SKILL.md +1193 -0
- package/template/.agent/skill-library/stack/cms/wordpress/SKILL.md +1104 -0
- package/template/.agent/skill-library/stack/css/sass-scss/SKILL.md +1121 -0
- package/template/.agent/skill-library/stack/css/tailwind-css-patterns/SKILL.md +863 -0
- package/template/.agent/skill-library/stack/css/tailwind-design-system/SKILL.md +490 -0
- package/template/.agent/skill-library/stack/css/vanilla-css/SKILL.md +1078 -0
- package/template/.agent/skill-library/stack/databases/clickhouse/SKILL.md +311 -0
- package/template/.agent/skill-library/stack/databases/influxdb/SKILL.md +280 -0
- package/template/.agent/skill-library/stack/databases/lancedb/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/databases/mongodb/SKILL.md +1169 -0
- package/template/.agent/skill-library/stack/databases/neo4j/SKILL.md +839 -0
- package/template/.agent/skill-library/stack/databases/pgvector/SKILL.md +241 -0
- package/template/.agent/skill-library/stack/databases/pinecone/SKILL.md +212 -0
- package/template/.agent/skill-library/stack/databases/postgresql/SKILL.md +658 -0
- package/template/.agent/skill-library/stack/databases/qdrant/SKILL.md +312 -0
- package/template/.agent/skill-library/stack/databases/redis/SKILL.md +1079 -0
- package/template/.agent/skill-library/stack/databases/spacetimedb/SKILL.md +532 -0
- package/template/.agent/skill-library/stack/databases/sqlite/SKILL.md +1132 -0
- package/template/.agent/skill-library/stack/databases/supabase/SKILL.md +640 -0
- package/template/.agent/skill-library/stack/databases/surrealdb-expert/SKILL.md +945 -0
- package/template/.agent/skill-library/stack/databases/timescaledb/SKILL.md +745 -0
- package/template/.agent/skill-library/stack/databases/weaviate/SKILL.md +218 -0
- package/template/.agent/skill-library/stack/devops/github-actions/SKILL.md +554 -0
- package/template/.agent/skill-library/stack/devops/kubernetes/SKILL.md +950 -0
- package/template/.agent/skill-library/stack/devops/nginx/SKILL.md +841 -0
- package/template/.agent/skill-library/stack/devops/terraform/SKILL.md +860 -0
- package/template/.agent/skill-library/stack/email/resend/SKILL.md +391 -0
- package/template/.agent/skill-library/stack/engines/godot/SKILL.md +488 -0
- package/template/.agent/skill-library/stack/extensions/chrome-extension/SKILL.md +375 -0
- package/template/.agent/skill-library/stack/extensions/vscode-extension/SKILL.md +453 -0
- package/template/.agent/skill-library/stack/frameworks/astro-framework/SKILL.md +162 -0
- package/template/.agent/skill-library/stack/frameworks/electron/SKILL.md +1286 -0
- package/template/.agent/skill-library/stack/frameworks/fastapi/SKILL.md +650 -0
- package/template/.agent/skill-library/stack/frameworks/hono/SKILL.md +90 -0
- package/template/.agent/skill-library/stack/frameworks/nestjs/SKILL.md +878 -0
- package/template/.agent/skill-library/stack/frameworks/nextjs/SKILL.md +635 -0
- package/template/.agent/skill-library/stack/frameworks/nuxt/SKILL.md +564 -0
- package/template/.agent/skill-library/stack/frameworks/sveltekit/SKILL.md +614 -0
- package/template/.agent/skill-library/stack/frameworks/tauri/SKILL.md +920 -0
- package/template/.agent/skill-library/stack/gamedev/godot/SKILL.md +1032 -0
- package/template/.agent/skill-library/stack/gamedev/unity/SKILL.md +1175 -0
- package/template/.agent/skill-library/stack/hosting/aws/SKILL.md +467 -0
- package/template/.agent/skill-library/stack/hosting/cloudflare/SKILL.md +201 -0
- package/template/.agent/skill-library/stack/hosting/docker-expert/SKILL.md +409 -0
- package/template/.agent/skill-library/stack/hosting/vercel/SKILL.md +484 -0
- package/template/.agent/skill-library/stack/languages/bash-scripting/SKILL.md +773 -0
- package/template/.agent/skill-library/stack/languages/c-cpp/SKILL.md +712 -0
- package/template/.agent/skill-library/stack/languages/gdscript/SKILL.md +789 -0
- package/template/.agent/skill-library/stack/languages/go/SKILL.md +664 -0
- package/template/.agent/skill-library/stack/languages/java/SKILL.md +778 -0
- package/template/.agent/skill-library/stack/languages/kotlin/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/languages/python/SKILL.md +678 -0
- package/template/.agent/skill-library/stack/languages/rust/SKILL.md +673 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/SKILL.md +141 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/advanced-generics.md +90 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/branded-types.md +57 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/builder-pattern.md +71 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/common-pitfalls.md +135 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/conditional-types.md +27 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/decorators.md +98 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/discriminated-unions.md +62 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/mapped-types.md +53 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/performance-best-practices.md +104 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/template-literal-types.md +49 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/testing-types.md +112 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-guards.md +70 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/type-inference.md +101 -0
- package/template/.agent/skill-library/stack/languages/typescript-advanced-patterns/references/utility-types.md +98 -0
- package/template/.agent/skill-library/stack/languages/vanilla-javascript/SKILL.md +803 -0
- package/template/.agent/skill-library/stack/messaging/kafka/SKILL.md +235 -0
- package/template/.agent/skill-library/stack/mobile/expo-react-native/SKILL.md +665 -0
- package/template/.agent/skill-library/stack/mobile/flutter/SKILL.md +316 -0
- package/template/.agent/skill-library/stack/mobile/react-native/SKILL.md +337 -0
- package/template/.agent/skill-library/stack/monitoring/posthog/SKILL.md +396 -0
- package/template/.agent/skill-library/stack/monitoring/sentry/SKILL.md +509 -0
- package/template/.agent/skill-library/stack/observability/datadog/SKILL.md +179 -0
- package/template/.agent/skill-library/stack/observability/distributed-tracing/SKILL.md +140 -0
- package/template/.agent/skill-library/stack/observability/logging-best-practices/SKILL.md +168 -0
- package/template/.agent/skill-library/stack/observability/opentelemetry/SKILL.md +164 -0
- package/template/.agent/skill-library/stack/observability/prometheus-grafana/SKILL.md +246 -0
- package/template/.agent/skill-library/stack/observability/python-observability/SKILL.md +158 -0
- package/template/.agent/skill-library/stack/orm/drizzle-orm/SKILL.md +613 -0
- package/template/.agent/skill-library/stack/orm/prisma/SKILL.md +744 -0
- package/template/.agent/skill-library/stack/payments/lemonsqueezy/SKILL.md +393 -0
- package/template/.agent/skill-library/stack/payments/stripe-integration/SKILL.md +457 -0
- package/template/.agent/skill-library/stack/queue/bullmq/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/queue/inngest/SKILL.md +438 -0
- package/template/.agent/skill-library/stack/realtime/socketio/SKILL.md +595 -0
- package/template/.agent/skill-library/stack/search/elasticsearch/SKILL.md +248 -0
- package/template/.agent/skill-library/stack/search/meilisearch/SKILL.md +385 -0
- package/template/.agent/skill-library/stack/security/crypto-patterns/SKILL.md +437 -0
- package/template/.agent/skill-library/stack/security/csp-cors-headers/SKILL.md +588 -0
- package/template/.agent/skill-library/stack/security/dependency-auditing/SKILL.md +560 -0
- package/template/.agent/skill-library/stack/security/input-sanitization/SKILL.md +430 -0
- package/template/.agent/skill-library/stack/security/owasp-web-security/SKILL.md +421 -0
- package/template/.agent/skill-library/stack/state/tanstack-query/SKILL.md +637 -0
- package/template/.agent/skill-library/stack/state/zustand/SKILL.md +483 -0
- package/template/.agent/skill-library/stack/storage/aws-s3/SKILL.md +415 -0
- package/template/.agent/skill-library/stack/testing/playwright/SKILL.md +641 -0
- package/template/.agent/skill-library/stack/testing/storybook/SKILL.md +923 -0
- package/template/.agent/skill-library/stack/testing/testing-library/SKILL.md +872 -0
- package/template/.agent/skill-library/stack/testing/vitest/SKILL.md +714 -0
- package/template/.agent/skill-library/stack/ui/react-best-practices/SKILL.md +877 -0
- package/template/.agent/skill-library/stack/ui/react-composition-patterns/SKILL.md +1107 -0
- package/template/.agent/skill-library/stack/ui/react-flow/SKILL.md +425 -0
- package/template/.agent/skill-library/stack/ui/shadcn-ui/SKILL.md +703 -0
- package/template/.agent/skill-library/surface/api/api-caching/SKILL.md +458 -0
- package/template/.agent/skill-library/surface/api/api-documentation-openapi/SKILL.md +697 -0
- package/template/.agent/skill-library/surface/api/api-error-handling/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/api-security-checklist/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/api-versioning/SKILL.md +420 -0
- package/template/.agent/skill-library/surface/api/email-best-practices/SKILL.md +59 -0
- package/template/.agent/skill-library/surface/api/rate-limiting-abuse-protection/SKILL.md +147 -0
- package/template/.agent/skill-library/surface/api/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skill-library/surface/api/webhook-design/SKILL.md +752 -0
- package/template/.agent/skill-library/surface/cli/cli-configuration-management/SKILL.md +445 -0
- package/template/.agent/skill-library/surface/cli/cli-error-diagnostics/SKILL.md +515 -0
- package/template/.agent/skill-library/surface/cli/cli-shell-integration/SKILL.md +479 -0
- package/template/.agent/skill-library/surface/cli/cli-ux-design/SKILL.md +477 -0
- package/template/.agent/skill-library/surface/desktop/desktop-app-distribution/SKILL.md +416 -0
- package/template/.agent/skill-library/surface/desktop/desktop-security-sandboxing/SKILL.md +407 -0
- package/template/.agent/skill-library/surface/desktop/desktop-ux-conventions/SKILL.md +361 -0
- package/template/.agent/skill-library/surface/desktop/native-os-integration/SKILL.md +563 -0
- package/template/.agent/skill-library/surface/extension/browser-extension-patterns/SKILL.md +482 -0
- package/template/.agent/skill-library/surface/extension/plugin-architecture-design/SKILL.md +632 -0
- package/template/.agent/skill-library/surface/extension/vscode-extension-development/SKILL.md +728 -0
- package/template/.agent/skill-library/surface/mobile/app-store-submission/SKILL.md +304 -0
- package/template/.agent/skill-library/surface/mobile/mobile-offline-sync/SKILL.md +443 -0
- package/template/.agent/skill-library/surface/mobile/mobile-responsive-patterns/SKILL.md +432 -0
- package/template/.agent/skill-library/surface/mobile/push-notifications/SKILL.md +495 -0
- package/template/.agent/skill-library/surface/web/accessibility-compliance/SKILL.md +827 -0
- package/template/.agent/skill-library/surface/web/ai-seo/SKILL.md +398 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/content-patterns.md +285 -0
- package/template/.agent/skill-library/surface/web/ai-seo/references/platform-ranking-factors.md +152 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/SKILL.md +309 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/event-library.md +260 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/ga4-implementation.md +300 -0
- package/template/.agent/skill-library/surface/web/analytics-tracking/references/gtm-implementation.md +390 -0
- package/template/.agent/skill-library/surface/web/authentication-ui-flows/SKILL.md +530 -0
- package/template/.agent/skill-library/surface/web/dark-mode-theming/SKILL.md +516 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/SKILL.md +105 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/charts.csv +26 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/colors.csv +97 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/landing.csv +31 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/styles.csv +59 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/typography.csv +58 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/data/ux-guidelines.csv +100 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/core.py +258 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/design_system.py +1067 -0
- package/template/.agent/skill-library/surface/web/design-reference-data/scripts/search.py +106 -0
- package/template/.agent/skill-library/surface/web/form-handling-validation/SKILL.md +675 -0
- package/template/.agent/skill-library/surface/web/frontend-design/SKILL.md +1393 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/cppn-hero.tsx +299 -0
- package/template/.agent/skill-library/surface/web/frontend-design/templates/wave-hero.tsx +875 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/SKILL.md +111 -0
- package/template/.agent/skill-library/surface/web/frontend-verification/scripts/ux_audit.py +739 -0
- package/template/.agent/skill-library/surface/web/i18n-localization/SKILL.md +154 -0
- package/template/.agent/skill-library/surface/web/offline-first-pwa/SKILL.md +657 -0
- package/template/.agent/skill-library/surface/web/page-cro/SKILL.md +182 -0
- package/template/.agent/skill-library/surface/web/page-cro/references/experiments.md +248 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/SKILL.md +238 -0
- package/template/.agent/skill-library/surface/web/programmatic-seo/references/playbooks.md +308 -0
- package/template/.agent/skill-library/surface/web/schema-markup/SKILL.md +179 -0
- package/template/.agent/skill-library/surface/web/schema-markup/references/schema-examples.md +398 -0
- package/template/.agent/skill-library/surface/web/seo-audit/SKILL.md +394 -0
- package/template/.agent/skill-library/surface/web/seo-audit/references/ai-writing-detection.md +200 -0
- package/template/.agent/skill-library/surface/web/web-performance-optimization/SKILL.md +646 -0
- package/template/.agent/skill-library/surface/web/web-scraping/SKILL.md +58 -0
- package/template/.agent/skills/accessibility/SKILL.md +522 -0
- package/template/.agent/skills/accessibility/references/WCAG.md +162 -0
- package/template/.agent/skills/adversarial-review/SKILL.md +90 -0
- package/template/.agent/skills/antigravity-workflows/SKILL.md +81 -0
- package/template/.agent/skills/antigravity-workflows/resources/implementation-playbook.md +36 -0
- package/template/.agent/skills/api-design-principles/SKILL.md +37 -0
- package/template/.agent/skills/api-design-principles/assets/api-design-checklist.md +155 -0
- package/template/.agent/skills/api-design-principles/assets/rest-api-template.py +182 -0
- package/template/.agent/skills/api-design-principles/references/graphql-schema-design.md +583 -0
- package/template/.agent/skills/api-design-principles/references/rest-best-practices.md +408 -0
- package/template/.agent/skills/api-design-principles/resources/implementation-playbook.md +513 -0
- package/template/.agent/skills/api-versioning/SKILL.md +420 -0
- package/template/.agent/skills/architecture-mapping/SKILL.md +219 -0
- package/template/.agent/skills/bootstrap-agents/SKILL.md +259 -0
- package/template/.agent/skills/brainstorming/SKILL.md +236 -0
- package/template/.agent/skills/brand-guidelines/SKILL.md +44 -0
- package/template/.agent/skills/clean-code/SKILL.md +94 -0
- package/template/.agent/skills/code-review-pro/SKILL.md +152 -0
- package/template/.agent/skills/concise-planning/SKILL.md +68 -0
- package/template/.agent/skills/cross-layer-consistency/SKILL.md +117 -0
- package/template/.agent/skills/database-schema-design/SKILL.md +429 -0
- package/template/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/template/.agent/skills/design-anti-cliche/SKILL.md +159 -0
- package/template/.agent/skills/design-direction/SKILL.md +45 -0
- package/template/.agent/skills/error-handling-patterns/SKILL.md +721 -0
- package/template/.agent/skills/find-skills/SKILL.md +145 -0
- package/template/.agent/skills/git-advanced/SKILL.md +972 -0
- package/template/.agent/skills/git-workflow/SKILL.md +420 -0
- package/template/.agent/skills/idea-extraction/SKILL.md +271 -0
- package/template/.agent/skills/logging-best-practices/SKILL.md +851 -0
- package/template/.agent/skills/migration-management/SKILL.md +384 -0
- package/template/.agent/skills/minimalist-surgical-development/SKILL.md +69 -0
- package/template/.agent/skills/parallel-agents/SKILL.md +165 -0
- package/template/.agent/skills/parallel-debugging/SKILL.md +135 -0
- package/template/.agent/skills/parallel-feature-development/SKILL.md +166 -0
- package/template/.agent/skills/performance-budgeting/SKILL.md +144 -0
- package/template/.agent/skills/pipeline-rubrics/SKILL.md +51 -0
- package/template/.agent/skills/pipeline-rubrics/references/architecture-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/be-rubric.md +21 -0
- package/template/.agent/skills/pipeline-rubrics/references/fe-rubric.md +20 -0
- package/template/.agent/skills/pipeline-rubrics/references/ia-rubric.md +19 -0
- package/template/.agent/skills/pipeline-rubrics/references/scoring.md +28 -0
- package/template/.agent/skills/pipeline-rubrics/references/vision-rubric.md +11 -0
- package/template/.agent/skills/prd-templates/SKILL.md +88 -0
- package/template/.agent/skills/prd-templates/references/architecture-design-template.md +88 -0
- package/template/.agent/skills/prd-templates/references/be-spec-template.md +101 -0
- package/template/.agent/skills/prd-templates/references/data-placement-template.md +74 -0
- package/template/.agent/skills/prd-templates/references/decomposition-templates.md +211 -0
- package/template/.agent/skills/prd-templates/references/design-system-decisions.md +198 -0
- package/template/.agent/skills/prd-templates/references/engineering-standards-template.md +124 -0
- package/template/.agent/skills/prd-templates/references/fe-classification-procedures.md +47 -0
- package/template/.agent/skills/prd-templates/references/fe-spec-template.md +84 -0
- package/template/.agent/skills/prd-templates/references/infrastructure-report-template.md +71 -0
- package/template/.agent/skills/prd-templates/references/operational-templates.md +116 -0
- package/template/.agent/skills/prd-templates/references/placeholder-guard-template.md +21 -0
- package/template/.agent/skills/prd-templates/references/surface-model.md +61 -0
- package/template/.agent/skills/prd-templates/references/vision-template.md +66 -0
- package/template/.agent/skills/prompt-engineer/README.md +659 -0
- package/template/.agent/skills/prompt-engineer/SKILL.md +249 -0
- package/template/.agent/skills/regex-patterns/SKILL.md +751 -0
- package/template/.agent/skills/resolve-ambiguity/SKILL.md +278 -0
- package/template/.agent/skills/rest-api-design/SKILL.md +478 -0
- package/template/.agent/skills/security-scanning-security-hardening/SKILL.md +231 -0
- package/template/.agent/skills/session-continuity/SKILL.md +730 -0
- package/template/.agent/skills/session-continuity/protocols/01-session-resumption.md +38 -0
- package/template/.agent/skills/session-continuity/protocols/02-progress-generation.md +85 -0
- package/template/.agent/skills/session-continuity/protocols/03-progress-update.md +70 -0
- package/template/.agent/skills/session-continuity/protocols/04-pattern-extraction.md +60 -0
- package/template/.agent/skills/session-continuity/protocols/05-session-close.md +37 -0
- package/template/.agent/skills/session-continuity/protocols/06-decision-analysis.md +84 -0
- package/template/.agent/skills/session-continuity/protocols/07-spec-pipeline-generation.md +48 -0
- package/template/.agent/skills/session-continuity/protocols/08-spec-pipeline-update.md +43 -0
- package/template/.agent/skills/session-continuity/protocols/09-parallel-claim.md +122 -0
- package/template/.agent/skills/session-continuity/protocols/10-placeholder-verification-gate.md +104 -0
- package/template/.agent/skills/session-continuity/protocols/ambiguity-gates.md +48 -0
- package/template/.agent/skills/skill-creator/LICENSE.txt +202 -0
- package/template/.agent/skills/skill-creator/README.md +270 -0
- package/template/.agent/skills/skill-creator/SKILL.md +590 -0
- package/template/.agent/skills/skill-creator/references/output-patterns.md +82 -0
- package/template/.agent/skills/skill-creator/references/workflows.md +28 -0
- package/template/.agent/skills/skill-creator/scripts/init_skill.py +303 -0
- package/template/.agent/skills/skill-creator/scripts/package_skill.py +110 -0
- package/template/.agent/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/template/.agent/skills/spec-writing/SKILL.md +110 -0
- package/template/.agent/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/template/.agent/skills/systematic-debugging/SKILL.md +297 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/template/.agent/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/template/.agent/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/template/.agent/skills/systematic-debugging/find-polluter.sh +63 -0
- package/template/.agent/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/template/.agent/skills/systematic-debugging/test-academic.md +14 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/template/.agent/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/template/.agent/skills/tdd-workflow/SKILL.md +409 -0
- package/template/.agent/skills/tech-stack-catalog/SKILL.md +49 -0
- package/template/.agent/skills/tech-stack-catalog/references/constraint-questions.md +21 -0
- package/template/.agent/skills/tech-stack-catalog/references/dev-tooling-decisions.md +37 -0
- package/template/.agent/skills/tech-stack-catalog/references/surface-decision-tables.md +69 -0
- package/template/.agent/skills/technical-writer/SKILL.md +242 -0
- package/template/.agent/skills/testing-strategist/SKILL.md +932 -0
- package/template/.agent/skills/verification-before-completion/SKILL.md +145 -0
- package/template/.agent/skills/workflow-automation/SKILL.md +73 -0
- package/template/.agent/workflows/audit-ambiguity-execute.md +165 -0
- package/template/.agent/workflows/audit-ambiguity-rubrics.md +83 -0
- package/template/.agent/workflows/audit-ambiguity.md +64 -0
- package/template/.agent/workflows/bootstrap-agents-fill.md +201 -0
- package/template/.agent/workflows/bootstrap-agents-provision.md +197 -0
- package/template/.agent/workflows/bootstrap-agents.md +66 -0
- package/template/.agent/workflows/create-prd-architecture.md +119 -0
- package/template/.agent/workflows/create-prd-compile.md +138 -0
- package/template/.agent/workflows/create-prd-design-system.md +135 -0
- package/template/.agent/workflows/create-prd-security.md +113 -0
- package/template/.agent/workflows/create-prd-stack.md +91 -0
- package/template/.agent/workflows/create-prd.md +168 -0
- package/template/.agent/workflows/decompose-architecture-structure.md +82 -0
- package/template/.agent/workflows/decompose-architecture-validate.md +119 -0
- package/template/.agent/workflows/decompose-architecture.md +111 -0
- package/template/.agent/workflows/evolve-contract.md +98 -0
- package/template/.agent/workflows/evolve-feature-cascade.md +140 -0
- package/template/.agent/workflows/evolve-feature-classify.md +116 -0
- package/template/.agent/workflows/evolve-feature.md +56 -0
- package/template/.agent/workflows/ideate-discover.md +144 -0
- package/template/.agent/workflows/ideate-extract.md +129 -0
- package/template/.agent/workflows/ideate-validate.md +117 -0
- package/template/.agent/workflows/ideate.md +113 -0
- package/template/.agent/workflows/implement-slice-setup.md +113 -0
- package/template/.agent/workflows/implement-slice-tdd.md +198 -0
- package/template/.agent/workflows/implement-slice.md +50 -0
- package/template/.agent/workflows/plan-phase.md +202 -0
- package/template/.agent/workflows/propagate-decision-apply.md +135 -0
- package/template/.agent/workflows/propagate-decision-scan.md +147 -0
- package/template/.agent/workflows/propagate-decision.md +56 -0
- package/template/.agent/workflows/remediate-pipeline-assess.md +138 -0
- package/template/.agent/workflows/remediate-pipeline-execute.md +135 -0
- package/template/.agent/workflows/remediate-pipeline.md +55 -0
- package/template/.agent/workflows/resolve-ambiguity.md +82 -0
- package/template/.agent/workflows/sync-kit.md +209 -0
- package/template/.agent/workflows/update-architecture-map.md +74 -0
- package/template/.agent/workflows/validate-phase.md +219 -0
- package/template/.agent/workflows/verify-infrastructure.md +207 -0
- package/template/.agent/workflows/write-architecture-spec-deepen.md +139 -0
- package/template/.agent/workflows/write-architecture-spec-design.md +202 -0
- package/template/.agent/workflows/write-architecture-spec.md +63 -0
- package/template/.agent/workflows/write-be-spec-classify.md +165 -0
- package/template/.agent/workflows/write-be-spec-write.md +98 -0
- package/template/.agent/workflows/write-be-spec.md +76 -0
- package/template/.agent/workflows/write-fe-spec-classify.md +170 -0
- package/template/.agent/workflows/write-fe-spec-write.md +94 -0
- package/template/.agent/workflows/write-fe-spec.md +71 -0
- package/template/AGENTS.md +176 -0
- package/template/GEMINI.md +177 -0
- package/template/docs/README.md +187 -0
- package/template/docs/audits/.gitkeep +0 -0
- package/template/docs/audits/README.md +10 -0
- package/template/docs/plans/.gitkeep +0 -0
- package/template/docs/plans/README.md +21 -0
- package/template/docs/plans/be/.gitkeep +0 -0
- package/template/docs/plans/be/README.md +11 -0
- package/template/docs/plans/fe/.gitkeep +0 -0
- package/template/docs/plans/fe/README.md +11 -0
- package/template/docs/plans/ia/.gitkeep +0 -0
- package/template/docs/plans/ia/README.md +17 -0
- package/template/docs/plans/ia/deep-dives/.gitkeep +0 -0
- package/template/docs/plans/ia/deep-dives/README.md +5 -0
- package/template/docs/plans/phases/.gitkeep +0 -0
- package/template/docs/plans/phases/README.md +11 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tmux-processes
|
|
3
|
+
description: Patterns for running long-lived processes in tmux. Use when starting dev servers, watchers, tilt, or any process expected to outlive the conversation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# tmux Process Management
|
|
7
|
+
|
|
8
|
+
## Interactive Shell Requirement
|
|
9
|
+
|
|
10
|
+
**Use send-keys pattern for reliable shell initialization.** Creating a session spawns an interactive shell automatically. Use `send-keys` to run commands within that shell, ensuring PATH, direnv, and other initialization runs properly.
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# WRONG - inline command bypasses shell init, breaks PATH/direnv
|
|
14
|
+
tmux new-session -d -s "$SESSION" -n main 'tilt up'
|
|
15
|
+
|
|
16
|
+
# CORRECT - create session, then send command to interactive shell
|
|
17
|
+
tmux new-session -d -s "$SESSION" -n main
|
|
18
|
+
tmux send-keys -t "$SESSION:main" 'tilt up' Enter
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Session Naming Convention
|
|
22
|
+
|
|
23
|
+
Always derive session name from the project:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
For multiple processes in one project, use windows not separate sessions:
|
|
30
|
+
- Session: `myapp`
|
|
31
|
+
- Windows: `server`, `tests`, `logs`
|
|
32
|
+
|
|
33
|
+
## Starting Processes
|
|
34
|
+
|
|
35
|
+
### Single Process
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
39
|
+
|
|
40
|
+
# Create session with named window, then send command
|
|
41
|
+
tmux new-session -d -s "$SESSION" -n main
|
|
42
|
+
tmux send-keys -t "$SESSION:main" '<command>' Enter
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Idempotent Start
|
|
46
|
+
|
|
47
|
+
Check if already running before starting:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
51
|
+
|
|
52
|
+
if ! tmux has-session -t "$SESSION" 2>/dev/null; then
|
|
53
|
+
tmux new-session -d -s "$SESSION" -n main
|
|
54
|
+
tmux send-keys -t "$SESSION:main" '<command>' Enter
|
|
55
|
+
else
|
|
56
|
+
echo "Session $SESSION already exists"
|
|
57
|
+
fi
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Adding Windows to Existing Session
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
64
|
+
|
|
65
|
+
# Add a new window if it doesn't exist
|
|
66
|
+
if ! tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^server$"; then
|
|
67
|
+
tmux new-window -t "$SESSION" -n server
|
|
68
|
+
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
|
|
69
|
+
else
|
|
70
|
+
echo "Window 'server' already exists"
|
|
71
|
+
fi
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Multiple Processes (Windows)
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
78
|
+
|
|
79
|
+
# Create session with first process
|
|
80
|
+
tmux new-session -d -s "$SESSION" -n server
|
|
81
|
+
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
|
|
82
|
+
|
|
83
|
+
# Add more windows
|
|
84
|
+
tmux new-window -t "$SESSION" -n tests
|
|
85
|
+
tmux send-keys -t "$SESSION:tests" 'npm run test:watch' Enter
|
|
86
|
+
|
|
87
|
+
tmux new-window -t "$SESSION" -n logs
|
|
88
|
+
tmux send-keys -t "$SESSION:logs" 'tail -f logs/app.log' Enter
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Monitoring Output
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
95
|
+
|
|
96
|
+
# Last 50 lines from first window
|
|
97
|
+
tmux capture-pane -p -t "$SESSION" -S -50
|
|
98
|
+
|
|
99
|
+
# From specific window
|
|
100
|
+
tmux capture-pane -p -t "$SESSION:server" -S -50
|
|
101
|
+
|
|
102
|
+
# Check for errors
|
|
103
|
+
tmux capture-pane -p -t "$SESSION" -S -100 | rg -i "error|fail|exception"
|
|
104
|
+
|
|
105
|
+
# Check for ready indicators
|
|
106
|
+
tmux capture-pane -p -t "$SESSION:server" -S -50 | rg -i "listening|ready|started"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Lifecycle Management
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
113
|
+
|
|
114
|
+
# List all sessions (see what exists)
|
|
115
|
+
tmux ls
|
|
116
|
+
|
|
117
|
+
# List windows in current session
|
|
118
|
+
tmux list-windows -t "$SESSION"
|
|
119
|
+
|
|
120
|
+
# Kill only this project's session
|
|
121
|
+
tmux kill-session -t "$SESSION"
|
|
122
|
+
|
|
123
|
+
# Kill specific window
|
|
124
|
+
tmux kill-window -t "$SESSION:tests"
|
|
125
|
+
|
|
126
|
+
# Send keys to a window (e.g., Ctrl+C to stop)
|
|
127
|
+
tmux send-keys -t "$SESSION:server" C-c
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Isolation Rules
|
|
131
|
+
|
|
132
|
+
- **Never** use `tmux kill-server`
|
|
133
|
+
- **Never** kill sessions not matching current project
|
|
134
|
+
- **Always** derive session name from git root or pwd
|
|
135
|
+
- **Always** verify session name before kill operations
|
|
136
|
+
- Other Claude Code instances may have their own sessions running
|
|
137
|
+
|
|
138
|
+
## When to Use tmux
|
|
139
|
+
|
|
140
|
+
| Scenario | Use tmux? |
|
|
141
|
+
|----------|-----------|
|
|
142
|
+
| `tilt up` | Yes, always |
|
|
143
|
+
| Dev server (`npm run dev`, `rails s`) | Yes |
|
|
144
|
+
| File watcher (`npm run watch`) | Yes |
|
|
145
|
+
| Test watcher (`npm run test:watch`) | Yes |
|
|
146
|
+
| Database server | Yes |
|
|
147
|
+
| One-shot build (`npm run build`) | No |
|
|
148
|
+
| Quick command (<10s) | No |
|
|
149
|
+
| Need stdout directly in conversation | No |
|
|
150
|
+
|
|
151
|
+
## Checking Process Status
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
155
|
+
|
|
156
|
+
# Check session exists
|
|
157
|
+
tmux has-session -t "$SESSION" 2>/dev/null && echo "session exists" || echo "no session"
|
|
158
|
+
|
|
159
|
+
# List windows and their status
|
|
160
|
+
tmux list-windows -t "$SESSION" -F '#{window_name}: #{pane_current_command}'
|
|
161
|
+
|
|
162
|
+
# Check if specific window exists
|
|
163
|
+
tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^server$" && echo "server window exists"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Restarting a Process
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
170
|
+
|
|
171
|
+
# Send Ctrl+C then restart command
|
|
172
|
+
tmux send-keys -t "$SESSION:server" C-c
|
|
173
|
+
sleep 1
|
|
174
|
+
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Common Patterns
|
|
178
|
+
|
|
179
|
+
### Start dev server if not running
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
183
|
+
|
|
184
|
+
if ! tmux has-session -t "$SESSION" 2>/dev/null; then
|
|
185
|
+
tmux new-session -d -s "$SESSION" -n server
|
|
186
|
+
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
|
|
187
|
+
echo "Started dev server in tmux session: $SESSION"
|
|
188
|
+
elif ! tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^server$"; then
|
|
189
|
+
tmux new-window -t "$SESSION" -n server
|
|
190
|
+
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
|
|
191
|
+
echo "Added server window to session: $SESSION"
|
|
192
|
+
else
|
|
193
|
+
echo "Server already running in session: $SESSION"
|
|
194
|
+
fi
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Wait for server ready
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
|
|
201
|
+
|
|
202
|
+
# Poll for ready message
|
|
203
|
+
for i in {1..30}; do
|
|
204
|
+
if tmux capture-pane -p -t "$SESSION:server" -S -20 | rg -q "listening|ready"; then
|
|
205
|
+
echo "Server ready"
|
|
206
|
+
break
|
|
207
|
+
fi
|
|
208
|
+
sleep 1
|
|
209
|
+
done
|
|
210
|
+
```
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: using-tmux-for-interactive-commands
|
|
3
|
+
description: Use when you need to run interactive CLI tools (vim, git rebase -i, Python REPL, etc.) that require real-time input/output - provides tmux-based approach for controlling interactive sessions through detached sessions and send-keys
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Using tmux for Interactive Commands
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
Interactive CLI tools (vim, interactive git rebase, REPLs, etc.) cannot be controlled through standard bash because they require a real terminal. tmux provides detached sessions that can be controlled programmatically via `send-keys` and `capture-pane`.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
**Use tmux when:**
|
|
15
|
+
- Running vim, nano, or other text editors programmatically
|
|
16
|
+
- Controlling interactive REPLs (Python, Node, etc.)
|
|
17
|
+
- Handling interactive git commands (`git rebase -i`, `git add -p`)
|
|
18
|
+
- Working with full-screen terminal apps (htop, etc.)
|
|
19
|
+
- Commands that require terminal control codes or readline
|
|
20
|
+
|
|
21
|
+
**Don't use for:**
|
|
22
|
+
- Simple non-interactive commands (use regular Bash tool)
|
|
23
|
+
- Commands that accept input via stdin redirection
|
|
24
|
+
- One-shot commands that don't need interaction
|
|
25
|
+
|
|
26
|
+
## Quick Reference
|
|
27
|
+
|
|
28
|
+
| Task | Command |
|
|
29
|
+
|------|---------|
|
|
30
|
+
| Start session | `tmux new-session -d -s <name> <command>` |
|
|
31
|
+
| Send input | `tmux send-keys -t <name> 'text' Enter` |
|
|
32
|
+
| Capture output | `tmux capture-pane -t <name> -p` |
|
|
33
|
+
| Stop session | `tmux kill-session -t <name>` |
|
|
34
|
+
| List sessions | `tmux list-sessions` |
|
|
35
|
+
|
|
36
|
+
## Core Pattern
|
|
37
|
+
|
|
38
|
+
### Before (Won't Work)
|
|
39
|
+
```bash
|
|
40
|
+
# This hangs because vim expects interactive terminal
|
|
41
|
+
bash -c "vim file.txt"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### After (Works)
|
|
45
|
+
```bash
|
|
46
|
+
# Create detached tmux session
|
|
47
|
+
tmux new-session -d -s edit_session vim file.txt
|
|
48
|
+
|
|
49
|
+
# Send commands (Enter, Escape are tmux key names)
|
|
50
|
+
tmux send-keys -t edit_session 'i' 'Hello World' Escape ':wq' Enter
|
|
51
|
+
|
|
52
|
+
# Capture what's on screen
|
|
53
|
+
tmux capture-pane -t edit_session -p
|
|
54
|
+
|
|
55
|
+
# Clean up
|
|
56
|
+
tmux kill-session -t edit_session
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Implementation
|
|
60
|
+
|
|
61
|
+
### Basic Workflow
|
|
62
|
+
|
|
63
|
+
1. **Create detached session** with the interactive command
|
|
64
|
+
2. **Wait briefly** for initialization (100-500ms depending on command)
|
|
65
|
+
3. **Send input** using `send-keys` (can send special keys like Enter, Escape)
|
|
66
|
+
4. **Capture output** using `capture-pane -p` to see current screen state
|
|
67
|
+
5. **Repeat** steps 3-4 as needed
|
|
68
|
+
6. **Terminate** session when done
|
|
69
|
+
|
|
70
|
+
### Special Keys
|
|
71
|
+
|
|
72
|
+
Common tmux key names:
|
|
73
|
+
- `Enter` - Return/newline
|
|
74
|
+
- `Escape` - ESC key
|
|
75
|
+
- `C-c` - Ctrl+C
|
|
76
|
+
- `C-x` - Ctrl+X
|
|
77
|
+
- `Up`, `Down`, `Left`, `Right` - Arrow keys
|
|
78
|
+
- `Space` - Space bar
|
|
79
|
+
- `BSpace` - Backspace
|
|
80
|
+
|
|
81
|
+
### Working Directory
|
|
82
|
+
|
|
83
|
+
Specify working directory when creating session:
|
|
84
|
+
```bash
|
|
85
|
+
tmux new-session -d -s git_session -c /path/to/repo git rebase -i HEAD~3
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Helper Wrapper
|
|
89
|
+
|
|
90
|
+
For easier use, see `/home/jesse/git/interactive-command/tmux-wrapper.sh`:
|
|
91
|
+
```bash
|
|
92
|
+
# Start session
|
|
93
|
+
/path/to/tmux-wrapper.sh start <session-name> <command> [args...]
|
|
94
|
+
|
|
95
|
+
# Send input
|
|
96
|
+
/path/to/tmux-wrapper.sh send <session-name> 'text' Enter
|
|
97
|
+
|
|
98
|
+
# Capture current state
|
|
99
|
+
/path/to/tmux-wrapper.sh capture <session-name>
|
|
100
|
+
|
|
101
|
+
# Stop
|
|
102
|
+
/path/to/tmux-wrapper.sh stop <session-name>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Common Patterns
|
|
106
|
+
|
|
107
|
+
### Python REPL
|
|
108
|
+
```bash
|
|
109
|
+
tmux new-session -d -s python python3 -i
|
|
110
|
+
tmux send-keys -t python 'import math' Enter
|
|
111
|
+
tmux send-keys -t python 'print(math.pi)' Enter
|
|
112
|
+
tmux capture-pane -t python -p # See output
|
|
113
|
+
tmux kill-session -t python
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Vim Editing
|
|
117
|
+
```bash
|
|
118
|
+
tmux new-session -d -s vim vim /tmp/file.txt
|
|
119
|
+
sleep 0.3 # Wait for vim to start
|
|
120
|
+
tmux send-keys -t vim 'i' 'New content' Escape ':wq' Enter
|
|
121
|
+
# File is now saved
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Interactive Git Rebase
|
|
125
|
+
```bash
|
|
126
|
+
tmux new-session -d -s rebase -c /repo/path git rebase -i HEAD~3
|
|
127
|
+
sleep 0.5
|
|
128
|
+
tmux capture-pane -t rebase -p # See rebase editor
|
|
129
|
+
# Send commands to modify rebase instructions
|
|
130
|
+
tmux send-keys -t rebase 'Down' 'Home' 'squash' Escape
|
|
131
|
+
tmux send-keys -t rebase ':wq' Enter
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Common Mistakes
|
|
135
|
+
|
|
136
|
+
### Not Waiting After Session Start
|
|
137
|
+
**Problem:** Capturing immediately after `new-session` shows blank screen
|
|
138
|
+
|
|
139
|
+
**Fix:** Add brief sleep (100-500ms) before first capture
|
|
140
|
+
```bash
|
|
141
|
+
tmux new-session -d -s sess command
|
|
142
|
+
sleep 0.3 # Let command initialize
|
|
143
|
+
tmux capture-pane -t sess -p
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Forgetting Enter Key
|
|
147
|
+
**Problem:** Commands typed but not executed
|
|
148
|
+
|
|
149
|
+
**Fix:** Explicitly send Enter
|
|
150
|
+
```bash
|
|
151
|
+
tmux send-keys -t sess 'print("hello")' Enter # Note: Enter is separate argument
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Using Wrong Key Names
|
|
155
|
+
**Problem:** `tmux send-keys -t sess '\n'` doesn't work
|
|
156
|
+
|
|
157
|
+
**Fix:** Use tmux key names: `Enter`, not `\n`
|
|
158
|
+
```bash
|
|
159
|
+
tmux send-keys -t sess 'text' Enter # ✓
|
|
160
|
+
tmux send-keys -t sess 'text\n' # ✗
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Not Cleaning Up Sessions
|
|
164
|
+
**Problem:** Orphaned tmux sessions accumulate
|
|
165
|
+
|
|
166
|
+
**Fix:** Always kill sessions when done
|
|
167
|
+
```bash
|
|
168
|
+
tmux kill-session -t session_name
|
|
169
|
+
# Or check for existing: tmux has-session -t name 2>/dev/null
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Real-World Impact
|
|
173
|
+
|
|
174
|
+
- Enables programmatic control of vim/nano for file editing
|
|
175
|
+
- Allows automation of interactive git workflows (rebase, add -p)
|
|
176
|
+
- Makes REPL-based testing/debugging possible
|
|
177
|
+
- Unblocks any tool that requires terminal interaction
|
|
178
|
+
- No need to build custom PTY management - tmux handles it all
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: threejs-pro
|
|
3
|
+
description: Expert in 3D web graphics using Three.js, React Three Fiber (R3F), and WebGL shaders.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Three.js & WebGL Developer
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
Provides 3D web graphics expertise specializing in Three.js, React Three Fiber (R3F), and custom GLSL shader development. Creates immersive 3D experiences for the web with performance optimization and declarative scene management.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- Building 3D product configurators or landing pages
|
|
15
|
+
- Implementing custom shaders (GLSL) for visual effects
|
|
16
|
+
- Optimizing 3D scenes (Draco compression, texture resizing)
|
|
17
|
+
- Developing React Three Fiber (R3F) applications
|
|
18
|
+
- Integrating physics (Rapier/Cannon) into web scenes
|
|
19
|
+
- Debugging WebGL performance issues (Draw calls, memory leaks)
|
|
20
|
+
|
|
21
|
+
## Examples
|
|
22
|
+
|
|
23
|
+
### Example 1: 3D Product Configurator
|
|
24
|
+
|
|
25
|
+
**Scenario:** Building an interactive product configurator for a furniture retailer.
|
|
26
|
+
|
|
27
|
+
**Implementation:**
|
|
28
|
+
1. Created R3F component for 3D product display
|
|
29
|
+
2. Implemented texture/material swapping system
|
|
30
|
+
3. Added camera controls and lighting setup
|
|
31
|
+
4. Optimized 3D model with Draco compression
|
|
32
|
+
5. Added accessibility alternatives for non-3D users
|
|
33
|
+
|
|
34
|
+
**Results:**
|
|
35
|
+
- 40% increase in conversion rate
|
|
36
|
+
- Average session duration increased 2x
|
|
37
|
+
- Load time under 2 seconds
|
|
38
|
+
- Works on mobile devices
|
|
39
|
+
|
|
40
|
+
### Example 2: Custom Shader Effects
|
|
41
|
+
|
|
42
|
+
**Scenario:** Creating immersive visual effects for a gaming landing page.
|
|
43
|
+
|
|
44
|
+
**Implementation:**
|
|
45
|
+
1. Wrote custom GLSL vertex and fragment shaders
|
|
46
|
+
2. Implemented post-processing effects (bloom, DOF)
|
|
47
|
+
3. Added interactive elements responding to user input
|
|
48
|
+
4. Optimized shader performance for real-time rendering
|
|
49
|
+
5. Created fallback for WebGL-incapable devices
|
|
50
|
+
|
|
51
|
+
**Results:**
|
|
52
|
+
- Stunning visual experience with 60fps
|
|
53
|
+
- Viral marketing campaign success
|
|
54
|
+
- Industry recognition for visual design
|
|
55
|
+
- Maintained performance on mid-tier devices
|
|
56
|
+
|
|
57
|
+
### Example 3: E-Commerce 3D Integration
|
|
58
|
+
|
|
59
|
+
**Scenario:** Integrating Three.js into existing React e-commerce site.
|
|
60
|
+
|
|
61
|
+
**Implementation:**
|
|
62
|
+
1. Created isolated 3D canvas component
|
|
63
|
+
2. Implemented lazy loading for 3D content
|
|
64
|
+
3. Added proper state management between React and Three.js
|
|
65
|
+
4. Implemented proper cleanup on component unmount
|
|
66
|
+
5. Added error boundaries and fallback content
|
|
67
|
+
|
|
68
|
+
**Results:**
|
|
69
|
+
- Zero impact on existing page performance
|
|
70
|
+
- Improved SEO with proper lazy loading
|
|
71
|
+
- Graceful degradation for unsupported browsers
|
|
72
|
+
- Clean codebase following React patterns
|
|
73
|
+
|
|
74
|
+
## Best Practices
|
|
75
|
+
|
|
76
|
+
### Performance Optimization
|
|
77
|
+
|
|
78
|
+
- **Geometry Merging**: Reduce draw calls with merged geometries
|
|
79
|
+
- **Texture Optimization**: Use compressed formats, proper sizing
|
|
80
|
+
- **Dispose Properly**: Clean up geometries and materials
|
|
81
|
+
- **Level of Detail**: Use LOD for distant objects
|
|
82
|
+
|
|
83
|
+
### React Three Fiber
|
|
84
|
+
|
|
85
|
+
- **Declarative**: Use R3F component tree, not imperative code
|
|
86
|
+
- **Hooks**: Use useFrame, useThree, useLoader properly
|
|
87
|
+
- **State Management**: Use Zustand for global 3D state
|
|
88
|
+
- **Components**: Break scene into reusable components
|
|
89
|
+
|
|
90
|
+
### Shaders and Effects
|
|
91
|
+
|
|
92
|
+
- **Custom Shaders**: Use when built-ins aren't enough
|
|
93
|
+
- **Post-Processing**: Add effects without performance cost
|
|
94
|
+
- **Optimization**: Profile shader performance
|
|
95
|
+
- **Fallbacks**: Provide alternatives for low-end devices
|
|
96
|
+
|
|
97
|
+
### Development Workflow
|
|
98
|
+
|
|
99
|
+
- **Hot Reload**: Use HMR for rapid iteration
|
|
100
|
+
- **Debug Tools**: Use drei's helpers and controls
|
|
101
|
+
- **Accessibility**: Provide alternatives for 3D content
|
|
102
|
+
- **Testing**: Test on multiple devices and browsers
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 2. Decision Framework
|
|
108
|
+
|
|
109
|
+
### Tech Stack Selection
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
What is the project scope?
|
|
113
|
+
│
|
|
114
|
+
├─ **React Integration?**
|
|
115
|
+
│ ├─ Yes → **React Three Fiber (R3F)** (Recommended for 90% of web apps)
|
|
116
|
+
│ └─ No → **Vanilla Three.js**
|
|
117
|
+
│
|
|
118
|
+
├─ **Performance Critical?**
|
|
119
|
+
│ ├─ Massive Object Count? → **InstancedMesh**
|
|
120
|
+
│ ├─ Complex Physics? → **Rapier (WASM)**
|
|
121
|
+
│ └─ Post-Processing? → **EffectComposer / R3F Postprocessing**
|
|
122
|
+
│
|
|
123
|
+
└─ **Visual Style?**
|
|
124
|
+
├─ Realistic? → **PBR Materials + HDR Lighting**
|
|
125
|
+
├─ Cartoon? → **Toon Shader / Outline Pass**
|
|
126
|
+
└─ Abstract? → **Custom GLSL Shaders**
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Optimization Checklist (The 60FPS Rule)
|
|
130
|
+
|
|
131
|
+
1. **Geometry:** Use `Draco` or `Meshopt` compression.
|
|
132
|
+
2. **Textures:** Use `.webp` or `.ktx2`. Max size 2048x2048.
|
|
133
|
+
3. **Lighting:** Bake lighting where possible. Max 1-2 real-time shadows.
|
|
134
|
+
4. **Draw Calls:** Merge geometries or use Instancing.
|
|
135
|
+
5. **Render Loop:** Avoid object creation in the `useFrame` loop.
|
|
136
|
+
|
|
137
|
+
**Red Flags → Escalate to `graphics-engineer`:**
|
|
138
|
+
- Requirement for Ray Tracing in browser (WebGPU experimental)
|
|
139
|
+
- Custom render pipelines beyond standard Three.js capabilities
|
|
140
|
+
- Low-level WebGL API calls needed directly
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 3. Core Workflows
|
|
146
|
+
|
|
147
|
+
### Workflow 1: React Three Fiber (R3F) Setup
|
|
148
|
+
|
|
149
|
+
**Goal:** A spinning cube with shadows and orbit controls.
|
|
150
|
+
|
|
151
|
+
**Steps:**
|
|
152
|
+
|
|
153
|
+
1. **Setup**
|
|
154
|
+
```bash
|
|
155
|
+
npm install three @types/three @react-three/fiber @react-three/drei
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
2. **Scene Component (`Scene.tsx`)**
|
|
159
|
+
```tsx
|
|
160
|
+
import { Canvas } from '@react-three/fiber';
|
|
161
|
+
import { OrbitControls, Stage } from '@react-three/drei';
|
|
162
|
+
|
|
163
|
+
export default function Scene() {
|
|
164
|
+
return (
|
|
165
|
+
<Canvas shadows camera={{ position: [0, 0, 5] }}>
|
|
166
|
+
<color attach="background" args={['#101010']} />
|
|
167
|
+
<ambientLight intensity={0.5} />
|
|
168
|
+
<spotLight position={[10, 10, 10]} angle={0.15} penumbra={1} castShadow />
|
|
169
|
+
|
|
170
|
+
<mesh castShadow receiveShadow rotation={[0, 1, 0]}>
|
|
171
|
+
<boxGeometry args={[1, 1, 1]} />
|
|
172
|
+
<meshStandardMaterial color="orange" />
|
|
173
|
+
</mesh>
|
|
174
|
+
|
|
175
|
+
<OrbitControls />
|
|
176
|
+
</Canvas>
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
### Workflow 3: Model Loading & Optimization
|
|
185
|
+
|
|
186
|
+
**Goal:** Load a heavy GLTF model efficiently.
|
|
187
|
+
|
|
188
|
+
**Steps:**
|
|
189
|
+
|
|
190
|
+
1. **Compression**
|
|
191
|
+
- Use `gltf-pipeline` or `gltf-transform`.
|
|
192
|
+
- `gltf-transform optimize input.glb output.glb --compress draco`.
|
|
193
|
+
|
|
194
|
+
2. **Loading (R3F)**
|
|
195
|
+
```tsx
|
|
196
|
+
import { useGLTF } from '@react-three/drei';
|
|
197
|
+
|
|
198
|
+
export function Model(props) {
|
|
199
|
+
const { nodes, materials } = useGLTF('/optimized-model.glb');
|
|
200
|
+
return (
|
|
201
|
+
<group {...props} dispose={null}>
|
|
202
|
+
<mesh geometry={nodes.Cube.geometry} material={materials.Metal} />
|
|
203
|
+
</group>
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
useGLTF.preload('/optimized-model.glb');
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## 5. Anti-Patterns & Gotchas
|
|
213
|
+
|
|
214
|
+
### ❌ Anti-Pattern 1: Creating Objects in Loop
|
|
215
|
+
|
|
216
|
+
**What it looks like:**
|
|
217
|
+
- `useFrame(() => { new THREE.Vector3(...) })`
|
|
218
|
+
|
|
219
|
+
**Why it fails:**
|
|
220
|
+
- Garbage Collection (GC) stutter.
|
|
221
|
+
- 60fps requires 16ms/frame. Allocating memory kills performance.
|
|
222
|
+
|
|
223
|
+
**Correct approach:**
|
|
224
|
+
- Reuse global/module-level variables.
|
|
225
|
+
- `const vec = new THREE.Vector3(); useFrame(() => vec.set(...))`
|
|
226
|
+
|
|
227
|
+
### ❌ Anti-Pattern 2: Huge Textures
|
|
228
|
+
|
|
229
|
+
**What it looks like:**
|
|
230
|
+
- Loading 4k `.png` textures (10MB each) for a background object.
|
|
231
|
+
|
|
232
|
+
**Why it fails:**
|
|
233
|
+
- Slow load time.
|
|
234
|
+
- GPU memory exhaustion (mobile crash).
|
|
235
|
+
|
|
236
|
+
**Correct approach:**
|
|
237
|
+
- Use `1k` or `2k` textures.
|
|
238
|
+
- Use `.jpg` for color maps, `.png` only if alpha needed.
|
|
239
|
+
- Use Basis/KTX2 for GPU compression.
|
|
240
|
+
|
|
241
|
+
### ❌ Anti-Pattern 3: Too Many Lights
|
|
242
|
+
|
|
243
|
+
**What it looks like:**
|
|
244
|
+
- 50 dynamic PointLights.
|
|
245
|
+
|
|
246
|
+
**Why it fails:**
|
|
247
|
+
- Forward rendering creates exponential shader complexity.
|
|
248
|
+
|
|
249
|
+
**Correct approach:**
|
|
250
|
+
- **Bake Lighting** (Lightmaps) in Blender.
|
|
251
|
+
- Use `AmbientLight` + 1 `DirectionalLight` (Sun).
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 7. Quality Checklist
|
|
257
|
+
|
|
258
|
+
**Performance:**
|
|
259
|
+
- [ ] **FPS:** Stable 60fps on average laptop.
|
|
260
|
+
- [ ] **Draw Calls:** < 100 ideally.
|
|
261
|
+
- [ ] **Memory:** Geometries/Materials disposed when unmounted.
|
|
262
|
+
|
|
263
|
+
**Visuals:**
|
|
264
|
+
- [ ] **Shadows:** Soft shadows configured (ContactShadows or PCSS).
|
|
265
|
+
- [ ] **Antialiasing:** Enabled (default in R3F) or SMAA via post-proc.
|
|
266
|
+
- [ ] **Responsiveness:** Canvas resizes correctly on window resize.
|
|
267
|
+
|
|
268
|
+
**Code:**
|
|
269
|
+
- [ ] **Declarative:** Used R3F component tree, not imperative `scene.add()`.
|
|
270
|
+
- [ ] **Optimization:** `useMemo` used for expensive calculations.
|
|
271
|
+
|
|
272
|
+
## Anti-Patterns
|
|
273
|
+
|
|
274
|
+
### Performance Anti-Patterns
|
|
275
|
+
|
|
276
|
+
- **Excessive Draw Calls**: Too many separate geometries - merge geometries when possible
|
|
277
|
+
- **Memory Leaks**: Not disposing geometries/materials - always clean up in useEffect cleanup
|
|
278
|
+
- **Unoptimized Textures**: Large texture files - compress and use appropriate formats
|
|
279
|
+
- **Heavy Calculations**: Blocking main thread - offload to web workers
|
|
280
|
+
|
|
281
|
+
### Architecture Anti-Patterns
|
|
282
|
+
|
|
283
|
+
- **Imperative Code**: Using imperative Three.js in React - use declarative R3F patterns
|
|
284
|
+
- **Prop Drilling**: Passing props through many levels - use context and stores
|
|
285
|
+
- **State Sprawl**: Scattered state management - use centralized state (Zustand)
|
|
286
|
+
- **Component Bloat**: Large single components - break into focused components
|
|
287
|
+
|
|
288
|
+
### 3D Modeling Anti-Patterns
|
|
289
|
+
|
|
290
|
+
- **High Poly Models**: Unoptimized model geometry - use LOD and decimation
|
|
291
|
+
- **Mismatched Scales**: Inconsistent scale units - normalize model scales
|
|
292
|
+
- **Missing Colliders**: No collision geometry - add invisible colliders for interactions
|
|
293
|
+
- **Improper Lighting**: Too many lights - use baked lighting and light probes
|
|
294
|
+
|
|
295
|
+
### Development Anti-Patterns
|
|
296
|
+
|
|
297
|
+
- **No Progressive Loading**: Large scenes loading slowly - implement loading states
|
|
298
|
+
- **Missing Fallbacks**: No graceful degradation - provide fallback experiences
|
|
299
|
+
- **Accessibility Ignored**: 3D content not accessible - add alternative content
|
|
300
|
+
- **No Performance Budget**: No performance targets - establish and monitor budgets
|