@cregis-dev/cckit 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -3
- package/package.json +1 -1
- package/registry.json +234 -200
- package/src/commands/init.js +19 -15
- package/src/commands/update.js +9 -4
- package/src/core/plugin-installer.js +59 -13
- package/src/utils/fs.js +6 -1
- package/templates/bmad/_config/bmad-help.csv +2 -1
- package/templates/bmad/_config/files-manifest.csv +437 -431
- package/templates/bmad/_config/ides/claude-code.yaml +5 -5
- package/templates/bmad/_config/ides/trae.yaml +5 -5
- package/templates/bmad/_config/task-manifest.csv +7 -6
- package/templates/bmad/_config/workflow-manifest.csv +34 -34
- package/templates/bmad/bmm/agents/qa.md +1 -1
- package/templates/bmad/bmm/config.yaml +1 -1
- package/templates/bmad/bmm/module-help.csv +1 -1
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +1 -1
- package/templates/bmad/bmm/workflows/1-analysis/create-product-brief/workflow.md +1 -1
- package/templates/bmad/bmm/workflows/1-analysis/research/workflow-domain-research.md +1 -1
- package/templates/bmad/bmm/workflows/1-analysis/research/workflow-market-research.md +1 -1
- package/templates/bmad/bmm/workflows/1-analysis/research/workflow-technical-research.md +1 -1
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +1 -1
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +1 -1
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +1 -1
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +1 -1
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +1 -1
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +1 -1
- package/templates/bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +1 -1
- package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +1 -1
- package/templates/bmad/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +1 -1
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +1 -1
- package/templates/bmad/bmm/workflows/3-solutioning/create-architecture/workflow.md +1 -1
- package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +1 -1
- package/templates/bmad/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +1 -1
- package/templates/bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +1 -1
- package/templates/bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +1 -1
- package/templates/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +1 -1
- package/templates/bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +1 -1
- package/templates/bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +1 -1
- package/templates/bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +1 -1
- package/templates/bmad/bmm/workflows/4-implementation/sprint-status/workflow.yaml +1 -1
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +1 -1
- package/templates/bmad/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +1 -1
- package/templates/bmad/bmm/workflows/document-project/workflow.yaml +1 -1
- package/templates/bmad/bmm/workflows/generate-project-context/workflow.md +1 -1
- package/templates/bmad/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +2 -2
- package/templates/bmad/commands/bmad-bmm-check-implementation-readiness.md +2 -2
- package/templates/bmad/commands/bmad-bmm-code-review.md +4 -4
- package/templates/bmad/commands/bmad-bmm-correct-course.md +4 -4
- package/templates/bmad/commands/bmad-bmm-create-architecture.md +2 -2
- package/templates/bmad/commands/bmad-bmm-create-epics-and-stories.md +2 -2
- package/templates/bmad/commands/bmad-bmm-create-prd.md +2 -2
- package/templates/bmad/commands/bmad-bmm-create-product-brief.md +2 -2
- package/templates/bmad/commands/bmad-bmm-create-story.md +4 -4
- package/templates/bmad/commands/bmad-bmm-create-ux-design.md +2 -2
- package/templates/bmad/commands/bmad-bmm-dev-story.md +4 -4
- package/templates/bmad/commands/bmad-bmm-document-project.md +4 -4
- package/templates/bmad/commands/bmad-bmm-domain-research.md +2 -2
- package/templates/bmad/commands/bmad-bmm-edit-prd.md +2 -2
- package/templates/bmad/commands/bmad-bmm-generate-project-context.md +2 -2
- package/templates/bmad/commands/bmad-bmm-market-research.md +2 -2
- package/templates/bmad/commands/bmad-bmm-qa-generate-e2e-tests.md +4 -4
- package/templates/bmad/commands/bmad-bmm-quick-dev.md +2 -2
- package/templates/bmad/commands/bmad-bmm-quick-spec.md +2 -2
- package/templates/bmad/commands/bmad-bmm-retrospective.md +4 -4
- package/templates/bmad/commands/bmad-bmm-sprint-planning.md +4 -4
- package/templates/bmad/commands/bmad-bmm-sprint-status.md +4 -4
- package/templates/bmad/commands/bmad-bmm-technical-research.md +2 -2
- package/templates/bmad/commands/bmad-bmm-validate-prd.md +2 -2
- package/templates/bmad/commands/bmad-brainstorming.md +2 -2
- package/templates/bmad/commands/bmad-editorial-review-prose.md +1 -1
- package/templates/bmad/commands/bmad-editorial-review-structure.md +1 -1
- package/templates/bmad/commands/bmad-help.md +1 -1
- package/templates/bmad/commands/bmad-index-docs.md +1 -1
- package/templates/bmad/commands/bmad-party-mode.md +2 -2
- package/templates/bmad/commands/bmad-review-adversarial-general.md +1 -1
- package/templates/bmad/commands/bmad-review-edge-case-hunter.md +10 -0
- package/templates/bmad/commands/bmad-shard-doc.md +1 -1
- package/templates/bmad/commands/bmad-tea-teach-me-testing.md +2 -2
- package/templates/bmad/commands/bmad-tea-testarch-atdd.md +4 -4
- package/templates/bmad/commands/bmad-tea-testarch-automate.md +4 -4
- package/templates/bmad/commands/bmad-tea-testarch-ci.md +4 -4
- package/templates/bmad/commands/bmad-tea-testarch-framework.md +4 -4
- package/templates/bmad/commands/bmad-tea-testarch-nfr.md +4 -4
- package/templates/bmad/commands/bmad-tea-testarch-test-design.md +4 -4
- package/templates/bmad/commands/bmad-tea-testarch-test-review.md +4 -4
- package/templates/bmad/commands/bmad-tea-testarch-trace.md +4 -4
- package/templates/bmad/core/config.yaml +1 -1
- package/templates/bmad/core/module-help.csv +1 -0
- package/templates/bmad/core/tasks/editorial-review-prose.xml +1 -1
- package/templates/bmad/core/tasks/editorial-review-structure.xml +1 -1
- package/templates/bmad/core/tasks/help.md +1 -1
- package/templates/bmad/core/tasks/index-docs.xml +1 -1
- package/templates/bmad/core/tasks/review-adversarial-general.xml +1 -1
- package/templates/bmad/core/tasks/review-edge-case-hunter.xml +63 -0
- package/templates/bmad/core/tasks/shard-doc.xml +1 -1
- package/templates/bmad/core/workflows/advanced-elicitation/workflow.xml +1 -1
- package/templates/bmad/core/workflows/brainstorming/steps/step-01-session-setup.md +31 -18
- package/templates/bmad/core/workflows/brainstorming/steps/step-01b-continue.md +1 -1
- package/templates/bmad/core/workflows/brainstorming/steps/step-03-technique-execution.md +2 -2
- package/templates/bmad/core/workflows/brainstorming/steps/step-04-idea-organization.md +2 -2
- package/templates/bmad/core/workflows/brainstorming/workflow.md +4 -2
- package/templates/bmad/core/workflows/party-mode/workflow.md +1 -1
- package/templates/bmad/tea/config.yaml +5 -1
- package/templates/bmad/tea/testarch/knowledge/contract-testing.md +24 -2
- package/templates/bmad/tea/testarch/knowledge/pact-mcp.md +204 -0
- package/templates/bmad/tea/testarch/knowledge/pactjs-utils-consumer-helpers.md +211 -0
- package/templates/bmad/tea/testarch/knowledge/pactjs-utils-overview.md +210 -0
- package/templates/bmad/tea/testarch/knowledge/pactjs-utils-provider-verifier.md +315 -0
- package/templates/bmad/tea/testarch/knowledge/pactjs-utils-request-filter.md +224 -0
- package/templates/bmad/tea/testarch/tea-index.csv +5 -0
- package/templates/bmad/tea/workflows/testarch/README.md +1 -1
- package/templates/bmad/tea/workflows/testarch/atdd/steps-c/step-01-preflight-and-context.md +30 -0
- package/templates/bmad/tea/workflows/testarch/atdd/steps-c/step-04-generate-tests.md +159 -57
- package/templates/bmad/tea/workflows/testarch/atdd/steps-c/step-04a-subagent-api-failing.md +215 -0
- package/templates/bmad/tea/workflows/testarch/atdd/steps-c/step-04b-subagent-e2e-failing.md +244 -0
- package/templates/bmad/tea/workflows/testarch/atdd/steps-c/step-04c-aggregate.md +31 -15
- package/templates/bmad/tea/workflows/testarch/atdd/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/atdd/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/atdd/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-01-preflight-and-context.md +32 -0
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-03-generate-tests.md +215 -101
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-03a-subagent-api.md +193 -0
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-03b-subagent-backend.md +246 -0
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-03b-subagent-e2e.md +213 -0
- package/templates/bmad/tea/workflows/testarch/automate/steps-c/step-03c-aggregate.md +38 -22
- package/templates/bmad/tea/workflows/testarch/automate/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/automate/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/automate/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/ci/steps-c/step-02-generate-pipeline.md +124 -1
- package/templates/bmad/tea/workflows/testarch/ci/steps-c/step-03-configure-quality-gates.md +7 -0
- package/templates/bmad/tea/workflows/testarch/ci/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/ci/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/ci/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/framework/steps-c/step-03-scaffold-framework.md +126 -3
- package/templates/bmad/tea/workflows/testarch/framework/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/framework/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/framework/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04-evaluate-and-score.md +150 -36
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04a-subagent-security.md +138 -0
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04b-subagent-performance.md +84 -0
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04c-subagent-reliability.md +85 -0
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04d-subagent-scalability.md +88 -0
- package/templates/bmad/tea/workflows/testarch/nfr-assess/steps-c/step-04e-aggregate-nfr.md +27 -10
- package/templates/bmad/tea/workflows/testarch/nfr-assess/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/nfr-assess/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/nfr-assess/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/teach-me-testing/data/tea-resources-index.yaml +3 -3
- package/templates/bmad/tea/workflows/testarch/teach-me-testing/workflow-plan-teach-me-testing.md +6 -6
- package/templates/bmad/tea/workflows/testarch/teach-me-testing/workflow.md +1 -1
- package/templates/bmad/tea/workflows/testarch/test-design/steps-c/step-02-load-context.md +30 -0
- package/templates/bmad/tea/workflows/testarch/test-design/steps-c/step-05-generate-output.md +72 -1
- package/templates/bmad/tea/workflows/testarch/test-design/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/test-design/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/test-design/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-01-load-context.md +29 -1
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03-quality-evaluation.md +147 -46
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03a-subagent-determinism.md +214 -0
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03b-subagent-isolation.md +125 -0
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03c-subagent-maintainability.md +102 -0
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03e-subagent-performance.md +117 -0
- package/templates/bmad/tea/workflows/testarch/test-review/steps-c/step-03f-aggregate-scores.md +10 -10
- package/templates/bmad/tea/workflows/testarch/test-review/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/test-review/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/test-review/workflow.yaml +2 -2
- package/templates/bmad/tea/workflows/testarch/trace/steps-c/step-04-analyze-gaps.md +92 -1
- package/templates/bmad/tea/workflows/testarch/trace/validation-report-20260127-095021.md +1 -1
- package/templates/bmad/tea/workflows/testarch/trace/validation-report-20260127-102401.md +3 -3
- package/templates/bmad/tea/workflows/testarch/trace/workflow.yaml +2 -2
- package/templates/ecc/agents/chief-of-staff.md +151 -0
- package/templates/ecc/commands/claw.md +79 -0
- package/templates/ecc/rules/README.md +23 -2
- package/templates/ecc/rules/common/development-workflow.md +37 -0
- package/templates/ecc/rules/common/git-workflow.md +2 -23
- package/templates/ecc/rules/swift/coding-style.md +47 -0
- package/templates/ecc/rules/swift/hooks.md +20 -0
- package/templates/ecc/rules/swift/patterns.md +66 -0
- package/templates/ecc/rules/swift/security.md +33 -0
- package/templates/ecc/rules/swift/testing.md +45 -0
- package/templates/ecc/skills/api-design/SKILL.md +1 -0
- package/templates/ecc/skills/article-writing/SKILL.md +85 -0
- package/templates/ecc/skills/backend-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/clickhouse-io/SKILL.md +1 -0
- package/templates/ecc/skills/coding-standards/SKILL.md +1 -0
- package/templates/ecc/skills/configure-ecc/SKILL.md +32 -4
- package/templates/ecc/skills/content-engine/SKILL.md +88 -0
- package/templates/ecc/skills/content-hash-cache-pattern/SKILL.md +1 -0
- package/templates/ecc/skills/continuous-learning/SKILL.md +2 -1
- package/templates/ecc/skills/continuous-learning-v2/SKILL.md +4 -1
- package/templates/ecc/skills/continuous-learning-v2/hooks/observe.sh +14 -7
- package/templates/ecc/skills/cost-aware-llm-pipeline/SKILL.md +1 -0
- package/templates/ecc/skills/cpp-coding-standards/SKILL.md +1 -0
- package/templates/ecc/skills/cpp-testing/SKILL.md +1 -0
- package/templates/ecc/skills/database-migrations/SKILL.md +1 -0
- package/templates/ecc/skills/deployment-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/django-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/django-security/SKILL.md +1 -0
- package/templates/ecc/skills/django-tdd/SKILL.md +1 -0
- package/templates/ecc/skills/django-verification/SKILL.md +1 -0
- package/templates/ecc/skills/docker-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/e2e-testing/SKILL.md +1 -0
- package/templates/ecc/skills/eval-harness/SKILL.md +1 -0
- package/templates/ecc/skills/foundation-models-on-device/SKILL.md +243 -0
- package/templates/ecc/skills/frontend-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/frontend-slides/SKILL.md +184 -0
- package/templates/ecc/skills/frontend-slides/STYLE_PRESETS.md +330 -0
- package/templates/ecc/skills/golang-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/golang-testing/SKILL.md +1 -0
- package/templates/ecc/skills/investor-materials/SKILL.md +96 -0
- package/templates/ecc/skills/investor-outreach/SKILL.md +76 -0
- package/templates/ecc/skills/iterative-retrieval/SKILL.md +1 -0
- package/templates/ecc/skills/java-coding-standards/SKILL.md +1 -0
- package/templates/ecc/skills/jpa-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/liquid-glass-design/SKILL.md +279 -0
- package/templates/ecc/skills/market-research/SKILL.md +75 -0
- package/templates/ecc/skills/nutrient-document-processing/SKILL.md +1 -1
- package/templates/ecc/skills/postgres-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/project-guidelines-example/SKILL.md +1 -0
- package/templates/ecc/skills/python-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/python-testing/SKILL.md +1 -0
- package/templates/ecc/skills/regex-vs-llm-structured-text/SKILL.md +1 -0
- package/templates/ecc/skills/search-first/SKILL.md +3 -1
- package/templates/ecc/skills/security-review/SKILL.md +1 -0
- package/templates/ecc/skills/security-scan/SKILL.md +1 -0
- package/templates/ecc/skills/skill-stocktake/SKILL.md +176 -0
- package/templates/ecc/skills/skill-stocktake/scripts/quick-diff.sh +87 -0
- package/templates/ecc/skills/skill-stocktake/scripts/save-results.sh +56 -0
- package/templates/ecc/skills/skill-stocktake/scripts/scan.sh +170 -0
- package/templates/ecc/skills/springboot-patterns/SKILL.md +1 -0
- package/templates/ecc/skills/springboot-security/SKILL.md +1 -0
- package/templates/ecc/skills/springboot-tdd/SKILL.md +1 -0
- package/templates/ecc/skills/springboot-verification/SKILL.md +1 -0
- package/templates/ecc/skills/strategic-compact/SKILL.md +1 -0
- package/templates/ecc/skills/swift-actor-persistence/SKILL.md +1 -0
- package/templates/ecc/skills/swift-concurrency-6-2/SKILL.md +216 -0
- package/templates/ecc/skills/swift-protocol-di-testing/SKILL.md +1 -0
- package/templates/ecc/skills/swiftui-patterns/SKILL.md +259 -0
- package/templates/ecc/skills/tdd-workflow/SKILL.md +1 -0
- package/templates/ecc/skills/verification-loop/SKILL.md +1 -0
- package/templates/ecc/skills/visa-doc-translate/README.md +86 -0
- package/templates/ecc/skills/visa-doc-translate/SKILL.md +117 -0
- package/templates/ext-skills/pinchtab/SKILL.md +89 -486
- package/templates/ext-skills/pinchtab/TRUST.md +69 -0
- package/templates/ext-skills/pinchtab/references/api.md +297 -0
- package/templates/ext-skills/pinchtab/references/env.md +45 -0
- package/templates/ext-skills/pinchtab/references/profiles.md +107 -0
- package/templates/plugins/claude-code-setup/.claude-plugin/plugin.json +9 -0
- package/templates/plugins/claude-code-setup/LICENSE +202 -0
- package/templates/plugins/claude-code-setup/README.md +29 -0
- package/templates/plugins/claude-code-setup/automation-recommender-example.png +0 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/SKILL.md +288 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/references/hooks-patterns.md +226 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/references/mcp-servers.md +263 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/references/plugins-reference.md +98 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/references/skills-reference.md +408 -0
- package/templates/plugins/claude-code-setup/skills/claude-automation-recommender/references/subagent-templates.md +181 -0
- package/templates/plugins/claude-md-management/.claude-plugin/plugin.json +9 -0
- package/templates/plugins/claude-md-management/LICENSE +202 -0
- package/templates/plugins/claude-md-management/README.md +40 -0
- package/templates/plugins/claude-md-management/claude-md-improver-example.png +0 -0
- package/templates/plugins/claude-md-management/commands/revise-claude-md.md +54 -0
- package/templates/plugins/claude-md-management/revise-claude-md-example.png +0 -0
- package/templates/plugins/claude-md-management/skills/claude-md-improver/SKILL.md +179 -0
- package/templates/plugins/claude-md-management/skills/claude-md-improver/references/quality-criteria.md +109 -0
- package/templates/plugins/claude-md-management/skills/claude-md-improver/references/templates.md +253 -0
- package/templates/plugins/claude-md-management/skills/claude-md-improver/references/update-guidelines.md +150 -0
- package/templates/plugins/code-simplifier/.claude-plugin/plugin.json +9 -0
- package/templates/plugins/code-simplifier/LICENSE +202 -0
- package/templates/plugins/code-simplifier/agents/code-simplifier.md +52 -0
- package/templates/plugins/commit-commands/.claude-plugin/plugin.json +9 -0
- package/templates/plugins/commit-commands/LICENSE +202 -0
- package/templates/plugins/commit-commands/README.md +225 -0
- package/templates/plugins/commit-commands/commands/clean_gone.md +53 -0
- package/templates/plugins/commit-commands/commands/commit-push-pr.md +20 -0
- package/templates/plugins/commit-commands/commands/commit.md +17 -0
- package/templates/trae-bmad/rules/bmad-bmm-check-implementation-readiness.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-code-review.md +4 -4
- package/templates/trae-bmad/rules/bmad-bmm-correct-course.md +4 -4
- package/templates/trae-bmad/rules/bmad-bmm-create-architecture.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-create-epics-and-stories.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-create-prd.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-create-product-brief.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-create-story.md +4 -4
- package/templates/trae-bmad/rules/bmad-bmm-create-ux-design.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-dev-story.md +4 -4
- package/templates/trae-bmad/rules/bmad-bmm-document-project.md +4 -4
- package/templates/trae-bmad/rules/bmad-bmm-domain-research.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-edit-prd.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-generate-project-context.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-market-research.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-qa-generate-e2e-tests.md +4 -4
- package/templates/trae-bmad/rules/bmad-bmm-quick-dev.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-quick-spec.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-retrospective.md +4 -4
- package/templates/trae-bmad/rules/bmad-bmm-sprint-planning.md +4 -4
- package/templates/trae-bmad/rules/bmad-bmm-sprint-status.md +4 -4
- package/templates/trae-bmad/rules/bmad-bmm-technical-research.md +2 -2
- package/templates/trae-bmad/rules/bmad-bmm-validate-prd.md +2 -2
- package/templates/trae-bmad/rules/bmad-brainstorming.md +2 -2
- package/templates/trae-bmad/rules/bmad-editorial-review-prose.md +1 -1
- package/templates/trae-bmad/rules/bmad-editorial-review-structure.md +1 -1
- package/templates/trae-bmad/rules/bmad-help.md +1 -1
- package/templates/trae-bmad/rules/bmad-index-docs.md +1 -1
- package/templates/trae-bmad/rules/bmad-party-mode.md +2 -2
- package/templates/trae-bmad/rules/bmad-review-adversarial-general.md +1 -1
- package/templates/trae-bmad/rules/bmad-review-edge-case-hunter.md +10 -0
- package/templates/trae-bmad/rules/bmad-shard-doc.md +1 -1
- package/templates/trae-bmad/rules/bmad-tea-teach-me-testing.md +2 -2
- package/templates/trae-bmad/rules/bmad-tea-testarch-atdd.md +4 -4
- package/templates/trae-bmad/rules/bmad-tea-testarch-automate.md +4 -4
- package/templates/trae-bmad/rules/bmad-tea-testarch-ci.md +4 -4
- package/templates/trae-bmad/rules/bmad-tea-testarch-framework.md +4 -4
- package/templates/trae-bmad/rules/bmad-tea-testarch-nfr.md +4 -4
- package/templates/trae-bmad/rules/bmad-tea-testarch-test-design.md +4 -4
- package/templates/trae-bmad/rules/bmad-tea-testarch-test-review.md +4 -4
- package/templates/trae-bmad/rules/bmad-tea-testarch-trace.md +4 -4
|
@@ -13,224 +13,90 @@ metadata:
|
|
|
13
13
|
emoji: "🦀"
|
|
14
14
|
requires:
|
|
15
15
|
bins: ["pinchtab"]
|
|
16
|
-
env:
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
optional: true
|
|
23
|
-
description: "Bind address (default: 127.0.0.1, set 0.0.0.0 for network access)"
|
|
24
|
-
- name: BRIDGE_PORT
|
|
25
|
-
optional: true
|
|
26
|
-
description: "HTTP port (default: 9867)"
|
|
27
|
-
- name: BRIDGE_HEADLESS
|
|
28
|
-
optional: true
|
|
29
|
-
description: "Run Chrome headless (true/false)"
|
|
30
|
-
- name: BRIDGE_PROFILE
|
|
31
|
-
optional: true
|
|
32
|
-
description: "Chrome profile directory (default: ~/.pinchtab/chrome-profile)"
|
|
33
|
-
- name: BRIDGE_STATE_DIR
|
|
34
|
-
optional: true
|
|
35
|
-
description: "State/session storage directory (default: ~/.pinchtab)"
|
|
36
|
-
- name: BRIDGE_NO_RESTORE
|
|
37
|
-
optional: true
|
|
38
|
-
description: "Skip restoring tabs from previous session (true/false)"
|
|
39
|
-
- name: BRIDGE_STEALTH
|
|
40
|
-
optional: true
|
|
41
|
-
description: "Stealth level: light (default, basic) or full (canvas/WebGL/font spoofing)"
|
|
42
|
-
- name: BRIDGE_MAX_TABS
|
|
43
|
-
optional: true
|
|
44
|
-
description: "Maximum number of open tabs (default: 20, 0 = unlimited)"
|
|
45
|
-
- name: BRIDGE_BLOCK_IMAGES
|
|
46
|
-
optional: true
|
|
47
|
-
description: "Block image loading for faster, lower-bandwidth browsing (true/false)"
|
|
48
|
-
- name: BRIDGE_BLOCK_MEDIA
|
|
49
|
-
optional: true
|
|
50
|
-
description: "Block all media: images + fonts + CSS + video (true/false)"
|
|
51
|
-
- name: BRIDGE_NO_ANIMATIONS
|
|
52
|
-
optional: true
|
|
53
|
-
description: "Disable CSS animations/transitions globally (true/false)"
|
|
54
|
-
- name: BRIDGE_TIMEZONE
|
|
55
|
-
optional: true
|
|
56
|
-
description: "Force browser timezone (IANA tz, e.g. Europe/Rome)"
|
|
57
|
-
- name: BRIDGE_CHROME_VERSION
|
|
58
|
-
optional: true
|
|
59
|
-
description: "Chrome version string used by fingerprint rotation profiles"
|
|
60
|
-
- name: CHROME_BINARY
|
|
61
|
-
optional: true
|
|
62
|
-
description: "Path to Chrome/Chromium binary (auto-detected if not set)"
|
|
63
|
-
- name: CHROME_FLAGS
|
|
64
|
-
optional: true
|
|
65
|
-
description: "Extra Chrome flags, space-separated"
|
|
66
|
-
- name: BRIDGE_CONFIG
|
|
67
|
-
optional: true
|
|
68
|
-
description: "Path to config JSON file (default: ~/.pinchtab/config.json)"
|
|
69
|
-
- name: BRIDGE_TIMEOUT
|
|
70
|
-
optional: true
|
|
71
|
-
description: "Action timeout in seconds (default: 15)"
|
|
72
|
-
- name: BRIDGE_NAV_TIMEOUT
|
|
73
|
-
optional: true
|
|
74
|
-
description: "Navigation timeout in seconds (default: 30)"
|
|
75
|
-
- name: CDP_URL
|
|
76
|
-
optional: true
|
|
77
|
-
description: "Connect to existing Chrome DevTools instead of launching"
|
|
78
|
-
- name: BRIDGE_NO_DASHBOARD
|
|
79
|
-
optional: true
|
|
80
|
-
description: "Disable dashboard/orchestrator endpoints on instance processes"
|
|
81
|
-
- name: PINCHTAB_AUTO_LAUNCH
|
|
82
|
-
optional: true
|
|
83
|
-
description: "Dashboard mode: auto-launch default profile instance on startup"
|
|
84
|
-
- name: PINCHTAB_DEFAULT_PROFILE
|
|
85
|
-
optional: true
|
|
86
|
-
description: "Dashboard mode: default profile name for auto-launch"
|
|
87
|
-
- name: PINCHTAB_DEFAULT_PORT
|
|
88
|
-
optional: true
|
|
89
|
-
description: "Dashboard mode: default port for auto-launched profile"
|
|
90
|
-
- name: PINCHTAB_HEADED
|
|
91
|
-
optional: true
|
|
92
|
-
description: "Dashboard mode: when set, auto-launched profile runs headed"
|
|
93
|
-
- name: PINCHTAB_DASHBOARD_URL
|
|
94
|
-
optional: true
|
|
95
|
-
description: "Base dashboard URL used by `pinchtab connect` helper"
|
|
16
|
+
env: |
|
|
17
|
+
BRIDGE_TOKEN (optional, secret) - Bearer auth token for Pinchtab API
|
|
18
|
+
BRIDGE_PORT (optional) - HTTP port, default 9867
|
|
19
|
+
BRIDGE_HEADLESS (optional) - true/false for headless Chrome
|
|
20
|
+
BRIDGE_PROFILE (optional) - Chrome profile directory
|
|
21
|
+
BRIDGE_BIND (optional) - Bind address, default 127.0.0.1
|
|
96
22
|
---
|
|
97
23
|
|
|
98
24
|
# Pinchtab
|
|
99
25
|
|
|
100
26
|
Fast, lightweight browser control for AI agents via HTTP + accessibility tree.
|
|
101
27
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
Start Pinchtab in one of these modes:
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
# Headless (default) — no UI, pure automation (lowest token cost when using /text and filtered snapshots)
|
|
108
|
-
pinchtab &
|
|
109
|
-
|
|
110
|
-
# Headed — visible Chrome for human + agent workflows
|
|
111
|
-
BRIDGE_HEADLESS=false pinchtab &
|
|
112
|
-
|
|
113
|
-
# Dashboard/orchestrator — profile manager + launcher, no browser in dashboard process
|
|
114
|
-
pinchtab dashboard &
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Default port: `9867`. Override with `BRIDGE_PORT=9868`.
|
|
118
|
-
Auth: set `BRIDGE_TOKEN=<secret>` and pass `Authorization: Bearer <secret>`.
|
|
119
|
-
|
|
120
|
-
Base URL for all examples: `http://localhost:9867`
|
|
121
|
-
|
|
122
|
-
Token savings come from the API shape (`/text`, `/snapshot?filter=interactive&format=compact`), not from headless vs headed alone.
|
|
123
|
-
|
|
124
|
-
### Headed mode definition
|
|
28
|
+
**Security Note:** Pinchtab runs entirely locally. It does not contact external services, send telemetry, or exfiltrate data. However, it controls a real Chrome instance — if pointed at a profile with saved logins, agents can access authenticated sites. Always use a dedicated empty profile and set BRIDGE_TOKEN when exposing the API. See [TRUST.md](TRUST.md) for the full security model.
|
|
125
29
|
|
|
126
|
-
|
|
30
|
+
## Quick Start (Agent Workflow)
|
|
127
31
|
|
|
128
|
-
-
|
|
129
|
-
- Agent then calls Pinchtab HTTP APIs against that same running profile instance
|
|
130
|
-
- Session state persists in the profile directory, so follow-up runs reuse cookies/storage
|
|
131
|
-
|
|
132
|
-
In dashboard workflows, the dashboard process itself does not launch Chrome; it launches profile instances that run Chrome (headed or headless).
|
|
133
|
-
|
|
134
|
-
To resolve a running profile endpoint from dashboard state:
|
|
32
|
+
The 30-second pattern for browser tasks:
|
|
135
33
|
|
|
136
34
|
```bash
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
Recommended human + agent flow:
|
|
141
|
-
|
|
142
|
-
```bash
|
|
143
|
-
# human
|
|
144
|
-
pinchtab dashboard
|
|
145
|
-
# setup profile + launch profile instance
|
|
146
|
-
|
|
147
|
-
# agent
|
|
148
|
-
PINCHTAB_BASE_URL="$(pinchtab connect <profile-name>)"
|
|
149
|
-
curl "$PINCHTAB_BASE_URL/health"
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
## Profile Management (Dashboard Mode)
|
|
153
|
-
|
|
154
|
-
When running `pinchtab dashboard`, profiles are managed via the dashboard API on port 9867.
|
|
155
|
-
|
|
156
|
-
### List profiles
|
|
35
|
+
# 1. Start Pinchtab (runs forever, local on :9867)
|
|
36
|
+
pinchtab &
|
|
157
37
|
|
|
158
|
-
|
|
159
|
-
|
|
38
|
+
# 2. In your agent, follow this loop:
|
|
39
|
+
# a) Navigate to a URL
|
|
40
|
+
# b) Snapshot the page (get refs like e0, e5, e12)
|
|
41
|
+
# c) Act on a ref (click e5, type e12 "search text")
|
|
42
|
+
# d) Snapshot again to see the result
|
|
43
|
+
# e) Repeat step c-d until done
|
|
160
44
|
```
|
|
161
45
|
|
|
162
|
-
|
|
46
|
+
**That's it.** Refs are stable—you don't need to re-snapshot before every action. Only snapshot when the page changes significantly.
|
|
163
47
|
|
|
164
|
-
###
|
|
48
|
+
### Recommended Secure Setup
|
|
165
49
|
|
|
166
50
|
```bash
|
|
167
|
-
#
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
-H 'Content-Type: application/json' \
|
|
173
|
-
-d '{"port": "9868", "headless": true}'
|
|
174
|
-
|
|
175
|
-
# Short alias (same behavior)
|
|
176
|
-
curl -X POST http://localhost:9867/start/278be873adeb
|
|
51
|
+
# Best practice for AI agents
|
|
52
|
+
BRIDGE_BIND=127.0.0.1 \
|
|
53
|
+
BRIDGE_TOKEN="your-strong-secret" \
|
|
54
|
+
BRIDGE_PROFILE=~/.pinchtab/automation-profile \
|
|
55
|
+
pinchtab &
|
|
177
56
|
```
|
|
178
57
|
|
|
179
|
-
|
|
58
|
+
**Never expose to 0.0.0.0 without a token. Never point at your daily Chrome profile.**
|
|
180
59
|
|
|
181
|
-
|
|
60
|
+
## Setup
|
|
182
61
|
|
|
183
62
|
```bash
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
# Short alias
|
|
187
|
-
curl -X POST http://localhost:9867/stop/278be873adeb
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Check profile instance status
|
|
63
|
+
# Headless (default) — no visible window
|
|
64
|
+
pinchtab &
|
|
191
65
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
curl http://localhost:9867/profiles/278be873adeb/instance
|
|
66
|
+
# Headed — visible Chrome window for human debugging
|
|
67
|
+
BRIDGE_HEADLESS=false pinchtab &
|
|
195
68
|
|
|
196
|
-
#
|
|
197
|
-
|
|
198
|
-
```
|
|
69
|
+
# With auth token
|
|
70
|
+
BRIDGE_TOKEN="your-secret-token" pinchtab &
|
|
199
71
|
|
|
200
|
-
|
|
72
|
+
# Custom port
|
|
73
|
+
BRIDGE_PORT=8080 pinchtab &
|
|
201
74
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
-H 'Content-Type: application/json' \
|
|
205
|
-
-d '{"name": "work", "port": "9868"}'
|
|
75
|
+
# Dashboard/orchestrator — profile manager + tab launcher
|
|
76
|
+
pinchtab dashboard &
|
|
206
77
|
```
|
|
207
78
|
|
|
208
|
-
|
|
79
|
+
Default: **port 9867**, no auth required (local). Set `BRIDGE_TOKEN` for remote access.
|
|
209
80
|
|
|
210
|
-
|
|
211
|
-
# 1. List profiles to find the right one
|
|
212
|
-
PROFILES=$(curl -s http://localhost:9867/profiles)
|
|
213
|
-
# Pick the profile ID you need (12-char hex, e.g. "278be873adeb")
|
|
214
|
-
|
|
215
|
-
# 2. Start the profile (auto-allocates port)
|
|
216
|
-
INSTANCE=$(curl -s -X POST http://localhost:9867/profiles/$PROFILE_ID/start)
|
|
217
|
-
PORT=$(echo $INSTANCE | jq -r .port)
|
|
81
|
+
For advanced setup, see [references/profiles.md](references/profiles.md) and [references/env.md](references/env.md).
|
|
218
82
|
|
|
219
|
-
|
|
220
|
-
curl -X POST http://localhost:$PORT/navigate -H 'Content-Type: application/json' \
|
|
221
|
-
-d '{"url": "https://mail.google.com"}'
|
|
222
|
-
curl http://localhost:$PORT/snapshot?maxTokens=4000
|
|
83
|
+
## What a Snapshot Looks Like
|
|
223
84
|
|
|
224
|
-
|
|
225
|
-
curl http://localhost:9867/profiles/$PROFILE_ID/instance
|
|
85
|
+
After calling `/snapshot`, you get the page's accessibility tree as JSON—flat list of elements with refs:
|
|
226
86
|
|
|
227
|
-
|
|
228
|
-
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"refs": [
|
|
90
|
+
{"id": "e0", "role": "link", "text": "Sign In", "selector": "a[href='/login']"},
|
|
91
|
+
{"id": "e1", "role": "textbox", "label": "Email", "selector": "input[name='email']"},
|
|
92
|
+
{"id": "e2", "role": "button", "text": "Submit", "selector": "button[type='submit']"}
|
|
93
|
+
],
|
|
94
|
+
"text": "... readable text version of page ...",
|
|
95
|
+
"title": "Login Page"
|
|
96
|
+
}
|
|
229
97
|
```
|
|
230
98
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
Each profile gets a stable 12-char hex ID (SHA-256 of name, truncated) stored in `profile.json`. The ID is generated at creation time and never changes. Use IDs instead of names in automation — they're URL-safe and stable.
|
|
99
|
+
Then you act on refs: `click e0`, `type e1 "user@example.com"`, `press e2 Enter`.
|
|
234
100
|
|
|
235
101
|
## Core Workflow
|
|
236
102
|
|
|
@@ -243,268 +109,22 @@ The typical agent loop:
|
|
|
243
109
|
|
|
244
110
|
Refs (e.g. `e0`, `e5`, `e12`) are cached per tab after each snapshot — no need to re-snapshot before every action unless the page changed significantly.
|
|
245
111
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
### Navigate
|
|
249
|
-
|
|
250
|
-
```bash
|
|
251
|
-
curl -X POST http://localhost:9867/navigate \
|
|
252
|
-
-H 'Content-Type: application/json' \
|
|
253
|
-
-d '{"url": "https://example.com"}'
|
|
254
|
-
|
|
255
|
-
# With options: custom timeout, block images, open in new tab
|
|
256
|
-
curl -X POST http://localhost:9867/navigate \
|
|
257
|
-
-H 'Content-Type: application/json' \
|
|
258
|
-
-d '{"url": "https://example.com", "timeout": 60, "blockImages": true, "newTab": true}'
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
### Snapshot (accessibility tree)
|
|
262
|
-
|
|
263
|
-
```bash
|
|
264
|
-
# Full tree
|
|
265
|
-
curl http://localhost:9867/snapshot
|
|
266
|
-
|
|
267
|
-
# Interactive elements only (buttons, links, inputs) — much smaller
|
|
268
|
-
curl "http://localhost:9867/snapshot?filter=interactive"
|
|
269
|
-
|
|
270
|
-
# Limit depth
|
|
271
|
-
curl "http://localhost:9867/snapshot?depth=5"
|
|
272
|
-
|
|
273
|
-
# Smart diff — only changes since last snapshot (massive token savings)
|
|
274
|
-
curl "http://localhost:9867/snapshot?diff=true"
|
|
275
|
-
|
|
276
|
-
# Text format — indented tree, ~40-60% fewer tokens than JSON
|
|
277
|
-
curl "http://localhost:9867/snapshot?format=text"
|
|
278
|
-
|
|
279
|
-
# Compact format — one-line-per-node, 56-64% fewer tokens than JSON (recommended)
|
|
280
|
-
curl "http://localhost:9867/snapshot?format=compact"
|
|
281
|
-
|
|
282
|
-
# YAML format
|
|
283
|
-
curl "http://localhost:9867/snapshot?format=yaml"
|
|
284
|
-
|
|
285
|
-
# Scope to CSS selector (e.g. main content only)
|
|
286
|
-
curl "http://localhost:9867/snapshot?selector=main"
|
|
287
|
-
|
|
288
|
-
# Truncate to ~N tokens
|
|
289
|
-
curl "http://localhost:9867/snapshot?maxTokens=2000"
|
|
290
|
-
|
|
291
|
-
# Combine for maximum efficiency
|
|
292
|
-
curl "http://localhost:9867/snapshot?format=compact&selector=main&maxTokens=2000&filter=interactive"
|
|
293
|
-
|
|
294
|
-
# Disable animations before capture
|
|
295
|
-
curl "http://localhost:9867/snapshot?noAnimations=true"
|
|
296
|
-
|
|
297
|
-
# Write to file
|
|
298
|
-
curl "http://localhost:9867/snapshot?output=file&path=/tmp/snapshot.json"
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
Returns flat JSON array of nodes with `ref`, `role`, `name`, `depth`, `value`, `nodeId`.
|
|
302
|
-
|
|
303
|
-
**Token optimization**: Use `?format=compact` for best token efficiency. Add `?filter=interactive` for action-oriented tasks (~75% fewer nodes). Use `?selector=main` to scope to relevant content. Use `?maxTokens=2000` to cap output. Use `?diff=true` on multi-step workflows to see only changes. Combine all params freely.
|
|
304
|
-
|
|
305
|
-
### Act on elements
|
|
112
|
+
### Quick examples
|
|
306
113
|
|
|
307
114
|
```bash
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
#
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
-H 'Content-Type: application/json' \
|
|
319
|
-
-d '{"kind": "type", "ref": "e12", "text": "hello world"}'
|
|
320
|
-
|
|
321
|
-
# Press a key
|
|
322
|
-
curl -X POST http://localhost:9867/action \
|
|
323
|
-
-H 'Content-Type: application/json' \
|
|
324
|
-
-d '{"kind": "press", "key": "Enter"}'
|
|
325
|
-
|
|
326
|
-
# Focus an element
|
|
327
|
-
curl -X POST http://localhost:9867/action \
|
|
328
|
-
-H 'Content-Type: application/json' \
|
|
329
|
-
-d '{"kind": "focus", "ref": "e3"}'
|
|
330
|
-
|
|
331
|
-
# Fill (set value directly, no keystrokes)
|
|
332
|
-
curl -X POST http://localhost:9867/action \
|
|
333
|
-
-H 'Content-Type: application/json' \
|
|
334
|
-
-d '{"kind": "fill", "selector": "#email", "text": "user@example.com"}'
|
|
335
|
-
|
|
336
|
-
# Hover (trigger dropdowns/tooltips)
|
|
337
|
-
curl -X POST http://localhost:9867/action \
|
|
338
|
-
-H 'Content-Type: application/json' \
|
|
339
|
-
-d '{"kind": "hover", "ref": "e8"}'
|
|
340
|
-
|
|
341
|
-
# Select dropdown option (by value or visible text)
|
|
342
|
-
curl -X POST http://localhost:9867/action \
|
|
343
|
-
-H 'Content-Type: application/json' \
|
|
344
|
-
-d '{"kind": "select", "ref": "e10", "value": "option2"}'
|
|
345
|
-
|
|
346
|
-
# Scroll to element
|
|
347
|
-
curl -X POST http://localhost:9867/action \
|
|
348
|
-
-H 'Content-Type: application/json' \
|
|
349
|
-
-d '{"kind": "scroll", "ref": "e20"}'
|
|
350
|
-
|
|
351
|
-
# Scroll by pixels (infinite scroll pages)
|
|
352
|
-
curl -X POST http://localhost:9867/action \
|
|
353
|
-
-H 'Content-Type: application/json' \
|
|
354
|
-
-d '{"kind": "scroll", "scrollY": 800}'
|
|
355
|
-
|
|
356
|
-
# Click and wait for navigation (link clicks)
|
|
357
|
-
curl -X POST http://localhost:9867/action \
|
|
358
|
-
-H 'Content-Type: application/json' \
|
|
359
|
-
-d '{"kind": "click", "ref": "e5", "waitNav": true}'
|
|
115
|
+
pinchtab nav https://example.com
|
|
116
|
+
pinchtab snap -i -c # interactive + compact
|
|
117
|
+
pinchtab click e5
|
|
118
|
+
pinchtab type e12 hello world
|
|
119
|
+
pinchtab press Enter
|
|
120
|
+
pinchtab text # readable text (~1K tokens)
|
|
121
|
+
pinchtab text | jq .text # pipe to jq
|
|
122
|
+
pinchtab ss -o page.jpg # screenshot
|
|
123
|
+
pinchtab eval "document.title" # run JavaScript
|
|
124
|
+
pinchtab pdf -o page.pdf # export PDF
|
|
360
125
|
```
|
|
361
126
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
```bash
|
|
365
|
-
# Readability mode (default) — strips nav/footer/ads, keeps article/main content
|
|
366
|
-
curl http://localhost:9867/text
|
|
367
|
-
|
|
368
|
-
# Raw innerText (old behavior)
|
|
369
|
-
curl "http://localhost:9867/text?mode=raw"
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
Returns `{url, title, text}`. Cheapest option (~1K tokens for most pages).
|
|
373
|
-
|
|
374
|
-
### Download files
|
|
375
|
-
|
|
376
|
-
```bash
|
|
377
|
-
# Download using browser session (preserves cookies, auth, stealth)
|
|
378
|
-
# Returns base64 JSON by default
|
|
379
|
-
curl "http://localhost:9867/download?url=https://site.com/report.pdf"
|
|
380
|
-
|
|
381
|
-
# Raw bytes (pipe to file)
|
|
382
|
-
curl "http://localhost:9867/download?url=https://site.com/image.jpg&raw=true" -o image.jpg
|
|
383
|
-
|
|
384
|
-
# Save directly to disk
|
|
385
|
-
curl "http://localhost:9867/download?url=https://site.com/export.csv&output=file&path=/tmp/export.csv"
|
|
386
|
-
```
|
|
387
|
-
|
|
388
|
-
Key use case: downloading files from authenticated sites — the browser's cookies and stealth settings are used automatically. No need to extract cookies and use curl separately.
|
|
389
|
-
|
|
390
|
-
### Upload files
|
|
391
|
-
|
|
392
|
-
```bash
|
|
393
|
-
# Upload a local file to a file input
|
|
394
|
-
curl -X POST "http://localhost:9867/upload?tabId=TAB_ID" \
|
|
395
|
-
-H "Content-Type: application/json" \
|
|
396
|
-
-d '{"selector": "input[type=file]", "paths": ["/tmp/photo.jpg"]}'
|
|
397
|
-
|
|
398
|
-
# Upload base64-encoded data
|
|
399
|
-
curl -X POST "http://localhost:9867/upload" \
|
|
400
|
-
-H "Content-Type: application/json" \
|
|
401
|
-
-d '{"selector": "#avatar-input", "files": ["data:image/png;base64,iVBOR..."]}'
|
|
402
|
-
|
|
403
|
-
# Combine both — local files + base64
|
|
404
|
-
curl -X POST "http://localhost:9867/upload" \
|
|
405
|
-
-H "Content-Type: application/json" \
|
|
406
|
-
-d '{"selector": "input[type=file]", "paths": ["/tmp/doc.pdf"], "files": ["data:image/png;base64,..."]}'
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
Sets files on `<input type=file>` elements via CDP. The browser fires `change` events as if the user picked files. Selector defaults to `input[type=file]` if omitted. Supports base64 data URLs, raw base64 strings, and local file paths.
|
|
410
|
-
|
|
411
|
-
### Screenshot
|
|
412
|
-
|
|
413
|
-
```bash
|
|
414
|
-
# Raw JPEG bytes
|
|
415
|
-
curl "http://localhost:9867/screenshot?raw=true" -o screenshot.jpg
|
|
416
|
-
|
|
417
|
-
# With quality setting (default 80)
|
|
418
|
-
curl "http://localhost:9867/screenshot?raw=true&quality=50" -o screenshot.jpg
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
### Evaluate JavaScript
|
|
422
|
-
|
|
423
|
-
```bash
|
|
424
|
-
curl -X POST http://localhost:9867/evaluate \
|
|
425
|
-
-H 'Content-Type: application/json' \
|
|
426
|
-
-d '{"expression": "document.title"}'
|
|
427
|
-
```
|
|
428
|
-
|
|
429
|
-
### Tab management
|
|
430
|
-
|
|
431
|
-
```bash
|
|
432
|
-
# List tabs
|
|
433
|
-
curl http://localhost:9867/tabs
|
|
434
|
-
|
|
435
|
-
# Open new tab
|
|
436
|
-
curl -X POST http://localhost:9867/tab \
|
|
437
|
-
-H 'Content-Type: application/json' \
|
|
438
|
-
-d '{"action": "new", "url": "https://example.com"}'
|
|
439
|
-
|
|
440
|
-
# Close tab
|
|
441
|
-
curl -X POST http://localhost:9867/tab \
|
|
442
|
-
-H 'Content-Type: application/json' \
|
|
443
|
-
-d '{"action": "close", "tabId": "TARGET_ID"}'
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
Multi-tab: pass `?tabId=TARGET_ID` to snapshot/screenshot/text, or `"tabId"` in POST body.
|
|
447
|
-
|
|
448
|
-
### Tab locking (multi-agent)
|
|
449
|
-
|
|
450
|
-
```bash
|
|
451
|
-
# Lock a tab (default 30s timeout, max 5min)
|
|
452
|
-
curl -X POST http://localhost:9867/tab/lock \
|
|
453
|
-
-H 'Content-Type: application/json' \
|
|
454
|
-
-d '{"tabId": "TARGET_ID", "owner": "agent-1", "timeoutSec": 60}'
|
|
455
|
-
|
|
456
|
-
# Unlock
|
|
457
|
-
curl -X POST http://localhost:9867/tab/unlock \
|
|
458
|
-
-H 'Content-Type: application/json' \
|
|
459
|
-
-d '{"tabId": "TARGET_ID", "owner": "agent-1"}'
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
Locked tabs show `owner` and `lockedUntil` in `/tabs`. Returns 409 on conflict.
|
|
463
|
-
|
|
464
|
-
### Batch actions
|
|
465
|
-
|
|
466
|
-
```bash
|
|
467
|
-
# Execute multiple actions in sequence
|
|
468
|
-
curl -X POST http://localhost:9867/actions \
|
|
469
|
-
-H 'Content-Type: application/json' \
|
|
470
|
-
-d '{"actions":[{"kind":"click","ref":"e3"},{"kind":"type","ref":"e3","text":"hello"},{"kind":"press","key":"Enter"}]}'
|
|
471
|
-
|
|
472
|
-
# Stop on first error (default: false, continues through all)
|
|
473
|
-
curl -X POST http://localhost:9867/actions \
|
|
474
|
-
-H 'Content-Type: application/json' \
|
|
475
|
-
-d '{"tabId":"TARGET_ID","actions":[...],"stopOnError":true}'
|
|
476
|
-
```
|
|
477
|
-
|
|
478
|
-
### Cookies
|
|
479
|
-
|
|
480
|
-
```bash
|
|
481
|
-
# Get cookies for current page
|
|
482
|
-
curl http://localhost:9867/cookies
|
|
483
|
-
|
|
484
|
-
# Set cookies
|
|
485
|
-
curl -X POST http://localhost:9867/cookies \
|
|
486
|
-
-H 'Content-Type: application/json' \
|
|
487
|
-
-d '{"url":"https://example.com","cookies":[{"name":"session","value":"abc123"}]}'
|
|
488
|
-
```
|
|
489
|
-
|
|
490
|
-
### Stealth
|
|
491
|
-
|
|
492
|
-
```bash
|
|
493
|
-
# Check stealth status and score
|
|
494
|
-
curl http://localhost:9867/stealth/status
|
|
495
|
-
|
|
496
|
-
# Rotate browser fingerprint
|
|
497
|
-
curl -X POST http://localhost:9867/fingerprint/rotate \
|
|
498
|
-
-H 'Content-Type: application/json' \
|
|
499
|
-
-d '{"os":"windows"}'
|
|
500
|
-
# os: "windows", "mac", or omit for random
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
### Health check
|
|
504
|
-
|
|
505
|
-
```bash
|
|
506
|
-
curl http://localhost:9867/health
|
|
507
|
-
```
|
|
127
|
+
For the full HTTP API (curl examples, download, upload, cookies, stealth, batch actions, PDF export with full parameter control), see [references/api.md](references/api.md).
|
|
508
128
|
|
|
509
129
|
## Token Cost Guide
|
|
510
130
|
|
|
@@ -513,58 +133,41 @@ curl http://localhost:9867/health
|
|
|
513
133
|
| `/text` | ~800 | Reading page content |
|
|
514
134
|
| `/snapshot?filter=interactive` | ~3,600 | Finding buttons/links to click |
|
|
515
135
|
| `/snapshot?diff=true` | varies | Multi-step workflows (only changes) |
|
|
516
|
-
| `/snapshot?format=compact` | ~56-64% less | One-line-per-node, best
|
|
517
|
-
| `/snapshot?format=text` | ~40-60% less | Indented tree, cheaper than JSON |
|
|
136
|
+
| `/snapshot?format=compact` | ~56-64% less | One-line-per-node, best efficiency |
|
|
518
137
|
| `/snapshot` | ~10,500 | Full page understanding |
|
|
519
138
|
| `/screenshot` | ~2K (vision) | Visual verification |
|
|
139
|
+
| `/pdf` | 0 (binary) | Export page as PDF (no token cost) |
|
|
520
140
|
|
|
521
|
-
**Strategy**: Start with
|
|
141
|
+
**Strategy**: Start with `?filter=interactive&format=compact`. Use `?diff=true` on subsequent snapshots. Use `/text` when you only need readable content. Full `/snapshot` only when needed.
|
|
522
142
|
|
|
523
|
-
##
|
|
143
|
+
## Agent Optimization
|
|
524
144
|
|
|
525
|
-
|
|
145
|
+
**Validated Feb 2026**: Testing with AI agents revealed a critical pattern for reliable, token-efficient scraping.
|
|
526
146
|
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
| `CHROME_FLAGS` | (none) | Extra Chrome flags (space-separated) |
|
|
545
|
-
| `BRIDGE_CONFIG` | `~/.pinchtab/config.json` | Path to config JSON file |
|
|
546
|
-
| `BRIDGE_TIMEOUT` | `15` | Action timeout (seconds) |
|
|
547
|
-
| `BRIDGE_NAV_TIMEOUT` | `30` | Navigation timeout (seconds) |
|
|
548
|
-
| `CDP_URL` | (none) | Connect to existing Chrome DevTools |
|
|
549
|
-
| `BRIDGE_NO_DASHBOARD` | `false` | Disable dashboard/orchestrator endpoints on instance processes |
|
|
550
|
-
|
|
551
|
-
### Dashboard mode (`pinchtab dashboard`)
|
|
552
|
-
|
|
553
|
-
| Var | Default | Description |
|
|
554
|
-
|---|---|---|
|
|
555
|
-
| `PINCHTAB_AUTO_LAUNCH` | `false` | Auto-launch a default profile at dashboard startup |
|
|
556
|
-
| `PINCHTAB_DEFAULT_PROFILE` | `default` | Profile name for auto-launch |
|
|
557
|
-
| `PINCHTAB_DEFAULT_PORT` | `9867` | Port for auto-launched profile |
|
|
558
|
-
| `PINCHTAB_HEADED` | (unset) | If set, auto-launched profile is headed; unset means headless |
|
|
559
|
-
| `PINCHTAB_DASHBOARD_URL` | `http://localhost:$BRIDGE_PORT` | CLI helper base URL for `pinchtab connect` |
|
|
147
|
+
**See the full guide:** [docs/agent-optimization.md](../../docs/agent-optimization.md)
|
|
148
|
+
|
|
149
|
+
### Quick Summary
|
|
150
|
+
|
|
151
|
+
**The 3-second pattern** — wait after navigate before snapshot:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
curl -X POST http://localhost:9867/navigate \
|
|
155
|
+
-H "Content-Type: application/json" \
|
|
156
|
+
-d '{"url": "https://example.com"}' && \
|
|
157
|
+
sleep 3 && \
|
|
158
|
+
curl http://localhost:9867/snapshot | jq '.nodes[] | select(.name | length > 15) | .name'
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Token savings:** 93% reduction (3,842 → 272 tokens) when using prescriptive instructions vs. exploratory agent approach.
|
|
162
|
+
|
|
163
|
+
For detailed findings, system prompt templates, and site-specific notes, see [docs/agent-optimization.md](../../docs/agent-optimization.md).
|
|
560
164
|
|
|
561
165
|
## Tips
|
|
562
166
|
|
|
563
|
-
- **Always pass `tabId` explicitly** when working with multiple tabs
|
|
167
|
+
- **Always pass `tabId` explicitly** when working with multiple tabs
|
|
564
168
|
- Refs are stable between snapshot and actions — no need to re-snapshot before clicking
|
|
565
|
-
- After navigation or major page changes, take a new snapshot
|
|
566
|
-
- Use `filter=interactive` by default, fall back to full snapshot when needed
|
|
169
|
+
- After navigation or major page changes, take a new snapshot for fresh refs
|
|
567
170
|
- Pinchtab persists sessions — tabs survive restarts (disable with `BRIDGE_NO_RESTORE=true`)
|
|
568
171
|
- Chrome profile is persistent — cookies/logins carry over between runs
|
|
569
|
-
-
|
|
570
|
-
-
|
|
172
|
+
- Use `BRIDGE_BLOCK_IMAGES=true` or `"blockImages": true` on navigate for read-heavy tasks
|
|
173
|
+
- **Wait 3+ seconds after navigate before snapshot** — Chrome needs time to render 2000+ accessibility tree nodes
|