claude-code-templates 1.21.11 → 1.21.13
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/.claude/agents/agent-expert.md +477 -0
- package/.claude/agents/cli-ui-designer.md +405 -0
- package/.claude/agents/command-expert.md +421 -0
- package/.claude/agents/docusaurus-expert.md +173 -0
- package/.claude/agents/frontend-developer.md +32 -0
- package/.claude/agents/mcp-expert.md +258 -0
- package/.claude/commands/lint.md +111 -0
- package/.claude/commands/test.md +73 -0
- package/.claude/settings.local.json +56 -0
- package/.env.example +26 -0
- package/.github/WORKFLOWS_REFERENCE.md +88 -0
- package/.github/workflows/deploy-docusaurus.yml +31 -0
- package/.github/workflows/deploy.yml +33 -0
- package/.github/workflows/publish-package.yml +125 -0
- package/.mcp.json +4 -0
- package/AGENTS.md +4 -0
- package/CLAUDE.md +482 -0
- package/CLAUDE_JOBS_README.md +148 -0
- package/CODE_OF_CONDUCT.md +82 -0
- package/CONTRIBUTING.md +505 -0
- package/DEPLOYMENT.md +60 -0
- package/LICENSE +21 -0
- package/README.md +77 -79
- package/ROADMAP.md +278 -0
- package/SECURITY.md +65 -0
- package/api/index.html +1 -0
- package/api/package.json +7 -0
- package/api/track-download-supabase.js +150 -0
- package/cli-tool/Makefile +102 -0
- package/cli-tool/README.md +126 -0
- package/cli-tool/TESTING.md +262 -0
- package/cli-tool/components/agents/ai-specialists/ai-ethics-advisor.md +195 -0
- package/cli-tool/components/agents/ai-specialists/hackathon-ai-strategist.md +46 -0
- package/cli-tool/components/agents/ai-specialists/llms-maintainer.md +94 -0
- package/cli-tool/components/agents/ai-specialists/model-evaluator.md +150 -0
- package/cli-tool/components/agents/ai-specialists/prompt-engineer.md +112 -0
- package/cli-tool/components/agents/ai-specialists/search-specialist.md +59 -0
- package/cli-tool/components/agents/ai-specialists/task-decomposition-expert.md +97 -0
- package/cli-tool/components/agents/api-graphql/graphql-architect.md +208 -0
- package/cli-tool/components/agents/api-graphql/graphql-performance-optimizer.md +357 -0
- package/cli-tool/components/agents/api-graphql/graphql-security-specialist.md +519 -0
- package/cli-tool/components/agents/blockchain-web3/smart-contract-auditor.md +32 -0
- package/cli-tool/components/agents/blockchain-web3/smart-contract-specialist.md +32 -0
- package/cli-tool/components/agents/blockchain-web3/web3-integration-specialist.md +32 -0
- package/cli-tool/components/agents/business-marketing/business-analyst.md +194 -0
- package/cli-tool/components/agents/business-marketing/content-marketer.md +36 -0
- package/cli-tool/components/agents/business-marketing/customer-support.md +36 -0
- package/cli-tool/components/agents/business-marketing/legal-advisor.md +50 -0
- package/cli-tool/components/agents/business-marketing/marketing-attribution-analyst.md +352 -0
- package/cli-tool/components/agents/business-marketing/payment-integration.md +33 -0
- package/cli-tool/components/agents/business-marketing/product-strategist.md +212 -0
- package/cli-tool/components/agents/business-marketing/risk-manager.md +42 -0
- package/cli-tool/components/agents/business-marketing/sales-automator.md +36 -0
- package/cli-tool/components/agents/data-ai/ai-engineer.md +33 -0
- package/cli-tool/components/agents/data-ai/computer-vision-engineer.md +562 -0
- package/cli-tool/components/agents/data-ai/data-engineer.md +33 -0
- package/cli-tool/components/agents/data-ai/data-scientist.md +337 -0
- package/cli-tool/components/agents/data-ai/ml-engineer.md +33 -0
- package/cli-tool/components/agents/data-ai/mlops-engineer.md +58 -0
- package/cli-tool/components/agents/data-ai/nlp-engineer.md +680 -0
- package/cli-tool/components/agents/data-ai/quant-analyst.md +33 -0
- package/cli-tool/components/agents/database/database-admin.md +33 -0
- package/cli-tool/components/agents/database/database-architect.md +590 -0
- package/cli-tool/components/agents/database/database-optimization.md +33 -0
- package/cli-tool/components/agents/database/database-optimizer.md +33 -0
- package/cli-tool/components/agents/database/neon-auth-specialist.md +175 -0
- package/cli-tool/components/agents/database/neon-database-architect.md +141 -0
- package/cli-tool/components/agents/database/neon-expert.md +846 -0
- package/cli-tool/components/agents/database/nosql-specialist.md +708 -0
- package/cli-tool/components/agents/database/supabase-schema-architect.md +138 -0
- package/cli-tool/components/agents/deep-research-team/academic-researcher.md +33 -0
- package/cli-tool/components/agents/deep-research-team/agent-overview.md +235 -0
- package/cli-tool/components/agents/deep-research-team/competitive-intelligence-analyst.md +530 -0
- package/cli-tool/components/agents/deep-research-team/data-analyst.md +112 -0
- package/cli-tool/components/agents/deep-research-team/fact-checker.md +553 -0
- package/cli-tool/components/agents/deep-research-team/query-clarifier.md +73 -0
- package/cli-tool/components/agents/deep-research-team/report-generator.md +108 -0
- package/cli-tool/components/agents/deep-research-team/research-brief-generator.md +108 -0
- package/cli-tool/components/agents/deep-research-team/research-coordinator.md +94 -0
- package/cli-tool/components/agents/deep-research-team/research-orchestrator.md +119 -0
- package/cli-tool/components/agents/deep-research-team/research-synthesizer.md +109 -0
- package/cli-tool/components/agents/deep-research-team/technical-researcher.md +95 -0
- package/cli-tool/components/agents/development-team/backend-architect.md +31 -0
- package/cli-tool/components/agents/development-team/cli-ui-designer.md +405 -0
- package/cli-tool/components/agents/development-team/devops-engineer.md +886 -0
- package/cli-tool/components/agents/development-team/frontend-developer.md +32 -0
- package/cli-tool/components/agents/development-team/fullstack-developer.md +1205 -0
- package/cli-tool/components/agents/development-team/ios-developer.md +36 -0
- package/cli-tool/components/agents/development-team/mobile-developer.md +33 -0
- package/cli-tool/components/agents/development-team/ui-ux-designer.md +36 -0
- package/cli-tool/components/agents/development-tools/code-reviewer.md +30 -0
- package/cli-tool/components/agents/development-tools/command-expert.md +422 -0
- package/cli-tool/components/agents/development-tools/context-manager.md +65 -0
- package/cli-tool/components/agents/development-tools/debugger.md +31 -0
- package/cli-tool/components/agents/development-tools/dx-optimizer.md +64 -0
- package/cli-tool/components/agents/development-tools/error-detective.md +33 -0
- package/cli-tool/components/agents/development-tools/mcp-expert.md +259 -0
- package/cli-tool/components/agents/development-tools/performance-profiler.md +799 -0
- package/cli-tool/components/agents/development-tools/test-engineer.md +936 -0
- package/cli-tool/components/agents/devops-infrastructure/cloud-architect.md +33 -0
- package/cli-tool/components/agents/devops-infrastructure/deployment-engineer.md +33 -0
- package/cli-tool/components/agents/devops-infrastructure/devops-troubleshooter.md +33 -0
- package/cli-tool/components/agents/devops-infrastructure/monitoring-specialist.md +36 -0
- package/cli-tool/components/agents/devops-infrastructure/network-engineer.md +33 -0
- package/cli-tool/components/agents/devops-infrastructure/security-engineer.md +971 -0
- package/cli-tool/components/agents/devops-infrastructure/terraform-specialist.md +36 -0
- package/cli-tool/components/agents/devops-infrastructure/vercel-deployment-specialist.md +357 -0
- package/cli-tool/components/agents/documentation/api-documenter.md +33 -0
- package/cli-tool/components/agents/documentation/changelog-generator.md +37 -0
- package/cli-tool/components/agents/documentation/docusaurus-expert.md +175 -0
- package/cli-tool/components/agents/documentation/technical-writer.md +37 -0
- package/cli-tool/components/agents/expert-advisors/agent-expert.md +491 -0
- package/cli-tool/components/agents/expert-advisors/architect-review.md +50 -0
- package/cli-tool/components/agents/expert-advisors/dependency-manager.md +45 -0
- package/cli-tool/components/agents/expert-advisors/documentation-expert.md +47 -0
- package/cli-tool/components/agents/ffmpeg-clip-team/audio-mixer.md +37 -0
- package/cli-tool/components/agents/ffmpeg-clip-team/audio-quality-controller.md +100 -0
- package/cli-tool/components/agents/ffmpeg-clip-team/podcast-content-analyzer.md +60 -0
- package/cli-tool/components/agents/ffmpeg-clip-team/podcast-metadata-specialist.md +46 -0
- package/cli-tool/components/agents/ffmpeg-clip-team/podcast-transcriber.md +68 -0
- package/cli-tool/components/agents/ffmpeg-clip-team/social-media-clip-creator.md +69 -0
- package/cli-tool/components/agents/ffmpeg-clip-team/timestamp-precision-specialist.md +98 -0
- package/cli-tool/components/agents/ffmpeg-clip-team/video-editor.md +37 -0
- package/cli-tool/components/agents/game-development/3d-artist.md +37 -0
- package/cli-tool/components/agents/game-development/game-designer.md +37 -0
- package/cli-tool/components/agents/game-development/unity-game-developer.md +110 -0
- package/cli-tool/components/agents/game-development/unreal-engine-developer.md +128 -0
- package/cli-tool/components/agents/git/git-flow-manager.md +329 -0
- package/cli-tool/components/agents/mcp-dev-team/mcp-deployment-orchestrator.md +101 -0
- package/cli-tool/components/agents/mcp-dev-team/mcp-integration-engineer.md +37 -0
- package/cli-tool/components/agents/mcp-dev-team/mcp-protocol-specialist.md +37 -0
- package/cli-tool/components/agents/mcp-dev-team/mcp-registry-navigator.md +112 -0
- package/cli-tool/components/agents/mcp-dev-team/mcp-security-auditor.md +70 -0
- package/cli-tool/components/agents/mcp-dev-team/mcp-server-architect.md +74 -0
- package/cli-tool/components/agents/mcp-dev-team/mcp-testing-engineer.md +106 -0
- package/cli-tool/components/agents/modernization/architecture-modernizer.md +37 -0
- package/cli-tool/components/agents/modernization/cloud-migration-specialist.md +37 -0
- package/cli-tool/components/agents/modernization/legacy-modernizer.md +33 -0
- package/cli-tool/components/agents/obsidian-ops-team/Scripts/daily_notes_connector.py +306 -0
- package/cli-tool/components/agents/obsidian-ops-team/Scripts/enhance_tag_standardizer.py +343 -0
- package/cli-tool/components/agents/obsidian-ops-team/Scripts/find_keyword_connections.py +216 -0
- package/cli-tool/components/agents/obsidian-ops-team/Scripts/fix_quoted_tags.py +82 -0
- package/cli-tool/components/agents/obsidian-ops-team/Scripts/implement_entity_connections.py +195 -0
- package/cli-tool/components/agents/obsidian-ops-team/Scripts/link_suggester.py +301 -0
- package/cli-tool/components/agents/obsidian-ops-team/Scripts/metadata_adder.py +197 -0
- package/cli-tool/components/agents/obsidian-ops-team/Scripts/moc_generator.py +296 -0
- package/cli-tool/components/agents/obsidian-ops-team/Scripts/parse_keyword_connections.py +122 -0
- package/cli-tool/components/agents/obsidian-ops-team/Scripts/tag_standardizer.py +387 -0
- package/cli-tool/components/agents/obsidian-ops-team/connection-agent.md +67 -0
- package/cli-tool/components/agents/obsidian-ops-team/content-curator.md +81 -0
- package/cli-tool/components/agents/obsidian-ops-team/metadata-agent.md +51 -0
- package/cli-tool/components/agents/obsidian-ops-team/moc-agent.md +112 -0
- package/cli-tool/components/agents/obsidian-ops-team/review-agent.md +94 -0
- package/cli-tool/components/agents/obsidian-ops-team/tag-agent.md +92 -0
- package/cli-tool/components/agents/obsidian-ops-team/vault-optimizer.md +76 -0
- package/cli-tool/components/agents/ocr-extraction-team/document-structure-analyzer.md +37 -0
- package/cli-tool/components/agents/ocr-extraction-team/markdown-syntax-formatter.md +58 -0
- package/cli-tool/components/agents/ocr-extraction-team/ocr-grammar-fixer.md +36 -0
- package/cli-tool/components/agents/ocr-extraction-team/ocr-preprocessing-optimizer.md +37 -0
- package/cli-tool/components/agents/ocr-extraction-team/ocr-quality-assurance.md +62 -0
- package/cli-tool/components/agents/ocr-extraction-team/text-comparison-validator.md +60 -0
- package/cli-tool/components/agents/ocr-extraction-team/visual-analysis-ocr.md +52 -0
- package/cli-tool/components/agents/performance-testing/load-testing-specialist.md +37 -0
- package/cli-tool/components/agents/performance-testing/performance-engineer.md +33 -0
- package/cli-tool/components/agents/performance-testing/react-performance-optimization.md +65 -0
- package/cli-tool/components/agents/performance-testing/test-automator.md +33 -0
- package/cli-tool/components/agents/performance-testing/web-vitals-optimizer.md +37 -0
- package/cli-tool/components/agents/podcast-creator-team/academic-research-synthesizer.md +61 -0
- package/cli-tool/components/agents/podcast-creator-team/comprehensive-researcher.md +49 -0
- package/cli-tool/components/agents/podcast-creator-team/episode-orchestrator.md +52 -0
- package/cli-tool/components/agents/podcast-creator-team/guest-outreach-coordinator.md +37 -0
- package/cli-tool/components/agents/podcast-creator-team/market-research-analyst.md +54 -0
- package/cli-tool/components/agents/podcast-creator-team/podcast-editor.md +37 -0
- package/cli-tool/components/agents/podcast-creator-team/podcast-trend-scout.md +60 -0
- package/cli-tool/components/agents/podcast-creator-team/project-supervisor-orchestrator.md +48 -0
- package/cli-tool/components/agents/podcast-creator-team/seo-podcast-optimizer.md +58 -0
- package/cli-tool/components/agents/podcast-creator-team/social-media-copywriter.md +57 -0
- package/cli-tool/components/agents/podcast-creator-team/twitter-ai-influencer-manager.md +62 -0
- package/cli-tool/components/agents/programming-languages/c-pro.md +36 -0
- package/cli-tool/components/agents/programming-languages/c-sharp-pro.md +40 -0
- package/cli-tool/components/agents/programming-languages/cpp-pro.md +39 -0
- package/cli-tool/components/agents/programming-languages/golang-pro.md +33 -0
- package/cli-tool/components/agents/programming-languages/javascript-pro.md +36 -0
- package/cli-tool/components/agents/programming-languages/php-pro.md +44 -0
- package/cli-tool/components/agents/programming-languages/python-pro.md +33 -0
- package/cli-tool/components/agents/programming-languages/rust-pro.md +36 -0
- package/cli-tool/components/agents/programming-languages/shell-scripting-pro.md +38 -0
- package/cli-tool/components/agents/programming-languages/sql-pro.md +36 -0
- package/cli-tool/components/agents/programming-languages/typescript-pro.md +38 -0
- package/cli-tool/components/agents/realtime/supabase-realtime-optimizer.md +193 -0
- package/cli-tool/components/agents/security/api-security-audit.md +93 -0
- package/cli-tool/components/agents/security/compliance-specialist.md +37 -0
- package/cli-tool/components/agents/security/incident-responder.md +75 -0
- package/cli-tool/components/agents/security/penetration-tester.md +37 -0
- package/cli-tool/components/agents/security/security-auditor.md +33 -0
- package/cli-tool/components/agents/web-tools/nextjs-architecture-expert.md +194 -0
- package/cli-tool/components/agents/web-tools/react-performance-optimizer.md +425 -0
- package/cli-tool/components/agents/web-tools/seo-analyzer.md +37 -0
- package/cli-tool/components/agents/web-tools/url-context-validator.md +61 -0
- package/cli-tool/components/agents/web-tools/url-link-extractor.md +59 -0
- package/cli-tool/components/agents/web-tools/web-accessibility-checker.md +37 -0
- package/cli-tool/components/commands/automation/act.md +57 -0
- package/cli-tool/components/commands/automation/ci-pipeline.md +378 -0
- package/cli-tool/components/commands/automation/husky.md +130 -0
- package/cli-tool/components/commands/automation/workflow-orchestrator.md +576 -0
- package/cli-tool/components/commands/database/supabase-backup-manager.md +37 -0
- package/cli-tool/components/commands/database/supabase-data-explorer.md +37 -0
- package/cli-tool/components/commands/database/supabase-migration-assistant.md +37 -0
- package/cli-tool/components/commands/database/supabase-performance-optimizer.md +37 -0
- package/cli-tool/components/commands/database/supabase-realtime-monitor.md +37 -0
- package/cli-tool/components/commands/database/supabase-schema-sync.md +37 -0
- package/cli-tool/components/commands/database/supabase-security-audit.md +37 -0
- package/cli-tool/components/commands/database/supabase-type-generator.md +37 -0
- package/cli-tool/components/commands/deployment/add-changelog.md +92 -0
- package/cli-tool/components/commands/deployment/blue-green-deployment.md +824 -0
- package/cli-tool/components/commands/deployment/changelog-demo-command.md +43 -0
- package/cli-tool/components/commands/deployment/ci-setup.md +323 -0
- package/cli-tool/components/commands/deployment/containerize-application.md +93 -0
- package/cli-tool/components/commands/deployment/deployment-monitoring.md +1228 -0
- package/cli-tool/components/commands/deployment/hotfix-deploy.md +283 -0
- package/cli-tool/components/commands/deployment/prepare-release.md +357 -0
- package/cli-tool/components/commands/deployment/rollback-deploy.md +145 -0
- package/cli-tool/components/commands/deployment/setup-automated-releases.md +143 -0
- package/cli-tool/components/commands/deployment/setup-kubernetes-deployment.md +93 -0
- package/cli-tool/components/commands/documentation/create-architecture-documentation.md +95 -0
- package/cli-tool/components/commands/documentation/create-onboarding-guide.md +93 -0
- package/cli-tool/components/commands/documentation/doc-api.md +242 -0
- package/cli-tool/components/commands/documentation/docs-maintenance.md +119 -0
- package/cli-tool/components/commands/documentation/generate-api-documentation.md +97 -0
- package/cli-tool/components/commands/documentation/interactive-documentation.md +133 -0
- package/cli-tool/components/commands/documentation/load-llms-txt.md +39 -0
- package/cli-tool/components/commands/documentation/migration-guide.md +250 -0
- package/cli-tool/components/commands/documentation/troubleshooting-guide.md +370 -0
- package/cli-tool/components/commands/documentation/update-docs.md +107 -0
- package/cli-tool/components/commands/game-development/game-analytics-integration.md +128 -0
- package/cli-tool/components/commands/game-development/game-asset-pipeline.md +108 -0
- package/cli-tool/components/commands/game-development/game-performance-profiler.md +78 -0
- package/cli-tool/components/commands/game-development/game-testing-framework.md +112 -0
- package/cli-tool/components/commands/game-development/unity-project-setup.md +190 -0
- package/cli-tool/components/commands/git/feature.md +196 -0
- package/cli-tool/components/commands/git/finish.md +528 -0
- package/cli-tool/components/commands/git/flow-status.md +438 -0
- package/cli-tool/components/commands/git/hotfix.md +456 -0
- package/cli-tool/components/commands/git/release.md +381 -0
- package/cli-tool/components/commands/git-workflow/branch-cleanup.md +181 -0
- package/cli-tool/components/commands/git-workflow/commit.md +167 -0
- package/cli-tool/components/commands/git-workflow/create-pr.md +19 -0
- package/cli-tool/components/commands/git-workflow/create-pull-request.md +126 -0
- package/cli-tool/components/commands/git-workflow/create-worktrees.md +174 -0
- package/cli-tool/components/commands/git-workflow/fix-github-issue.md +13 -0
- package/cli-tool/components/commands/git-workflow/git-bisect-helper.md +261 -0
- package/cli-tool/components/commands/git-workflow/pr-review.md +76 -0
- package/cli-tool/components/commands/git-workflow/update-branch-name.md +9 -0
- package/cli-tool/components/commands/nextjs-vercel/nextjs-api-tester.md +480 -0
- package/cli-tool/components/commands/nextjs-vercel/nextjs-bundle-analyzer.md +406 -0
- package/cli-tool/components/commands/nextjs-vercel/nextjs-component-generator.md +489 -0
- package/cli-tool/components/commands/nextjs-vercel/nextjs-middleware-creator.md +712 -0
- package/cli-tool/components/commands/nextjs-vercel/nextjs-migration-helper.md +778 -0
- package/cli-tool/components/commands/nextjs-vercel/nextjs-performance-audit.md +653 -0
- package/cli-tool/components/commands/nextjs-vercel/nextjs-scaffold.md +237 -0
- package/cli-tool/components/commands/nextjs-vercel/vercel-deploy-optimize.md +341 -0
- package/cli-tool/components/commands/nextjs-vercel/vercel-edge-function.md +810 -0
- package/cli-tool/components/commands/nextjs-vercel/vercel-env-sync.md +666 -0
- package/cli-tool/components/commands/orchestration/archive.md +414 -0
- package/cli-tool/components/commands/orchestration/commit.md +305 -0
- package/cli-tool/components/commands/orchestration/find.md +272 -0
- package/cli-tool/components/commands/orchestration/log.md +355 -0
- package/cli-tool/components/commands/orchestration/move.md +220 -0
- package/cli-tool/components/commands/orchestration/optimize.md +375 -0
- package/cli-tool/components/commands/orchestration/remove.md +301 -0
- package/cli-tool/components/commands/orchestration/report.md +292 -0
- package/cli-tool/components/commands/orchestration/resume.md +256 -0
- package/cli-tool/components/commands/orchestration/start.md +169 -0
- package/cli-tool/components/commands/orchestration/status.md +219 -0
- package/cli-tool/components/commands/orchestration/sync.md +294 -0
- package/cli-tool/components/commands/performance/add-performance-monitoring.md +84 -0
- package/cli-tool/components/commands/performance/implement-caching-strategy.md +84 -0
- package/cli-tool/components/commands/performance/optimize-api-performance.md +119 -0
- package/cli-tool/components/commands/performance/optimize-build.md +139 -0
- package/cli-tool/components/commands/performance/optimize-bundle-size.md +84 -0
- package/cli-tool/components/commands/performance/optimize-database-performance.md +84 -0
- package/cli-tool/components/commands/performance/optimize-memory-usage.md +91 -0
- package/cli-tool/components/commands/performance/performance-audit.md +89 -0
- package/cli-tool/components/commands/performance/setup-cdn-optimization.md +84 -0
- package/cli-tool/components/commands/performance/system-behavior-simulator.md +415 -0
- package/cli-tool/components/commands/project-management/add-package.md +90 -0
- package/cli-tool/components/commands/project-management/add-to-changelog.md +37 -0
- package/cli-tool/components/commands/project-management/create-feature.md +130 -0
- package/cli-tool/components/commands/project-management/create-jtbd.md +37 -0
- package/cli-tool/components/commands/project-management/create-prd.md +36 -0
- package/cli-tool/components/commands/project-management/create-prp.md +37 -0
- package/cli-tool/components/commands/project-management/init-project.md +80 -0
- package/cli-tool/components/commands/project-management/milestone-tracker.md +44 -0
- package/cli-tool/components/commands/project-management/pac-configure.md +32 -0
- package/cli-tool/components/commands/project-management/pac-create-epic.md +41 -0
- package/cli-tool/components/commands/project-management/pac-create-ticket.md +42 -0
- package/cli-tool/components/commands/project-management/pac-update-status.md +39 -0
- package/cli-tool/components/commands/project-management/pac-validate.md +35 -0
- package/cli-tool/components/commands/project-management/project-health-check.md +58 -0
- package/cli-tool/components/commands/project-management/project-timeline-simulator.md +37 -0
- package/cli-tool/components/commands/project-management/project-to-linear.md +38 -0
- package/cli-tool/components/commands/project-management/release.md +31 -0
- package/cli-tool/components/commands/project-management/todo.md +62 -0
- package/cli-tool/components/commands/security/add-authentication-system.md +34 -0
- package/cli-tool/components/commands/security/dependency-audit.md +32 -0
- package/cli-tool/components/commands/security/penetration-test.md +40 -0
- package/cli-tool/components/commands/security/secrets-scanner.md +39 -0
- package/cli-tool/components/commands/security/security-audit.md +82 -0
- package/cli-tool/components/commands/security/security-hardening.md +33 -0
- package/cli-tool/components/commands/setup/create-database-migrations.md +35 -0
- package/cli-tool/components/commands/setup/design-database-schema.md +37 -0
- package/cli-tool/components/commands/setup/design-rest-api.md +37 -0
- package/cli-tool/components/commands/setup/implement-graphql-api.md +37 -0
- package/cli-tool/components/commands/setup/migrate-to-typescript.md +37 -0
- package/cli-tool/components/commands/setup/setup-ci-cd-pipeline.md +37 -0
- package/cli-tool/components/commands/setup/setup-development-environment.md +37 -0
- package/cli-tool/components/commands/setup/setup-docker-containers.md +37 -0
- package/cli-tool/components/commands/setup/setup-formatting.md +37 -0
- package/cli-tool/components/commands/setup/setup-linting.md +37 -0
- package/cli-tool/components/commands/setup/setup-monitoring-observability.md +37 -0
- package/cli-tool/components/commands/setup/setup-monorepo.md +37 -0
- package/cli-tool/components/commands/setup/setup-rate-limiting.md +37 -0
- package/cli-tool/components/commands/setup/update-dependencies.md +35 -0
- package/cli-tool/components/commands/simulation/business-scenario-explorer.md +37 -0
- package/cli-tool/components/commands/simulation/constraint-modeler.md +37 -0
- package/cli-tool/components/commands/simulation/decision-tree-explorer.md +37 -0
- package/cli-tool/components/commands/simulation/digital-twin-creator.md +37 -0
- package/cli-tool/components/commands/simulation/future-scenario-generator.md +37 -0
- package/cli-tool/components/commands/simulation/market-response-modeler.md +37 -0
- package/cli-tool/components/commands/simulation/monte-carlo-simulator.md +37 -0
- package/cli-tool/components/commands/simulation/simulation-calibrator.md +37 -0
- package/cli-tool/components/commands/simulation/system-dynamics-modeler.md +37 -0
- package/cli-tool/components/commands/simulation/timeline-compressor.md +37 -0
- package/cli-tool/components/commands/svelte/svelte:a11y.md +105 -0
- package/cli-tool/components/commands/svelte/svelte:component.md +81 -0
- package/cli-tool/components/commands/svelte/svelte:debug.md +48 -0
- package/cli-tool/components/commands/svelte/svelte:migrate.md +79 -0
- package/cli-tool/components/commands/svelte/svelte:optimize.md +99 -0
- package/cli-tool/components/commands/svelte/svelte:scaffold.md +89 -0
- package/cli-tool/components/commands/svelte/svelte:storybook-migrate.md +204 -0
- package/cli-tool/components/commands/svelte/svelte:storybook-mock.md +213 -0
- package/cli-tool/components/commands/svelte/svelte:storybook-setup.md +113 -0
- package/cli-tool/components/commands/svelte/svelte:storybook-story.md +145 -0
- package/cli-tool/components/commands/svelte/svelte:storybook-troubleshoot.md +191 -0
- package/cli-tool/components/commands/svelte/svelte:storybook.md +48 -0
- package/cli-tool/components/commands/svelte/svelte:test-coverage.md +77 -0
- package/cli-tool/components/commands/svelte/svelte:test-fix.md +74 -0
- package/cli-tool/components/commands/svelte/svelte:test-setup.md +85 -0
- package/cli-tool/components/commands/svelte/svelte:test.md +60 -0
- package/cli-tool/components/commands/sync/bidirectional-sync.md +37 -0
- package/cli-tool/components/commands/sync/bulk-import-issues.md +37 -0
- package/cli-tool/components/commands/sync/cross-reference-manager.md +37 -0
- package/cli-tool/components/commands/sync/issue-to-linear-task.md +37 -0
- package/cli-tool/components/commands/sync/linear-task-to-issue.md +37 -0
- package/cli-tool/components/commands/sync/sync-automation-setup.md +37 -0
- package/cli-tool/components/commands/sync/sync-conflict-resolver.md +37 -0
- package/cli-tool/components/commands/sync/sync-health-monitor.md +37 -0
- package/cli-tool/components/commands/sync/sync-issues-to-linear.md +37 -0
- package/cli-tool/components/commands/sync/sync-linear-to-issues.md +37 -0
- package/cli-tool/components/commands/sync/sync-migration-assistant.md +37 -0
- package/cli-tool/components/commands/sync/sync-pr-to-task.md +37 -0
- package/cli-tool/components/commands/sync/sync-status.md +391 -0
- package/cli-tool/components/commands/sync/task-from-pr.md +37 -0
- package/cli-tool/components/commands/team/architecture-review.md +37 -0
- package/cli-tool/components/commands/team/decision-quality-analyzer.md +37 -0
- package/cli-tool/components/commands/team/dependency-mapper.md +37 -0
- package/cli-tool/components/commands/team/estimate-assistant.md +37 -0
- package/cli-tool/components/commands/team/issue-triage.md +37 -0
- package/cli-tool/components/commands/team/memory-spring-cleaning.md +37 -0
- package/cli-tool/components/commands/team/migration-assistant.md +37 -0
- package/cli-tool/components/commands/team/retrospective-analyzer.md +37 -0
- package/cli-tool/components/commands/team/session-learning-capture.md +37 -0
- package/cli-tool/components/commands/team/sprint-planning.md +189 -0
- package/cli-tool/components/commands/team/standup-report.md +37 -0
- package/cli-tool/components/commands/team/team-knowledge-mapper.md +37 -0
- package/cli-tool/components/commands/team/team-velocity-tracker.md +37 -0
- package/cli-tool/components/commands/team/team-workload-balancer.md +37 -0
- package/cli-tool/components/commands/testing/add-mutation-testing.md +37 -0
- package/cli-tool/components/commands/testing/add-property-based-testing.md +37 -0
- package/cli-tool/components/commands/testing/e2e-setup.md +37 -0
- package/cli-tool/components/commands/testing/generate-test-cases.md +37 -0
- package/cli-tool/components/commands/testing/generate-tests.md +82 -0
- package/cli-tool/components/commands/testing/setup-comprehensive-testing.md +37 -0
- package/cli-tool/components/commands/testing/setup-load-testing.md +37 -0
- package/cli-tool/components/commands/testing/setup-visual-testing.md +37 -0
- package/cli-tool/components/commands/testing/test-automation-orchestrator.md +37 -0
- package/cli-tool/components/commands/testing/test-changelog-automation.md +37 -0
- package/cli-tool/components/commands/testing/test-coverage.md +37 -0
- package/cli-tool/components/commands/testing/test-quality-analyzer.md +37 -0
- package/cli-tool/components/commands/testing/testing_plan_integration.md +37 -0
- package/cli-tool/components/commands/testing/write-tests.md +37 -0
- package/cli-tool/components/commands/utilities/all-tools.md +31 -0
- package/cli-tool/components/commands/utilities/architecture-scenario-explorer.md +375 -0
- package/cli-tool/components/commands/utilities/check-file.md +53 -0
- package/cli-tool/components/commands/utilities/clean-branches.md +243 -0
- package/cli-tool/components/commands/utilities/clean.md +1 -0
- package/cli-tool/components/commands/utilities/code-permutation-tester.md +341 -0
- package/cli-tool/components/commands/utilities/code-review.md +70 -0
- package/cli-tool/components/commands/utilities/code-to-task.md +583 -0
- package/cli-tool/components/commands/utilities/context-prime.md +1 -0
- package/cli-tool/components/commands/utilities/debug-error.md +121 -0
- package/cli-tool/components/commands/utilities/directory-deep-dive.md +34 -0
- package/cli-tool/components/commands/utilities/explain-code.md +194 -0
- package/cli-tool/components/commands/utilities/fix-issue.md +85 -0
- package/cli-tool/components/commands/utilities/generate-linear-worklog.md +113 -0
- package/cli-tool/components/commands/utilities/git-status.md +39 -0
- package/cli-tool/components/commands/utilities/initref.md +3 -0
- package/cli-tool/components/commands/utilities/prime.md +41 -0
- package/cli-tool/components/commands/utilities/refactor-code.md +116 -0
- package/cli-tool/components/commands/utilities/ultra-think.md +153 -0
- package/cli-tool/components/hooks/HOOK_PATTERNS_COMPRESSED.json +1 -0
- package/cli-tool/components/hooks/automation/agents-md-loader.json +17 -0
- package/cli-tool/components/hooks/automation/build-on-change.json +16 -0
- package/cli-tool/components/hooks/automation/dependency-checker.json +16 -0
- package/cli-tool/components/hooks/automation/deployment-health-monitor.json +29 -0
- package/cli-tool/components/hooks/automation/discord-detailed-notifications.json +26 -0
- package/cli-tool/components/hooks/automation/discord-error-notifications.json +37 -0
- package/cli-tool/components/hooks/automation/discord-notifications.json +25 -0
- package/cli-tool/components/hooks/automation/simple-notifications.json +16 -0
- package/cli-tool/components/hooks/automation/slack-detailed-notifications.json +26 -0
- package/cli-tool/components/hooks/automation/slack-error-notifications.json +37 -0
- package/cli-tool/components/hooks/automation/slack-notifications.json +25 -0
- package/cli-tool/components/hooks/automation/telegram-detailed-notifications.json +26 -0
- package/cli-tool/components/hooks/automation/telegram-error-notifications.json +37 -0
- package/cli-tool/components/hooks/automation/telegram-notifications.json +25 -0
- package/cli-tool/components/hooks/automation/vercel-auto-deploy.json +17 -0
- package/cli-tool/components/hooks/automation/vercel-environment-sync.json +29 -0
- package/cli-tool/components/hooks/development-tools/change-tracker.json +25 -0
- package/cli-tool/components/hooks/development-tools/command-logger.json +16 -0
- package/cli-tool/components/hooks/development-tools/file-backup.json +16 -0
- package/cli-tool/components/hooks/development-tools/lint-on-save.json +16 -0
- package/cli-tool/components/hooks/development-tools/nextjs-code-quality-enforcer.json +17 -0
- package/cli-tool/components/hooks/development-tools/smart-formatting.json +16 -0
- package/cli-tool/components/hooks/git/conventional-commits.json +16 -0
- package/cli-tool/components/hooks/git/conventional-commits.py +84 -0
- package/cli-tool/components/hooks/git/prevent-direct-push.json +16 -0
- package/cli-tool/components/hooks/git/prevent-direct-push.py +86 -0
- package/cli-tool/components/hooks/git/validate-branch-name.json +16 -0
- package/cli-tool/components/hooks/git/validate-branch-name.py +96 -0
- package/cli-tool/components/hooks/git-workflow/auto-git-add.json +16 -0
- package/cli-tool/components/hooks/git-workflow/smart-commit.json +25 -0
- package/cli-tool/components/hooks/performance/performance-budget-guard.json +27 -0
- package/cli-tool/components/hooks/performance/performance-monitor.json +27 -0
- package/cli-tool/components/hooks/post-tool/format-javascript-files.json +16 -0
- package/cli-tool/components/hooks/post-tool/format-python-files.json +16 -0
- package/cli-tool/components/hooks/post-tool/git-add-changes.json +25 -0
- package/cli-tool/components/hooks/post-tool/run-tests-after-changes.json +16 -0
- package/cli-tool/components/hooks/pre-tool/backup-before-edit.json +16 -0
- package/cli-tool/components/hooks/pre-tool/notify-before-bash.json +16 -0
- package/cli-tool/components/hooks/pre-tool/update-search-year.json +17 -0
- package/cli-tool/components/hooks/security/file-protection.json +16 -0
- package/cli-tool/components/hooks/security/security-scanner.json +16 -0
- package/cli-tool/components/hooks/testing/test-runner.json +16 -0
- package/cli-tool/components/mcps/browser_automation/browser-use-mcp-server.json +20 -0
- package/cli-tool/components/mcps/browser_automation/browsermcp.json +9 -0
- package/cli-tool/components/mcps/browser_automation/mcp-server-browserbase.json +14 -0
- package/cli-tool/components/mcps/browser_automation/mcp-server-playwright.json +9 -0
- package/cli-tool/components/mcps/browser_automation/playwright-mcp-server.json +9 -0
- package/cli-tool/components/mcps/browser_automation/playwright-mcp.json +11 -0
- package/cli-tool/components/mcps/database/mysql-integration.json +12 -0
- package/cli-tool/components/mcps/database/neon.json +9 -0
- package/cli-tool/components/mcps/database/postgresql-integration.json +12 -0
- package/cli-tool/components/mcps/database/supabase.json +17 -0
- package/cli-tool/components/mcps/deepgraph/deepgraph-nextjs.json +13 -0
- package/cli-tool/components/mcps/deepgraph/deepgraph-react.json +13 -0
- package/cli-tool/components/mcps/deepgraph/deepgraph-typescript.json +13 -0
- package/cli-tool/components/mcps/deepgraph/deepgraph-vue.json +13 -0
- package/cli-tool/components/mcps/devtools/azure-kubernetes-service.json +11 -0
- package/cli-tool/components/mcps/devtools/box.json +14 -0
- package/cli-tool/components/mcps/devtools/circleci.json +13 -0
- package/cli-tool/components/mcps/devtools/codacy.json +12 -0
- package/cli-tool/components/mcps/devtools/context7.json +9 -0
- package/cli-tool/components/mcps/devtools/dynatrace.json +13 -0
- package/cli-tool/components/mcps/devtools/elasticsearch.json +18 -0
- package/cli-tool/components/mcps/devtools/figma-dev-mode.json +8 -0
- package/cli-tool/components/mcps/devtools/firecrawl.json +12 -0
- package/cli-tool/components/mcps/devtools/firefly-mcp.json +13 -0
- package/cli-tool/components/mcps/devtools/huggingface.json +11 -0
- package/cli-tool/components/mcps/devtools/imagesorcery.json +11 -0
- package/cli-tool/components/mcps/devtools/ios-simulator-mcp.json +9 -0
- package/cli-tool/components/mcps/devtools/jfrog.json +8 -0
- package/cli-tool/components/mcps/devtools/just-mcp.json +9 -0
- package/cli-tool/components/mcps/devtools/launchdarkly.json +12 -0
- package/cli-tool/components/mcps/devtools/leetcode.json +8 -0
- package/cli-tool/components/mcps/devtools/logfire.json +9 -0
- package/cli-tool/components/mcps/devtools/markitdown.json +14 -0
- package/cli-tool/components/mcps/devtools/mcp-server-atlassian-bitbucket.json +9 -0
- package/cli-tool/components/mcps/devtools/mcp-server-trello.json +12 -0
- package/cli-tool/components/mcps/devtools/microsoft-clarity.json +11 -0
- package/cli-tool/components/mcps/devtools/microsoft-dev-box.json +9 -0
- package/cli-tool/components/mcps/devtools/mongodb.json +12 -0
- package/cli-tool/components/mcps/devtools/postman.json +12 -0
- package/cli-tool/components/mcps/devtools/sentry.json +8 -0
- package/cli-tool/components/mcps/devtools/serena.json +9 -0
- package/cli-tool/components/mcps/devtools/stripe.json +12 -0
- package/cli-tool/components/mcps/devtools/terraform.json +14 -0
- package/cli-tool/components/mcps/devtools/webflow.json +8 -0
- package/cli-tool/components/mcps/filesystem/filesystem-access.json +13 -0
- package/cli-tool/components/mcps/integration/github-integration.json +12 -0
- package/cli-tool/components/mcps/integration/memory-integration.json +9 -0
- package/cli-tool/components/mcps/marketing/facebook-ads-mcp-server.json +13 -0
- package/cli-tool/components/mcps/marketing/google-ads-mcp-server.json +11 -0
- package/cli-tool/components/mcps/productivity/monday.json +14 -0
- package/cli-tool/components/mcps/productivity/notion.json +12 -0
- package/cli-tool/components/mcps/web/web-fetch.json +9 -0
- package/cli-tool/components/settings/api/bedrock-configuration.json +7 -0
- package/cli-tool/components/settings/api/corporate-proxy.json +7 -0
- package/cli-tool/components/settings/api/custom-headers.json +6 -0
- package/cli-tool/components/settings/api/vertex-configuration.json +17 -0
- package/cli-tool/components/settings/authentication/api-key-helper.json +7 -0
- package/cli-tool/components/settings/authentication/force-claudeai-login.json +4 -0
- package/cli-tool/components/settings/authentication/force-console-login.json +4 -0
- package/cli-tool/components/settings/cleanup/retention-7-days.json +4 -0
- package/cli-tool/components/settings/cleanup/retention-90-days.json +4 -0
- package/cli-tool/components/settings/environment/bash-timeouts.json +8 -0
- package/cli-tool/components/settings/environment/development-utils.json +8 -0
- package/cli-tool/components/settings/environment/performance-optimization.json +8 -0
- package/cli-tool/components/settings/environment/privacy-focused.json +10 -0
- package/cli-tool/components/settings/git/git-flow-settings.json +79 -0
- package/cli-tool/components/settings/global/aws-credentials.json +5 -0
- package/cli-tool/components/settings/global/custom-model.json +7 -0
- package/cli-tool/components/settings/global/git-commit-settings.json +4 -0
- package/cli-tool/components/settings/mcp/disable-risky-servers.json +8 -0
- package/cli-tool/components/settings/mcp/enable-all-project-servers.json +4 -0
- package/cli-tool/components/settings/mcp/enable-specific-servers.json +8 -0
- package/cli-tool/components/settings/mcp/mcp-timeouts.json +8 -0
- package/cli-tool/components/settings/model/use-haiku.json +4 -0
- package/cli-tool/components/settings/model/use-sonnet.json +4 -0
- package/cli-tool/components/settings/permissions/additional-directories.json +11 -0
- package/cli-tool/components/settings/permissions/allow-git-operations.json +14 -0
- package/cli-tool/components/settings/permissions/allow-npm-commands.json +11 -0
- package/cli-tool/components/settings/permissions/deny-sensitive-files.json +11 -0
- package/cli-tool/components/settings/permissions/development-mode.json +31 -0
- package/cli-tool/components/settings/permissions/read-only-mode.json +18 -0
- package/cli-tool/components/settings/statusline/asset-pipeline-controller-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/bug-circus-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/code-casino-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/code-spaceship-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/colorful-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/command-statusline.json +8 -0
- package/cli-tool/components/settings/statusline/context-monitor.json +7 -0
- package/cli-tool/components/settings/statusline/context-monitor.py +236 -0
- package/cli-tool/components/settings/statusline/data-ocean-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/emotion-theater-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/game-performance-monitor-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/git-branch-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/git-flow-status.json +7 -0
- package/cli-tool/components/settings/statusline/minimal-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/multiplatform-build-status-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/neon-database-dev.json +7 -0
- package/cli-tool/components/settings/statusline/neon-database-resources.json +7 -0
- package/cli-tool/components/settings/statusline/productivity-rainbow-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/programmer-tamagotchi-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/programming-fitness-tracker-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/project-info-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/rpg-status-bar-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/time-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/unity-project-dashboard-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/vercel-deployment-monitor.json +7 -0
- package/cli-tool/components/settings/statusline/vercel-error-alert-system.json +7 -0
- package/cli-tool/components/settings/statusline/vercel-multi-env-status.json +7 -0
- package/cli-tool/components/settings/statusline/virtual-code-garden-statusline.json +7 -0
- package/cli-tool/components/settings/statusline/zero-config-deployment-monitor.json +7 -0
- package/cli-tool/components/settings/telemetry/custom-telemetry.json +7 -0
- package/cli-tool/components/settings/telemetry/disable-telemetry.json +6 -0
- package/cli-tool/components/settings/telemetry/enable-telemetry.json +6 -0
- package/cli-tool/docs_to_claude/ANALYTICS_STATE_DETECTION.md +183 -0
- package/cli-tool/docs_to_claude/ARCHITECTURE.md +472 -0
- package/cli-tool/docs_to_claude/BLOG_WRITING_GUIDE.md +438 -0
- package/cli-tool/docs_to_claude/CLAUDE_DATA_STRUCTURE.md +400 -0
- package/cli-tool/docs_to_claude/COMMANDS_GUIDE.md +1035 -0
- package/cli-tool/docs_to_claude/CONVERSATION_STATE_IMPROVEMENTS.md +154 -0
- package/cli-tool/docs_to_claude/DEBUG_TYPING_DETECTION.md +95 -0
- package/cli-tool/docs_to_claude/DOWNLOAD_TRACKING.md +291 -0
- package/cli-tool/docs_to_claude/ENHANCED_STATE_DETECTION.md +122 -0
- package/cli-tool/docs_to_claude/HEALTH_CHECK_IMPLEMENTATION.md +135 -0
- package/cli-tool/docs_to_claude/HOOKS_GUIDE.md +1249 -0
- package/cli-tool/docs_to_claude/STATUSLINE_GUIDE.md +1123 -0
- package/cli-tool/docs_to_claude/SUBAGENTS_GUIDE.md +566 -0
- package/cli-tool/docs_to_claude/SUB_AGENTS.md +329 -0
- package/cli-tool/jest.config.js +84 -0
- package/cli-tool/package-lock.json +5471 -0
- package/cli-tool/package.json +96 -0
- package/{src → cli-tool/src}/index.js +41 -1
- package/cli-tool/templates/common/.claude/commands/git-workflow.md +239 -0
- package/cli-tool/templates/common/.claude/commands/project-setup.md +316 -0
- package/cli-tool/templates/common/.mcp.json +41 -0
- package/cli-tool/templates/common/CLAUDE.md +109 -0
- package/cli-tool/templates/common/README.md +96 -0
- package/cli-tool/templates/go/.mcp.json +78 -0
- package/cli-tool/templates/go/README.md +25 -0
- package/cli-tool/templates/javascript-typescript/.claude/commands/api-endpoint.md +51 -0
- package/cli-tool/templates/javascript-typescript/.claude/commands/debug.md +52 -0
- package/cli-tool/templates/javascript-typescript/.claude/commands/lint.md +48 -0
- package/cli-tool/templates/javascript-typescript/.claude/commands/npm-scripts.md +48 -0
- package/cli-tool/templates/javascript-typescript/.claude/commands/refactor.md +55 -0
- package/cli-tool/templates/javascript-typescript/.claude/commands/test.md +61 -0
- package/cli-tool/templates/javascript-typescript/.claude/commands/typescript-migrate.md +51 -0
- package/cli-tool/templates/javascript-typescript/.claude/settings.json +142 -0
- package/cli-tool/templates/javascript-typescript/.mcp.json +80 -0
- package/cli-tool/templates/javascript-typescript/CLAUDE.md +185 -0
- package/cli-tool/templates/javascript-typescript/README.md +259 -0
- package/cli-tool/templates/javascript-typescript/examples/angular-app/.claude/commands/components.md +63 -0
- package/cli-tool/templates/javascript-typescript/examples/angular-app/.claude/commands/services.md +62 -0
- package/cli-tool/templates/javascript-typescript/examples/node-api/.claude/commands/api-endpoint.md +46 -0
- package/cli-tool/templates/javascript-typescript/examples/node-api/.claude/commands/database.md +56 -0
- package/cli-tool/templates/javascript-typescript/examples/node-api/.claude/commands/middleware.md +61 -0
- package/cli-tool/templates/javascript-typescript/examples/node-api/.claude/commands/route.md +57 -0
- package/cli-tool/templates/javascript-typescript/examples/node-api/CLAUDE.md +102 -0
- package/cli-tool/templates/javascript-typescript/examples/react-app/.claude/commands/component.md +29 -0
- package/cli-tool/templates/javascript-typescript/examples/react-app/.claude/commands/hooks.md +44 -0
- package/cli-tool/templates/javascript-typescript/examples/react-app/.claude/commands/state-management.md +45 -0
- package/cli-tool/templates/javascript-typescript/examples/react-app/CLAUDE.md +81 -0
- package/cli-tool/templates/javascript-typescript/examples/react-app/agents/react-performance-optimization.md +530 -0
- package/cli-tool/templates/javascript-typescript/examples/react-app/agents/react-state-management.md +295 -0
- package/cli-tool/templates/javascript-typescript/examples/vue-app/.claude/commands/components.md +46 -0
- package/cli-tool/templates/javascript-typescript/examples/vue-app/.claude/commands/composables.md +51 -0
- package/cli-tool/templates/python/.claude/commands/lint.md +111 -0
- package/cli-tool/templates/python/.claude/commands/test.md +73 -0
- package/cli-tool/templates/python/.claude/settings.json +153 -0
- package/cli-tool/templates/python/.mcp.json +78 -0
- package/cli-tool/templates/python/CLAUDE.md +276 -0
- package/cli-tool/templates/python/examples/django-app/.claude/commands/admin.md +264 -0
- package/cli-tool/templates/python/examples/django-app/.claude/commands/django-model.md +124 -0
- package/cli-tool/templates/python/examples/django-app/.claude/commands/views.md +222 -0
- package/cli-tool/templates/python/examples/django-app/CLAUDE.md +313 -0
- package/cli-tool/templates/python/examples/fastapi-app/.claude/commands/api-endpoints.md +513 -0
- package/cli-tool/templates/python/examples/fastapi-app/.claude/commands/auth.md +775 -0
- package/cli-tool/templates/python/examples/fastapi-app/.claude/commands/database.md +657 -0
- package/cli-tool/templates/python/examples/fastapi-app/.claude/commands/deployment.md +160 -0
- package/cli-tool/templates/python/examples/fastapi-app/.claude/commands/testing.md +927 -0
- package/cli-tool/templates/python/examples/fastapi-app/CLAUDE.md +229 -0
- package/cli-tool/templates/python/examples/flask-app/.claude/commands/app-factory.md +384 -0
- package/cli-tool/templates/python/examples/flask-app/.claude/commands/blueprint.md +243 -0
- package/cli-tool/templates/python/examples/flask-app/.claude/commands/database.md +410 -0
- package/cli-tool/templates/python/examples/flask-app/.claude/commands/deployment.md +620 -0
- package/cli-tool/templates/python/examples/flask-app/.claude/commands/flask-route.md +217 -0
- package/cli-tool/templates/python/examples/flask-app/.claude/commands/testing.md +559 -0
- package/cli-tool/templates/python/examples/flask-app/CLAUDE.md +391 -0
- package/cli-tool/templates/ruby/.claude/commands/model.md +360 -0
- package/cli-tool/templates/ruby/.claude/commands/test.md +480 -0
- package/cli-tool/templates/ruby/.claude/settings.json +146 -0
- package/cli-tool/templates/ruby/.mcp.json +83 -0
- package/cli-tool/templates/ruby/CLAUDE.md +284 -0
- package/cli-tool/templates/ruby/examples/rails-app/.claude/commands/authentication.md +490 -0
- package/cli-tool/templates/ruby/examples/rails-app/CLAUDE.md +376 -0
- package/cli-tool/templates/rust/.mcp.json +78 -0
- package/cli-tool/templates/rust/README.md +26 -0
- package/cli-tool/test-commands.sh +85 -0
- package/cli-tool/test-detailed.sh +267 -0
- package/dev-server.js +46 -0
- package/docs/CNAME +1 -0
- package/docs/README.md +49 -0
- package/docs/_config.yml +43 -0
- package/docs/api/agents.json +942 -0
- package/docs/blog/assets/aitmpl-nextjs-search.png +0 -0
- package/docs/blog/assets/aitmpl-supabase-search.png +0 -0
- package/docs/blog/assets/e2b-claude-code-sandbox-cover.png +0 -0
- package/docs/blog/assets/nextjs-vercel-claude-code-templates-cover.png +0 -0
- package/docs/blog/assets/supabase-claude-code-templates-cover.png +0 -0
- package/docs/blog/e2b-claude-code-sandbox/index.html +908 -0
- package/docs/blog/index.html +274 -0
- package/docs/blog/nextjs-vercel-claude-code-integration/index.html +1032 -0
- package/docs/blog/supabase-claude-code-integration/index.html +848 -0
- package/docs/claude-jobs.json +163 -0
- package/docs/component.html +506 -0
- package/docs/components-metadata.json +303 -0
- package/docs/components.json +4952 -0
- package/docs/css/blog.css +821 -0
- package/docs/css/component-page.css +1063 -0
- package/docs/css/stack-page.css +776 -0
- package/docs/css/styles.css +4540 -0
- package/docs/css/trending.css +1441 -0
- package/docs/css/workflows-modal.css +739 -0
- package/docs/css/workflows.css +1234 -0
- package/docs/download-stats.html +527 -0
- package/docs/index.html +627 -0
- package/docs/jobs.html +1059 -0
- package/docs/js/carousel.js +177 -0
- package/docs/js/cart-manager.js +658 -0
- package/docs/js/component-page.js +808 -0
- package/docs/js/data-loader.js +633 -0
- package/docs/js/generate-search-data.js +82 -0
- package/docs/js/index-events.js +1812 -0
- package/docs/js/modal-helpers.js +345 -0
- package/docs/js/script.js +2167 -0
- package/docs/js/search-functionality.js +1165 -0
- package/docs/js/stack-router.js +561 -0
- package/docs/js/trending.js +752 -0
- package/docs/js/utils.js +43 -0
- package/docs/js/workflows-events.js +1146 -0
- package/docs/js/workflows.js +627 -0
- package/docs/robots.txt +28 -0
- package/docs/sandbox-interface.html +1418 -0
- package/docs/sitemap.xml +193 -0
- package/docs/static/img/logo.png +0 -0
- package/docs/static/img/logo.svg +23 -0
- package/docs/trending-data.json +885 -0
- package/docs/trending.html +238 -0
- package/docs/vercel.json +36 -0
- package/docs/workflows.html +391 -0
- package/docu/README.md +41 -0
- package/docu/docs/cli-options.md +90 -0
- package/docu/docs/components/agents.md +113 -0
- package/docu/docs/components/commands.md +90 -0
- package/docu/docs/components/hooks.md +114 -0
- package/docu/docs/components/mcps.md +109 -0
- package/docu/docs/components/overview.md +73 -0
- package/docu/docs/components/settings.md +105 -0
- package/docu/docs/components/templates.md +119 -0
- package/docu/docs/intro.md +40 -0
- package/docu/docs/safety-features.md +13 -0
- package/docu/docs/support.md +13 -0
- package/docu/docs/tools/analytics.md +23 -0
- package/docu/docs/tools/chats.md +33 -0
- package/docu/docs/tools/health-check.md +60 -0
- package/docu/docs/tools/overview.md +39 -0
- package/docu/docs/tools/sandbox.md +61 -0
- package/docu/docs/tools/tunnel.md +38 -0
- package/docu/docusaurus.config.ts +169 -0
- package/docu/package-lock.json +16185 -0
- package/docu/package.json +47 -0
- package/docu/sidebars.ts +49 -0
- package/docu/src/components/HomepageFeatures/index.tsx +82 -0
- package/docu/src/components/HomepageFeatures/styles.module.css +131 -0
- package/docu/src/css/custom.css +849 -0
- package/docu/src/pages/index.module.css +111 -0
- package/docu/src/pages/index.tsx +65 -0
- package/docu/src/pages/markdown-page.md +7 -0
- package/docu/static/img/favicon.ico +0 -0
- package/docu/static/img/logo.svg +23 -0
- package/docu/tsconfig.json +8 -0
- package/docu/vercel.json +11 -0
- package/generate_agents_api.py +65 -0
- package/generate_claude_jobs.py +985 -0
- package/generate_components_json.py +391 -0
- package/package.json +21 -74
- package/social-preview.png +0 -0
- package/test_serpapi.py +36 -0
- package/vercel.json +111 -0
- /package/{bin → cli-tool/bin}/create-claude-config.js +0 -0
- /package/{components → cli-tool/components}/sandbox/README.md +0 -0
- /package/{components → cli-tool/components}/sandbox/e2b/.env.example +0 -0
- /package/{components → cli-tool/components}/sandbox/e2b/SANDBOX_DEBUGGING.md +0 -0
- /package/{components → cli-tool/components}/sandbox/e2b/claude-code-sandbox.md +0 -0
- /package/{components → cli-tool/components}/sandbox/e2b/e2b-launcher.py +0 -0
- /package/{components → cli-tool/components}/sandbox/e2b/e2b-monitor.py +0 -0
- /package/{components → cli-tool/components}/sandbox/e2b/requirements.txt +0 -0
- /package/{src → cli-tool/src}/agents.js +0 -0
- /package/{src → cli-tool/src}/analytics/core/AgentAnalyzer.js +0 -0
- /package/{src → cli-tool/src}/analytics/core/ConversationAnalyzer.js +0 -0
- /package/{src → cli-tool/src}/analytics/core/FileWatcher.js +0 -0
- /package/{src → cli-tool/src}/analytics/core/ProcessDetector.js +0 -0
- /package/{src → cli-tool/src}/analytics/core/SessionAnalyzer.js +0 -0
- /package/{src → cli-tool/src}/analytics/core/StateCalculator.js +0 -0
- /package/{src → cli-tool/src}/analytics/data/DataCache.js +0 -0
- /package/{src → cli-tool/src}/analytics/notifications/NotificationManager.js +0 -0
- /package/{src → cli-tool/src}/analytics/notifications/WebSocketServer.js +0 -0
- /package/{src → cli-tool/src}/analytics/utils/PerformanceMonitor.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/FRONT_ARCHITECTURE.md +0 -0
- /package/{src → cli-tool/src}/analytics-web/assets/js/main.js.deprecated +0 -0
- /package/{src → cli-tool/src}/analytics-web/chats_mobile.html +0 -0
- /package/{src → cli-tool/src}/analytics-web/components/ActivityHeatmap.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/components/AgentAnalytics.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/components/App.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/components/Charts.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/components/ConversationTable.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/components/DashboardPage.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/components/HeaderComponent.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/components/SessionTimer.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/components/Sidebar.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/components/ToolDisplay.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/index.html +0 -0
- /package/{src → cli-tool/src}/analytics-web/index.html.original +0 -0
- /package/{src → cli-tool/src}/analytics-web/services/DataService.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/services/StateService.js +0 -0
- /package/{src → cli-tool/src}/analytics-web/services/WebSocketService.js +0 -0
- /package/{src → cli-tool/src}/analytics.js +0 -0
- /package/{src → cli-tool/src}/chats-mobile.js +0 -0
- /package/{src → cli-tool/src}/claude-api-proxy.js +0 -0
- /package/{src → cli-tool/src}/command-scanner.js +0 -0
- /package/{src → cli-tool/src}/command-stats.js +0 -0
- /package/{src → cli-tool/src}/console-bridge.js +0 -0
- /package/{src → cli-tool/src}/file-operations.js +0 -0
- /package/{src → cli-tool/src}/health-check.js +0 -0
- /package/{src → cli-tool/src}/hook-scanner.js +0 -0
- /package/{src → cli-tool/src}/hook-stats.js +0 -0
- /package/{src → cli-tool/src}/mcp-stats.js +0 -0
- /package/{src → cli-tool/src}/prompts.js +0 -0
- /package/{src → cli-tool/src}/sandbox-interface.html +0 -0
- /package/{src → cli-tool/src}/sandbox-server.js +0 -0
- /package/{src → cli-tool/src}/sdk/global-agent-manager.js +0 -0
- /package/{src → cli-tool/src}/templates.js +0 -0
- /package/{src → cli-tool/src}/test-console-bridge.js +0 -0
- /package/{src → cli-tool/src}/tracking-service.js +0 -0
- /package/{src → cli-tool/src}/utils.js +0 -0
- /package/{src/analytics.log → docu/static/.nojekyll} +0 -0
|
@@ -0,0 +1,985 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import json
|
|
3
|
+
import requests
|
|
4
|
+
from datetime import datetime
|
|
5
|
+
from dotenv import load_dotenv
|
|
6
|
+
import time
|
|
7
|
+
import re
|
|
8
|
+
|
|
9
|
+
# Load environment variables
|
|
10
|
+
load_dotenv()
|
|
11
|
+
|
|
12
|
+
def scrape_with_rapidapi_jobs():
|
|
13
|
+
"""
|
|
14
|
+
Use RapidAPI Jobs Search to find Claude-related positions
|
|
15
|
+
"""
|
|
16
|
+
jobs = []
|
|
17
|
+
try:
|
|
18
|
+
print("🔍 Searching with RapidAPI Jobs API for Claude positions...")
|
|
19
|
+
|
|
20
|
+
rapidapi_key = os.getenv("RAPIDAPI_KEY")
|
|
21
|
+
if not rapidapi_key:
|
|
22
|
+
print("⚠️ Warning: No RapidAPI key found, skipping")
|
|
23
|
+
return jobs
|
|
24
|
+
|
|
25
|
+
url = "https://jobs-search-realtime-data-api.p.rapidapi.com/jobs/search"
|
|
26
|
+
|
|
27
|
+
# Search for Claude-specific terms
|
|
28
|
+
search_queries = [
|
|
29
|
+
"Claude Code",
|
|
30
|
+
"Anthropic Claude",
|
|
31
|
+
"Claude AI developer",
|
|
32
|
+
"Claude assistant engineer"
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
headers = {
|
|
36
|
+
"x-rapidapi-key": rapidapi_key,
|
|
37
|
+
"x-rapidapi-host": "jobs-search-realtime-data-api.p.rapidapi.com"
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
for query in search_queries:
|
|
41
|
+
querystring = {
|
|
42
|
+
"query": query,
|
|
43
|
+
"location": "Remote",
|
|
44
|
+
"num_results": "20"
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
response = requests.get(url, headers=headers, params=querystring)
|
|
48
|
+
|
|
49
|
+
if response.status_code == 200:
|
|
50
|
+
data = response.json()
|
|
51
|
+
job_results = data.get('jobs', [])
|
|
52
|
+
|
|
53
|
+
for job_data in job_results:
|
|
54
|
+
# Extract job information
|
|
55
|
+
job = {
|
|
56
|
+
'company': job_data.get('company_name', 'Unknown'),
|
|
57
|
+
'company_icon': job_data.get('company_logo', get_company_icon(job_data.get('company_name', ''))),
|
|
58
|
+
'location': job_data.get('location', 'Remote'),
|
|
59
|
+
'description': truncate_description(job_data.get('description', job_data.get('title', ''))),
|
|
60
|
+
'job_link': job_data.get('url', ''),
|
|
61
|
+
'source': 'RapidAPI Jobs',
|
|
62
|
+
'date_posted': job_data.get('date_posted', ''),
|
|
63
|
+
'salary': extract_salary_from_text(job_data.get('description', ''))
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# Validate it actually mentions Claude
|
|
67
|
+
full_text = f"{job_data.get('title', '')} {job_data.get('description', '')}"
|
|
68
|
+
if is_claude_code_related(full_text):
|
|
69
|
+
jobs.append(job)
|
|
70
|
+
|
|
71
|
+
time.sleep(1) # Rate limiting
|
|
72
|
+
|
|
73
|
+
print(f"✅ Found {len(jobs)} jobs from RapidAPI")
|
|
74
|
+
|
|
75
|
+
except Exception as e:
|
|
76
|
+
print(f"⚠️ Error with RapidAPI: {e}")
|
|
77
|
+
|
|
78
|
+
return jobs
|
|
79
|
+
|
|
80
|
+
def scrape_with_serper_jobs():
|
|
81
|
+
"""
|
|
82
|
+
Use Google Serper API to find Claude positions
|
|
83
|
+
"""
|
|
84
|
+
jobs = []
|
|
85
|
+
try:
|
|
86
|
+
print("🔍 Searching with Google Serper API for Claude positions...")
|
|
87
|
+
|
|
88
|
+
serper_key = os.getenv("SERPER_API_KEY")
|
|
89
|
+
if not serper_key:
|
|
90
|
+
print("⚠️ Warning: No Serper API key found, skipping")
|
|
91
|
+
return jobs
|
|
92
|
+
|
|
93
|
+
print(f" 🔑 Using Serper key: {serper_key[:8]}...{serper_key[-4:]}")
|
|
94
|
+
|
|
95
|
+
import http.client
|
|
96
|
+
|
|
97
|
+
search_queries = [
|
|
98
|
+
"Claude Code developer jobs",
|
|
99
|
+
"Anthropic Claude engineer hiring",
|
|
100
|
+
"Claude AI programming job",
|
|
101
|
+
"Claude assistant developer position",
|
|
102
|
+
"Anthropic engineer jobs",
|
|
103
|
+
"Claude developer careers"
|
|
104
|
+
]
|
|
105
|
+
|
|
106
|
+
conn = http.client.HTTPSConnection("google.serper.dev")
|
|
107
|
+
|
|
108
|
+
for query in search_queries:
|
|
109
|
+
print(f" 🔍 Searching: '{query}'")
|
|
110
|
+
|
|
111
|
+
payload = json.dumps({
|
|
112
|
+
"q": f"{query} site:linkedin.com OR site:indeed.com OR site:glassdoor.com OR site:jobs.anthropic.com",
|
|
113
|
+
"type": "search",
|
|
114
|
+
"num": 20
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
headers = {
|
|
118
|
+
'X-API-KEY': serper_key,
|
|
119
|
+
'Content-Type': 'application/json'
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
conn.request("POST", "/search", payload, headers)
|
|
123
|
+
res = conn.getresponse()
|
|
124
|
+
data_raw = res.read()
|
|
125
|
+
|
|
126
|
+
if res.status == 200:
|
|
127
|
+
try:
|
|
128
|
+
data = json.loads(data_raw.decode("utf-8"))
|
|
129
|
+
search_results = data.get('organic', [])
|
|
130
|
+
print(f" Found {len(search_results)} search results")
|
|
131
|
+
|
|
132
|
+
for result in search_results:
|
|
133
|
+
title = result.get('title', '')
|
|
134
|
+
snippet = result.get('snippet', '')
|
|
135
|
+
link = result.get('link', '')
|
|
136
|
+
|
|
137
|
+
# Check if this looks like a job posting
|
|
138
|
+
full_text = f"{title} {snippet}"
|
|
139
|
+
if is_claude_code_related(full_text) and is_job_posting(full_text):
|
|
140
|
+
|
|
141
|
+
# Extract better job information
|
|
142
|
+
job_info = extract_job_info_from_serper(title, snippet, link)
|
|
143
|
+
|
|
144
|
+
if job_info: # Only add if we could extract meaningful info
|
|
145
|
+
jobs.append(job_info)
|
|
146
|
+
|
|
147
|
+
except json.JSONDecodeError as e:
|
|
148
|
+
print(f" ❌ JSON decode error: {e}")
|
|
149
|
+
else:
|
|
150
|
+
print(f" ❌ Error {res.status}: {data_raw.decode('utf-8')[:200]}...")
|
|
151
|
+
|
|
152
|
+
time.sleep(1) # Rate limiting
|
|
153
|
+
|
|
154
|
+
conn.close()
|
|
155
|
+
print(f"✅ Found {len(jobs)} jobs from Google Serper")
|
|
156
|
+
|
|
157
|
+
except Exception as e:
|
|
158
|
+
print(f"⚠️ Error with Google Serper API: {e}")
|
|
159
|
+
|
|
160
|
+
return jobs
|
|
161
|
+
|
|
162
|
+
def is_job_posting(text):
|
|
163
|
+
"""Check if text looks like a job posting"""
|
|
164
|
+
job_indicators = [
|
|
165
|
+
'hiring', 'job', 'position', 'career', 'apply', 'join',
|
|
166
|
+
'engineer', 'developer', 'programmer', 'architect',
|
|
167
|
+
'we are looking', 'seeking', 'opportunity', 'role'
|
|
168
|
+
]
|
|
169
|
+
text_lower = text.lower()
|
|
170
|
+
return any(indicator in text_lower for indicator in job_indicators)
|
|
171
|
+
|
|
172
|
+
def extract_job_info_from_serper(title, snippet, link):
|
|
173
|
+
"""Extract clean job information from Serper search result"""
|
|
174
|
+
|
|
175
|
+
# Skip generic search results
|
|
176
|
+
if any(skip in title.lower() for skip in ['jobs, employment', 'jobs available', 'browse', 'discover']):
|
|
177
|
+
return None
|
|
178
|
+
|
|
179
|
+
# Extract company name
|
|
180
|
+
company = extract_company_name_improved(title, snippet, link)
|
|
181
|
+
|
|
182
|
+
# Extract job title
|
|
183
|
+
job_title = extract_job_title(title, snippet)
|
|
184
|
+
|
|
185
|
+
# Extract location
|
|
186
|
+
location = extract_location_improved(title, snippet)
|
|
187
|
+
|
|
188
|
+
# Only return if we have meaningful data
|
|
189
|
+
if not job_title or len(job_title) < 5:
|
|
190
|
+
return None
|
|
191
|
+
|
|
192
|
+
return {
|
|
193
|
+
'company': company,
|
|
194
|
+
'company_icon': get_company_icon(company),
|
|
195
|
+
'job_title': job_title,
|
|
196
|
+
'location': location,
|
|
197
|
+
'description': truncate_description(snippet),
|
|
198
|
+
'job_link': link,
|
|
199
|
+
'source': 'Google Serper',
|
|
200
|
+
'date_posted': '',
|
|
201
|
+
'salary': extract_salary_from_text(snippet)
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
def extract_company_name_improved(title, snippet, link):
|
|
205
|
+
"""Improved company name extraction"""
|
|
206
|
+
|
|
207
|
+
# Priority: Check for Anthropic first (most common)
|
|
208
|
+
if 'anthropic' in (title + snippet + link).lower():
|
|
209
|
+
return 'Anthropic'
|
|
210
|
+
|
|
211
|
+
# LinkedIn specific extraction
|
|
212
|
+
if 'linkedin.com/jobs/view/' in link:
|
|
213
|
+
# Extract from URL - LinkedIn URLs often contain company info
|
|
214
|
+
# Format: linkedin.com/jobs/view/job-title-at-company-name-jobid
|
|
215
|
+
url_parts = link.split('-at-')
|
|
216
|
+
if len(url_parts) > 1:
|
|
217
|
+
company_part = url_parts[1].split('-')[0] # Get first part after -at-
|
|
218
|
+
if company_part and len(company_part) > 2:
|
|
219
|
+
return company_part.replace('-', ' ').title()
|
|
220
|
+
|
|
221
|
+
# Extract from title patterns like "Job Title at Company Name"
|
|
222
|
+
at_match = re.search(r'\s+at\s+([^-\d]+)', title)
|
|
223
|
+
if at_match:
|
|
224
|
+
company = at_match.group(1).strip()
|
|
225
|
+
# Clean up common LinkedIn patterns
|
|
226
|
+
company = re.sub(r'\s*\d+$', '', company) # Remove trailing numbers
|
|
227
|
+
company = re.sub(r'\s+\d+$', '', company) # Remove numbers at end
|
|
228
|
+
if len(company) > 2 and company.lower() not in ['view', 'join', 'apply']:
|
|
229
|
+
return company
|
|
230
|
+
|
|
231
|
+
# Extract from title patterns
|
|
232
|
+
hiring_patterns = [
|
|
233
|
+
r'([A-Z][a-zA-Z\s&.]+)\s+hiring\s+',
|
|
234
|
+
r'^([A-Z][a-zA-Z\s&.]+):\s+',
|
|
235
|
+
r'Join\s+([A-Z][a-zA-Z\s&.]+)',
|
|
236
|
+
r'([A-Z][a-zA-Z\s&.]+)\s+is\s+looking',
|
|
237
|
+
r'([A-Z][a-zA-Z\s&.]+)\s+seeks?',
|
|
238
|
+
]
|
|
239
|
+
|
|
240
|
+
for pattern in hiring_patterns:
|
|
241
|
+
match = re.search(pattern, title)
|
|
242
|
+
if match:
|
|
243
|
+
company = match.group(1).strip()
|
|
244
|
+
if len(company) > 2 and company not in ['View', 'Join', 'Apply', 'Software', 'Senior']:
|
|
245
|
+
return company
|
|
246
|
+
|
|
247
|
+
# Extract from snippet
|
|
248
|
+
snippet_patterns = [
|
|
249
|
+
r'Jobs at ([A-Z][a-zA-Z\s&.]+)',
|
|
250
|
+
r'([A-Z][a-zA-Z\s&.]+) is hiring',
|
|
251
|
+
r'Work at ([A-Z][a-zA-Z\s&.]+)',
|
|
252
|
+
r'Join ([A-Z][a-zA-Z\s&.]+)',
|
|
253
|
+
]
|
|
254
|
+
|
|
255
|
+
for pattern in snippet_patterns:
|
|
256
|
+
match = re.search(pattern, snippet)
|
|
257
|
+
if match:
|
|
258
|
+
company = match.group(1).strip()
|
|
259
|
+
if len(company) > 2:
|
|
260
|
+
return company
|
|
261
|
+
|
|
262
|
+
# Check if it's a well-known company based on domain or context
|
|
263
|
+
known_companies = {
|
|
264
|
+
'google': 'Google',
|
|
265
|
+
'microsoft': 'Microsoft',
|
|
266
|
+
'meta': 'Meta',
|
|
267
|
+
'apple': 'Apple',
|
|
268
|
+
'amazon': 'Amazon',
|
|
269
|
+
'openai': 'OpenAI',
|
|
270
|
+
'github': 'GitHub',
|
|
271
|
+
'stripe': 'Stripe',
|
|
272
|
+
'shopify': 'Shopify'
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
text_lower = (title + snippet + link).lower()
|
|
276
|
+
for keyword, company_name in known_companies.items():
|
|
277
|
+
if keyword in text_lower:
|
|
278
|
+
return company_name
|
|
279
|
+
|
|
280
|
+
return 'Unknown Company'
|
|
281
|
+
|
|
282
|
+
def extract_job_title(title, snippet):
|
|
283
|
+
"""Extract job title from search result"""
|
|
284
|
+
|
|
285
|
+
# LinkedIn format: "Job Title at Company"
|
|
286
|
+
at_match = re.search(r'^(.+?)\s+at\s+', title)
|
|
287
|
+
if at_match:
|
|
288
|
+
return at_match.group(1).strip()
|
|
289
|
+
|
|
290
|
+
# Anthropic hiring format: "Anthropic hiring Job Title in Location"
|
|
291
|
+
hiring_match = re.search(r'hiring\s+(.+?)\s+in\s+', title)
|
|
292
|
+
if hiring_match:
|
|
293
|
+
return hiring_match.group(1).strip()
|
|
294
|
+
|
|
295
|
+
# Company: Job Title format
|
|
296
|
+
colon_match = re.search(r':\s+(.+?)\s+-', title)
|
|
297
|
+
if colon_match:
|
|
298
|
+
return colon_match.group(1).strip()
|
|
299
|
+
|
|
300
|
+
# Extract from title before dash
|
|
301
|
+
dash_match = re.search(r'^(.+?)\s+-\s+', title)
|
|
302
|
+
if dash_match:
|
|
303
|
+
job_title = dash_match.group(1).strip()
|
|
304
|
+
# Clean up common patterns
|
|
305
|
+
job_title = re.sub(r'^(View|Apply to|Join)\s+', '', job_title)
|
|
306
|
+
if len(job_title) > 5:
|
|
307
|
+
return job_title
|
|
308
|
+
|
|
309
|
+
# Fallback: use full title if it looks like a job title
|
|
310
|
+
if any(keyword in title.lower() for keyword in ['engineer', 'developer', 'manager', 'analyst', 'scientist', 'architect']):
|
|
311
|
+
return title.strip()
|
|
312
|
+
|
|
313
|
+
return None
|
|
314
|
+
|
|
315
|
+
def extract_location_improved(title, snippet):
|
|
316
|
+
"""Improved location extraction"""
|
|
317
|
+
text = f"{title} {snippet}"
|
|
318
|
+
|
|
319
|
+
# Remote indicators
|
|
320
|
+
if any(keyword in text.lower() for keyword in ['remote', 'anywhere', 'distributed', 'work from home']):
|
|
321
|
+
return 'Remote'
|
|
322
|
+
|
|
323
|
+
# City, State patterns
|
|
324
|
+
city_state_patterns = [
|
|
325
|
+
r'in\s+([A-Z][a-z]+,\s*[A-Z]{2})', # "in Seattle, WA"
|
|
326
|
+
r'([A-Z][a-z]+,\s*[A-Z]{2})\s+', # "Seattle, WA "
|
|
327
|
+
r'([San Francisco|New York|Los Angeles|Chicago|Boston|Austin|Denver],\s*[A-Z]{2})',
|
|
328
|
+
]
|
|
329
|
+
|
|
330
|
+
for pattern in city_state_patterns:
|
|
331
|
+
match = re.search(pattern, text)
|
|
332
|
+
if match:
|
|
333
|
+
return match.group(1)
|
|
334
|
+
|
|
335
|
+
# Major cities without state
|
|
336
|
+
major_cities = ['Seattle', 'Francisco', 'Chicago', 'Boston', 'Austin', 'Denver', 'Portland', 'Miami']
|
|
337
|
+
for city in major_cities:
|
|
338
|
+
if city in text:
|
|
339
|
+
return f"{city}"
|
|
340
|
+
|
|
341
|
+
return 'On-site'
|
|
342
|
+
|
|
343
|
+
def extract_salary_from_text(text):
|
|
344
|
+
"""Extract salary information from job description text"""
|
|
345
|
+
if not text:
|
|
346
|
+
return 0
|
|
347
|
+
|
|
348
|
+
# Look for common salary patterns
|
|
349
|
+
salary_patterns = [
|
|
350
|
+
r'\$(\d{1,3}(?:,\d{3})*(?:\.\d{2})?)\s*(?:k|thousand)',
|
|
351
|
+
r'\$(\d{1,3}(?:,\d{3})*)',
|
|
352
|
+
r'(\d{1,3})k',
|
|
353
|
+
]
|
|
354
|
+
|
|
355
|
+
for pattern in salary_patterns:
|
|
356
|
+
matches = re.findall(pattern, text.lower())
|
|
357
|
+
if matches:
|
|
358
|
+
try:
|
|
359
|
+
salary = int(matches[0].replace(',', '').replace('.', ''))
|
|
360
|
+
if 'k' in text.lower() or 'thousand' in text.lower():
|
|
361
|
+
salary *= 1000
|
|
362
|
+
return salary
|
|
363
|
+
except:
|
|
364
|
+
continue
|
|
365
|
+
|
|
366
|
+
return 0
|
|
367
|
+
|
|
368
|
+
def extract_salary_from_google_job(job_data):
|
|
369
|
+
"""Extract salary from Google Jobs specific structure"""
|
|
370
|
+
salary_info = job_data.get('detected_extensions', {})
|
|
371
|
+
|
|
372
|
+
# Look for salary in extensions
|
|
373
|
+
if 'salary' in salary_info:
|
|
374
|
+
salary_text = salary_info['salary']
|
|
375
|
+
return extract_salary_from_text(salary_text)
|
|
376
|
+
|
|
377
|
+
return 0
|
|
378
|
+
|
|
379
|
+
def scrape_github_jobs():
|
|
380
|
+
"""
|
|
381
|
+
Scrape GitHub Jobs for Claude Code positions
|
|
382
|
+
"""
|
|
383
|
+
jobs = []
|
|
384
|
+
try:
|
|
385
|
+
# GitHub Jobs API is deprecated, but we can search GitHub Issues/Discussions
|
|
386
|
+
# or use GitHub's search API for job repositories
|
|
387
|
+
print("🔍 Searching GitHub for Claude Code job postings...")
|
|
388
|
+
|
|
389
|
+
# Search in common job posting repositories
|
|
390
|
+
job_repos = [
|
|
391
|
+
"remoteintech/remote-jobs",
|
|
392
|
+
"lukasz-madon/awesome-remote-job",
|
|
393
|
+
"yanirs/established-remote"
|
|
394
|
+
]
|
|
395
|
+
|
|
396
|
+
headers = {
|
|
397
|
+
'Accept': 'application/vnd.github.v3+json',
|
|
398
|
+
'User-Agent': 'claude-code-templates-job-scraper'
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
github_token = os.getenv("GITHUB_TOKEN")
|
|
402
|
+
if github_token:
|
|
403
|
+
headers['Authorization'] = f'token {github_token}'
|
|
404
|
+
|
|
405
|
+
# Search ONLY for Claude-specific job postings
|
|
406
|
+
search_url = "https://api.github.com/search/issues"
|
|
407
|
+
search_params = {
|
|
408
|
+
'q': '("claude code" OR "anthropic claude" OR "claude ai" OR "claude") AND (hiring OR job OR position OR engineer OR developer) NOT pull NOT merge NOT bug NOT feature',
|
|
409
|
+
'sort': 'updated',
|
|
410
|
+
'order': 'desc',
|
|
411
|
+
'per_page': 50
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
response = requests.get(search_url, headers=headers, params=search_params)
|
|
415
|
+
if response.status_code == 200:
|
|
416
|
+
results = response.json()
|
|
417
|
+
for item in results.get('items', []):
|
|
418
|
+
job = extract_job_from_github_issue(item)
|
|
419
|
+
if job:
|
|
420
|
+
jobs.append(job)
|
|
421
|
+
|
|
422
|
+
print(f"✅ Found {len(jobs)} potential jobs from GitHub")
|
|
423
|
+
|
|
424
|
+
except Exception as e:
|
|
425
|
+
print(f"⚠️ Error scraping GitHub jobs: {e}")
|
|
426
|
+
|
|
427
|
+
return jobs
|
|
428
|
+
|
|
429
|
+
def scrape_ycombinator_jobs():
|
|
430
|
+
"""
|
|
431
|
+
Scrape YCombinator Who's Hiring threads for Claude Code mentions
|
|
432
|
+
"""
|
|
433
|
+
jobs = []
|
|
434
|
+
try:
|
|
435
|
+
print("🔍 Searching YC Who's Hiring for Claude Code positions...")
|
|
436
|
+
|
|
437
|
+
# Search HackerNews API for recent "Who is hiring" threads
|
|
438
|
+
hn_search_url = "https://hn.algolia.com/api/v1/search"
|
|
439
|
+
search_params = {
|
|
440
|
+
'query': 'who is hiring',
|
|
441
|
+
'tags': 'story',
|
|
442
|
+
'hitsPerPage': 5,
|
|
443
|
+
'numericFilters': f'created_at_i>{int(time.time()) - 86400*60}' # Last 60 days
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
response = requests.get(hn_search_url, params=search_params)
|
|
447
|
+
if response.status_code == 200:
|
|
448
|
+
threads = response.json().get('hits', [])
|
|
449
|
+
|
|
450
|
+
for thread in threads:
|
|
451
|
+
story_id = thread.get('objectID')
|
|
452
|
+
if story_id:
|
|
453
|
+
# Get comments from this hiring thread
|
|
454
|
+
comments_url = f"https://hn.algolia.com/api/v1/search"
|
|
455
|
+
comment_params = {
|
|
456
|
+
'query': 'claude code OR anthropic claude OR claude ai OR claude',
|
|
457
|
+
'tags': f'comment,story_{story_id}',
|
|
458
|
+
'hitsPerPage': 50
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
comment_response = requests.get(comments_url, params=comment_params)
|
|
462
|
+
if comment_response.status_code == 200:
|
|
463
|
+
comments = comment_response.json().get('hits', [])
|
|
464
|
+
|
|
465
|
+
for comment in comments:
|
|
466
|
+
job = extract_job_from_hn_comment(comment, thread.get('title', ''))
|
|
467
|
+
if job:
|
|
468
|
+
jobs.append(job)
|
|
469
|
+
|
|
470
|
+
time.sleep(0.5) # Rate limiting
|
|
471
|
+
|
|
472
|
+
print(f"✅ Found {len(jobs)} jobs from YC Who's Hiring")
|
|
473
|
+
|
|
474
|
+
except Exception as e:
|
|
475
|
+
print(f"⚠️ Error scraping YC jobs: {e}")
|
|
476
|
+
|
|
477
|
+
return jobs
|
|
478
|
+
|
|
479
|
+
def extract_job_from_hn_comment(comment, thread_title):
|
|
480
|
+
"""
|
|
481
|
+
Extract job information from HackerNews comment
|
|
482
|
+
"""
|
|
483
|
+
text = comment.get('comment_text', '') or ''
|
|
484
|
+
|
|
485
|
+
if not is_claude_code_related(text):
|
|
486
|
+
return None
|
|
487
|
+
|
|
488
|
+
# Extract basic info from comment
|
|
489
|
+
company = extract_company_from_hn_comment(text)
|
|
490
|
+
location = extract_location_from_hn_comment(text)
|
|
491
|
+
|
|
492
|
+
return {
|
|
493
|
+
'company': company,
|
|
494
|
+
'company_icon': get_company_icon(company),
|
|
495
|
+
'location': location,
|
|
496
|
+
'description': truncate_description(text.replace('<p>', ' ').replace('</p>', ' ')),
|
|
497
|
+
'job_link': f"https://news.ycombinator.com/item?id={comment.get('objectID', '')}",
|
|
498
|
+
'source': 'YCombinator',
|
|
499
|
+
'date_posted': comment.get('created_at', ''),
|
|
500
|
+
'salary': 0
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
def extract_company_from_hn_comment(text):
|
|
504
|
+
"""Extract company name from HN comment"""
|
|
505
|
+
patterns = [
|
|
506
|
+
r'([A-Z][a-zA-Z]+)\s+is\s+hiring',
|
|
507
|
+
r'We\s+are\s+([A-Z][a-zA-Z]+)',
|
|
508
|
+
r'Join\s+([A-Z][a-zA-Z]+)',
|
|
509
|
+
r'([A-Z][a-zA-Z]+)\s+\-\s+',
|
|
510
|
+
r'Company:\s+([A-Z][a-zA-Z]+)',
|
|
511
|
+
]
|
|
512
|
+
|
|
513
|
+
for pattern in patterns:
|
|
514
|
+
match = re.search(pattern, text)
|
|
515
|
+
if match:
|
|
516
|
+
return match.group(1)
|
|
517
|
+
|
|
518
|
+
return 'Startup'
|
|
519
|
+
|
|
520
|
+
def extract_location_from_hn_comment(text):
|
|
521
|
+
"""Extract location from HN comment"""
|
|
522
|
+
if any(keyword in text.lower() for keyword in ['remote', 'anywhere', 'distributed']):
|
|
523
|
+
return 'Remote'
|
|
524
|
+
|
|
525
|
+
# Look for city patterns
|
|
526
|
+
location_patterns = [
|
|
527
|
+
r'Location:\s*([^.\n]+)',
|
|
528
|
+
r'Based in ([^,\n]+)',
|
|
529
|
+
r'([A-Z][a-z]+,\s*[A-Z]{2,3})', # City, State/Country
|
|
530
|
+
]
|
|
531
|
+
|
|
532
|
+
for pattern in location_patterns:
|
|
533
|
+
match = re.search(pattern, text)
|
|
534
|
+
if match:
|
|
535
|
+
return match.group(1).strip()
|
|
536
|
+
|
|
537
|
+
return 'On-site'
|
|
538
|
+
|
|
539
|
+
def scrape_remote_ok():
|
|
540
|
+
"""
|
|
541
|
+
Scrape Remote OK for Claude Code positions
|
|
542
|
+
"""
|
|
543
|
+
jobs = []
|
|
544
|
+
try:
|
|
545
|
+
print("🔍 Searching Remote OK for Claude Code positions...")
|
|
546
|
+
|
|
547
|
+
# Remote OK has an API but might be rate limited
|
|
548
|
+
url = "https://remoteok.io/api"
|
|
549
|
+
headers = {
|
|
550
|
+
'User-Agent': 'claude-code-templates-job-scraper'
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
response = requests.get(url, headers=headers)
|
|
554
|
+
if response.status_code == 200:
|
|
555
|
+
data = response.json()
|
|
556
|
+
for job_data in data[1:]: # First item is metadata
|
|
557
|
+
description = job_data.get('description', '')
|
|
558
|
+
tags = job_data.get('tags', [])
|
|
559
|
+
tags_str = ' '.join(tags) if isinstance(tags, list) else str(tags)
|
|
560
|
+
|
|
561
|
+
if is_claude_code_related(description + ' ' + tags_str):
|
|
562
|
+
job = {
|
|
563
|
+
'company': job_data.get('company', 'Unknown'),
|
|
564
|
+
'company_icon': job_data.get('company_logo', ''),
|
|
565
|
+
'location': 'Remote' if job_data.get('location') == 'Worldwide' else job_data.get('location', 'Remote'),
|
|
566
|
+
'description': truncate_description(job_data.get('description', '')),
|
|
567
|
+
'job_link': f"https://remoteok.io/remote-jobs/{job_data.get('id', '')}",
|
|
568
|
+
'source': 'RemoteOK',
|
|
569
|
+
'date_posted': job_data.get('date', ''),
|
|
570
|
+
'salary': job_data.get('salary_min', 0)
|
|
571
|
+
}
|
|
572
|
+
jobs.append(job)
|
|
573
|
+
|
|
574
|
+
print(f"✅ Found {len(jobs)} jobs from Remote OK")
|
|
575
|
+
|
|
576
|
+
except Exception as e:
|
|
577
|
+
print(f"⚠️ Error scraping Remote OK: {e}")
|
|
578
|
+
|
|
579
|
+
return jobs
|
|
580
|
+
|
|
581
|
+
def scrape_weworkremotely():
|
|
582
|
+
"""
|
|
583
|
+
Scrape We Work Remotely for Claude Code positions
|
|
584
|
+
"""
|
|
585
|
+
jobs = []
|
|
586
|
+
try:
|
|
587
|
+
print("🔍 Searching We Work Remotely for Claude Code positions...")
|
|
588
|
+
|
|
589
|
+
# We Work Remotely RSS feed approach
|
|
590
|
+
import xml.etree.ElementTree as ET
|
|
591
|
+
|
|
592
|
+
rss_url = "https://weworkremotely.com/categories/remote-programming-jobs.rss"
|
|
593
|
+
headers = {
|
|
594
|
+
'User-Agent': 'claude-code-templates-job-scraper'
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
response = requests.get(rss_url, headers=headers)
|
|
598
|
+
if response.status_code == 200:
|
|
599
|
+
root = ET.fromstring(response.content)
|
|
600
|
+
|
|
601
|
+
for item in root.findall('.//item'):
|
|
602
|
+
title = item.find('title').text if item.find('title') is not None else ''
|
|
603
|
+
description = item.find('description').text if item.find('description') is not None else ''
|
|
604
|
+
link = item.find('link').text if item.find('link') is not None else ''
|
|
605
|
+
pub_date = item.find('pubDate').text if item.find('pubDate') is not None else ''
|
|
606
|
+
|
|
607
|
+
full_text = title + ' ' + description
|
|
608
|
+
|
|
609
|
+
if is_claude_code_related(full_text):
|
|
610
|
+
# Extract company from title (usually format: "Company: Job Title")
|
|
611
|
+
company_match = re.match(r'^([^:]+):', title)
|
|
612
|
+
company = company_match.group(1).strip() if company_match else 'Remote Company'
|
|
613
|
+
|
|
614
|
+
job = {
|
|
615
|
+
'company': company,
|
|
616
|
+
'company_icon': get_company_icon(company),
|
|
617
|
+
'location': 'Remote', # WWR is all remote
|
|
618
|
+
'description': truncate_description(title),
|
|
619
|
+
'job_link': link,
|
|
620
|
+
'source': 'WeWorkRemotely',
|
|
621
|
+
'date_posted': pub_date,
|
|
622
|
+
'salary': 0
|
|
623
|
+
}
|
|
624
|
+
jobs.append(job)
|
|
625
|
+
|
|
626
|
+
print(f"✅ Found {len(jobs)} jobs from We Work Remotely")
|
|
627
|
+
|
|
628
|
+
except Exception as e:
|
|
629
|
+
print(f"⚠️ Error scraping WWR: {e}")
|
|
630
|
+
|
|
631
|
+
return jobs
|
|
632
|
+
|
|
633
|
+
def scrape_indie_hackers():
|
|
634
|
+
"""
|
|
635
|
+
Scrape Indie Hackers for Claude Code positions
|
|
636
|
+
"""
|
|
637
|
+
jobs = []
|
|
638
|
+
try:
|
|
639
|
+
print("🔍 Searching Indie Hackers for Claude Code positions...")
|
|
640
|
+
|
|
641
|
+
# Use general web search for Indie Hackers job posts mentioning Claude Code
|
|
642
|
+
search_terms = [
|
|
643
|
+
'site:indiehackers.com "claude code" hiring',
|
|
644
|
+
'site:indiehackers.com "anthropic claude" job',
|
|
645
|
+
'site:indiehackers.com "claude ai" developer'
|
|
646
|
+
]
|
|
647
|
+
|
|
648
|
+
# This would require a web search API like Google Custom Search
|
|
649
|
+
# For now, placeholder but structure is ready
|
|
650
|
+
|
|
651
|
+
print(f"✅ Indie Hackers scraping structure ready")
|
|
652
|
+
|
|
653
|
+
except Exception as e:
|
|
654
|
+
print(f"⚠️ Error scraping Indie Hackers: {e}")
|
|
655
|
+
|
|
656
|
+
return jobs
|
|
657
|
+
|
|
658
|
+
def extract_job_from_github_issue(item):
|
|
659
|
+
"""
|
|
660
|
+
Extract job information from a GitHub issue/discussion
|
|
661
|
+
"""
|
|
662
|
+
title = item.get('title', '') or ''
|
|
663
|
+
body = item.get('body', '') or ''
|
|
664
|
+
|
|
665
|
+
# Check if it's actually a job posting mentioning Claude Code
|
|
666
|
+
if not is_claude_code_related(title + ' ' + body):
|
|
667
|
+
return None
|
|
668
|
+
|
|
669
|
+
# Extract company name from repository or issue title
|
|
670
|
+
repo_name = item.get('repository_url', '').split('/')[-1] if item.get('repository_url') else 'Unknown'
|
|
671
|
+
|
|
672
|
+
return {
|
|
673
|
+
'company': extract_company_name(title, body, repo_name),
|
|
674
|
+
'company_icon': get_company_icon(extract_company_name(title, body, repo_name)),
|
|
675
|
+
'location': extract_location(title, body),
|
|
676
|
+
'description': truncate_description(title),
|
|
677
|
+
'job_link': item.get('html_url', ''),
|
|
678
|
+
'source': 'GitHub',
|
|
679
|
+
'date_posted': item.get('updated_at', ''),
|
|
680
|
+
'salary': 0
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
def is_claude_code_related(text):
|
|
684
|
+
"""
|
|
685
|
+
Check if text specifically mentions Claude (very strict filtering)
|
|
686
|
+
"""
|
|
687
|
+
if not text:
|
|
688
|
+
return False
|
|
689
|
+
|
|
690
|
+
text_lower = str(text).lower()
|
|
691
|
+
|
|
692
|
+
# ONLY Claude-specific keywords - must contain "claude"
|
|
693
|
+
claude_keywords = [
|
|
694
|
+
'claude code', 'claude-code', 'anthropic claude', 'claude ai',
|
|
695
|
+
'claude coder', 'claude assistant', 'claude developer', 'claude engineer',
|
|
696
|
+
'work with claude', 'using claude', 'claude experience', 'claude integration'
|
|
697
|
+
]
|
|
698
|
+
|
|
699
|
+
# Must explicitly mention Claude in some form
|
|
700
|
+
has_claude_mention = any(keyword in text_lower for keyword in claude_keywords)
|
|
701
|
+
|
|
702
|
+
# Additional check: just "claude" + job context
|
|
703
|
+
has_claude_word = 'claude' in text_lower
|
|
704
|
+
job_words = ['hiring', 'position', 'engineer', 'developer', 'role', 'job', 'career', 'experience', 'skills']
|
|
705
|
+
has_job_context = any(word in text_lower for word in job_words)
|
|
706
|
+
|
|
707
|
+
# Return True only if Claude is mentioned AND it's in a job context
|
|
708
|
+
return has_claude_mention or (has_claude_word and has_job_context)
|
|
709
|
+
|
|
710
|
+
def extract_company_name(title, body, fallback):
|
|
711
|
+
"""
|
|
712
|
+
Extract company name from job posting
|
|
713
|
+
"""
|
|
714
|
+
# Common patterns in job titles
|
|
715
|
+
patterns = [
|
|
716
|
+
r'(\w+)\s+is\s+hiring',
|
|
717
|
+
r'(\w+)\s+hiring',
|
|
718
|
+
r'join\s+(\w+)',
|
|
719
|
+
r'(\w+)\s+looking\s+for',
|
|
720
|
+
r'(\w+)\s+seeks?',
|
|
721
|
+
]
|
|
722
|
+
|
|
723
|
+
for pattern in patterns:
|
|
724
|
+
match = re.search(pattern, title + ' ' + body, re.IGNORECASE)
|
|
725
|
+
if match:
|
|
726
|
+
return match.group(1).title()
|
|
727
|
+
|
|
728
|
+
return fallback.title()
|
|
729
|
+
|
|
730
|
+
def extract_location(title, body):
|
|
731
|
+
"""
|
|
732
|
+
Extract location from job posting
|
|
733
|
+
"""
|
|
734
|
+
remote_keywords = ['remote', 'anywhere', 'distributed', 'work from home']
|
|
735
|
+
location_patterns = [
|
|
736
|
+
r'location[:\s]+([^,\n]+)',
|
|
737
|
+
r'based in ([^,\n]+)',
|
|
738
|
+
r'(\w+,\s*\w+)', # City, State/Country
|
|
739
|
+
]
|
|
740
|
+
|
|
741
|
+
text = (title + ' ' + body).lower()
|
|
742
|
+
|
|
743
|
+
# Check for remote first
|
|
744
|
+
if any(keyword in text for keyword in remote_keywords):
|
|
745
|
+
return 'Remote'
|
|
746
|
+
|
|
747
|
+
# Look for specific locations
|
|
748
|
+
for pattern in location_patterns:
|
|
749
|
+
match = re.search(pattern, text, re.IGNORECASE)
|
|
750
|
+
if match:
|
|
751
|
+
return match.group(1).strip().title()
|
|
752
|
+
|
|
753
|
+
return 'On-site'
|
|
754
|
+
|
|
755
|
+
def get_company_icon(company_name):
|
|
756
|
+
"""
|
|
757
|
+
Get company icon URL with comprehensive company icon dictionary
|
|
758
|
+
"""
|
|
759
|
+
# Comprehensive company icons dictionary
|
|
760
|
+
company_icons = {
|
|
761
|
+
# AI/Tech Companies
|
|
762
|
+
'anthropic': 'https://www.anthropic.com/favicon.ico',
|
|
763
|
+
'openai': 'https://openai.com/favicon.ico',
|
|
764
|
+
'claude code': 'https://www.anthropic.com/favicon.ico',
|
|
765
|
+
|
|
766
|
+
# Major Tech Companies
|
|
767
|
+
'google': 'https://www.google.com/favicon.ico',
|
|
768
|
+
'microsoft': 'https://www.microsoft.com/favicon.ico',
|
|
769
|
+
'meta': 'https://www.facebook.com/favicon.ico',
|
|
770
|
+
'apple': 'https://www.apple.com/favicon.ico',
|
|
771
|
+
'amazon': 'https://www.amazon.com/favicon.ico',
|
|
772
|
+
'netflix': 'https://www.netflix.com/favicon.ico',
|
|
773
|
+
'tesla': 'https://www.tesla.com/favicon.ico',
|
|
774
|
+
'nvidia': 'https://www.nvidia.com/favicon.ico',
|
|
775
|
+
|
|
776
|
+
# Startups/Scale-ups
|
|
777
|
+
'stripe': 'https://stripe.com/favicon.ico',
|
|
778
|
+
'airbnb': 'https://airbnb.com/favicon.ico',
|
|
779
|
+
'uber': 'https://uber.com/favicon.ico',
|
|
780
|
+
'shopify': 'https://shopify.com/favicon.ico',
|
|
781
|
+
'twilio': 'https://twilio.com/favicon.ico',
|
|
782
|
+
'github': 'https://github.com/favicon.ico',
|
|
783
|
+
'gitlab': 'https://gitlab.com/favicon.ico',
|
|
784
|
+
'atlassian': 'https://atlassian.com/favicon.ico',
|
|
785
|
+
'slack': 'https://slack.com/favicon.ico',
|
|
786
|
+
'discord': 'https://discord.com/favicon.ico',
|
|
787
|
+
'notion': 'https://notion.so/favicon.ico',
|
|
788
|
+
'figma': 'https://figma.com/favicon.ico',
|
|
789
|
+
'vercel': 'https://vercel.com/favicon.ico',
|
|
790
|
+
'supabase': 'https://supabase.com/favicon.ico',
|
|
791
|
+
|
|
792
|
+
# Consulting/Services
|
|
793
|
+
'accenture': 'https://accenture.com/favicon.ico',
|
|
794
|
+
'deloitte': 'https://deloitte.com/favicon.ico',
|
|
795
|
+
'mckinsey': 'https://mckinsey.com/favicon.ico',
|
|
796
|
+
|
|
797
|
+
# Finance/Fintech
|
|
798
|
+
'goldman sachs': 'https://goldmansachs.com/favicon.ico',
|
|
799
|
+
'jpmorgan': 'https://jpmorgan.com/favicon.ico',
|
|
800
|
+
'coinbase': 'https://coinbase.com/favicon.ico',
|
|
801
|
+
'robinhood': 'https://robinhood.com/favicon.ico',
|
|
802
|
+
|
|
803
|
+
# Generic/Fallback companies
|
|
804
|
+
'unknown company': 'https://www.aitmpl.com/static/img/logo.png',
|
|
805
|
+
'company': 'https://www.aitmpl.com/static/img/logo.png',
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
company_lower = company_name.lower().strip()
|
|
809
|
+
|
|
810
|
+
# Direct match first
|
|
811
|
+
if company_lower in company_icons:
|
|
812
|
+
return company_icons[company_lower]
|
|
813
|
+
|
|
814
|
+
# Partial match for company names containing key terms
|
|
815
|
+
for key, icon in company_icons.items():
|
|
816
|
+
if key in company_lower or company_lower in key:
|
|
817
|
+
return icon
|
|
818
|
+
|
|
819
|
+
# Default fallback to our custom icon
|
|
820
|
+
return 'https://www.aitmpl.com/static/img/logo.png'
|
|
821
|
+
|
|
822
|
+
def truncate_description(description, max_length=100):
|
|
823
|
+
"""
|
|
824
|
+
Truncate description to specified length
|
|
825
|
+
"""
|
|
826
|
+
if not description:
|
|
827
|
+
return ''
|
|
828
|
+
|
|
829
|
+
# Clean HTML tags and extra whitespace
|
|
830
|
+
clean_desc = re.sub(r'<[^>]+>', '', description)
|
|
831
|
+
clean_desc = re.sub(r'\s+', ' ', clean_desc).strip()
|
|
832
|
+
|
|
833
|
+
if len(clean_desc) <= max_length:
|
|
834
|
+
return clean_desc
|
|
835
|
+
|
|
836
|
+
# Truncate at word boundary
|
|
837
|
+
truncated = clean_desc[:max_length].rsplit(' ', 1)[0]
|
|
838
|
+
return truncated + '...'
|
|
839
|
+
|
|
840
|
+
def generate_sample_jobs():
|
|
841
|
+
"""
|
|
842
|
+
Generate sample jobs for demonstration purposes
|
|
843
|
+
"""
|
|
844
|
+
sample_jobs = [
|
|
845
|
+
{
|
|
846
|
+
'company': 'Anthropic',
|
|
847
|
+
'company_icon': 'https://anthropic.com/favicon.ico',
|
|
848
|
+
'location': 'Remote',
|
|
849
|
+
'description': 'Senior AI Developer to enhance Claude Code capabilities and integrations...',
|
|
850
|
+
'job_link': 'https://anthropic.com/careers/claude-code-developer',
|
|
851
|
+
'source': 'Company Website',
|
|
852
|
+
'date_posted': '2025-09-10T10:00:00Z',
|
|
853
|
+
'salary': 150000
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
'company': 'OpenAI',
|
|
857
|
+
'company_icon': 'https://openai.com/favicon.ico',
|
|
858
|
+
'location': 'San Francisco, CA',
|
|
859
|
+
'description': 'Looking for engineers experienced with Claude Code and AI development tools...',
|
|
860
|
+
'job_link': 'https://openai.com/careers/claude-integration-engineer',
|
|
861
|
+
'source': 'LinkedIn',
|
|
862
|
+
'date_posted': '2025-09-09T14:30:00Z',
|
|
863
|
+
'salary': 140000
|
|
864
|
+
},
|
|
865
|
+
{
|
|
866
|
+
'company': 'StartupTech',
|
|
867
|
+
'company_icon': 'https://logo.clearbit.com/startuptech.com',
|
|
868
|
+
'location': 'Remote',
|
|
869
|
+
'description': 'Full-stack developer with Claude Code experience for AI-powered development team...',
|
|
870
|
+
'job_link': 'https://jobs.startuptech.com/claude-developer-2025',
|
|
871
|
+
'source': 'AngelList',
|
|
872
|
+
'date_posted': '2025-09-08T09:15:00Z',
|
|
873
|
+
'salary': 90000
|
|
874
|
+
},
|
|
875
|
+
{
|
|
876
|
+
'company': 'TechCorp',
|
|
877
|
+
'company_icon': 'https://logo.clearbit.com/techcorp.com',
|
|
878
|
+
'location': 'New York, NY',
|
|
879
|
+
'description': 'Senior Software Engineer - AI Tools (Claude Code, GitHub Copilot, etc.)...',
|
|
880
|
+
'job_link': 'https://careers.techcorp.com/positions/senior-ai-tools-engineer',
|
|
881
|
+
'source': 'Indeed',
|
|
882
|
+
'date_posted': '2025-09-07T16:45:00Z',
|
|
883
|
+
'salary': 120000
|
|
884
|
+
}
|
|
885
|
+
]
|
|
886
|
+
|
|
887
|
+
return sample_jobs
|
|
888
|
+
|
|
889
|
+
def generate_claude_jobs_json():
|
|
890
|
+
"""
|
|
891
|
+
Main function to scrape and generate Claude Code jobs JSON
|
|
892
|
+
"""
|
|
893
|
+
print("🚀 Starting Claude Code jobs scraping...")
|
|
894
|
+
|
|
895
|
+
all_jobs = []
|
|
896
|
+
|
|
897
|
+
# Skip sample jobs - looking for real results only
|
|
898
|
+
|
|
899
|
+
# Use professional job APIs (more reliable than scraping)
|
|
900
|
+
api_scrapers = [
|
|
901
|
+
scrape_with_rapidapi_jobs,
|
|
902
|
+
scrape_with_serper_jobs,
|
|
903
|
+
]
|
|
904
|
+
|
|
905
|
+
# Fallback to traditional scraping if APIs are not available
|
|
906
|
+
scraping_sources = [
|
|
907
|
+
scrape_github_jobs,
|
|
908
|
+
scrape_ycombinator_jobs,
|
|
909
|
+
scrape_weworkremotely,
|
|
910
|
+
]
|
|
911
|
+
|
|
912
|
+
# Try API sources first
|
|
913
|
+
for scraper in api_scrapers:
|
|
914
|
+
try:
|
|
915
|
+
jobs = scraper()
|
|
916
|
+
all_jobs.extend(jobs)
|
|
917
|
+
time.sleep(1)
|
|
918
|
+
except Exception as e:
|
|
919
|
+
print(f"⚠️ Error with API scraper {scraper.__name__}: {e}")
|
|
920
|
+
|
|
921
|
+
# If no jobs from APIs, try traditional scraping
|
|
922
|
+
if len(all_jobs) == 0:
|
|
923
|
+
print("📡 No results from APIs, trying traditional scraping...")
|
|
924
|
+
print("💡 Tip: Add valid API keys to .env for better results")
|
|
925
|
+
scrapers = scraping_sources
|
|
926
|
+
else:
|
|
927
|
+
print(f"🎯 Got {len(all_jobs)} jobs from APIs, skipping traditional scraping")
|
|
928
|
+
scrapers = []
|
|
929
|
+
|
|
930
|
+
for scraper in scrapers:
|
|
931
|
+
try:
|
|
932
|
+
jobs = scraper()
|
|
933
|
+
all_jobs.extend(jobs)
|
|
934
|
+
time.sleep(1) # Rate limiting
|
|
935
|
+
except Exception as e:
|
|
936
|
+
print(f"⚠️ Error with scraper {scraper.__name__}: {e}")
|
|
937
|
+
|
|
938
|
+
# Remove duplicates based on job_link
|
|
939
|
+
seen_links = set()
|
|
940
|
+
unique_jobs = []
|
|
941
|
+
for job in all_jobs:
|
|
942
|
+
if job['job_link'] not in seen_links:
|
|
943
|
+
seen_links.add(job['job_link'])
|
|
944
|
+
unique_jobs.append(job)
|
|
945
|
+
|
|
946
|
+
# Sort by date_posted (most recent first)
|
|
947
|
+
unique_jobs.sort(key=lambda x: x.get('date_posted', ''), reverse=True)
|
|
948
|
+
|
|
949
|
+
# Structure the final data
|
|
950
|
+
jobs_data = {
|
|
951
|
+
'jobs': unique_jobs,
|
|
952
|
+
'generated_at': datetime.now().isoformat(),
|
|
953
|
+
'total_count': len(unique_jobs),
|
|
954
|
+
'sources': list(set([job['source'] for job in unique_jobs]))
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
# Save to docs directory
|
|
958
|
+
output_path = 'docs/claude-jobs.json'
|
|
959
|
+
try:
|
|
960
|
+
with open(output_path, 'w', encoding='utf-8') as f:
|
|
961
|
+
json.dump(jobs_data, f, indent=2, ensure_ascii=False)
|
|
962
|
+
print(f"✅ Successfully generated {output_path}")
|
|
963
|
+
|
|
964
|
+
# Log summary
|
|
965
|
+
print("\n--- Scraping Summary ---")
|
|
966
|
+
print(f"Total unique jobs found: {len(unique_jobs)}")
|
|
967
|
+
|
|
968
|
+
sources_count = {}
|
|
969
|
+
for job in unique_jobs:
|
|
970
|
+
source = job['source']
|
|
971
|
+
sources_count[source] = sources_count.get(source, 0) + 1
|
|
972
|
+
|
|
973
|
+
for source, count in sources_count.items():
|
|
974
|
+
print(f" - {source}: {count} jobs")
|
|
975
|
+
|
|
976
|
+
remote_jobs = len([job for job in unique_jobs if 'remote' in job['location'].lower()])
|
|
977
|
+
onsite_jobs = len(unique_jobs) - remote_jobs
|
|
978
|
+
print(f" - Remote: {remote_jobs}, On-site: {onsite_jobs}")
|
|
979
|
+
print("-----------------------")
|
|
980
|
+
|
|
981
|
+
except IOError as e:
|
|
982
|
+
print(f"❌ Error writing to {output_path}: {e}")
|
|
983
|
+
|
|
984
|
+
if __name__ == '__main__':
|
|
985
|
+
generate_claude_jobs_json()
|