├── .claude
├── skills
│ ├── web-frameworks
│ │ └── scripts
│ │ │ ├── __init__.py
│ │ │ ├── tests
│ │ │ └── requirements.txt
│ │ │ ├── .coverage
│ │ │ └── requirements.txt
│ ├── chrome-devtools
│ │ └── scripts
│ │ │ ├── .gitignore
│ │ │ ├── package.json
│ │ │ ├── navigate.js
│ │ │ ├── evaluate.js
│ │ │ ├── console.js
│ │ │ ├── fill.js
│ │ │ ├── install.sh
│ │ │ ├── click.js
│ │ │ ├── lib
│ │ │ └── browser.js
│ │ │ └── network.js
│ ├── mcp-builder
│ │ └── scripts
│ │ │ ├── requirements.txt
│ │ │ └── example_evaluation.xml
│ ├── media-processing
│ │ └── scripts
│ │ │ ├── tests
│ │ │ ├── requirements.txt
│ │ │ └── .coverage
│ │ │ └── requirements.txt
│ ├── devops
│ │ ├── scripts
│ │ │ ├── tests
│ │ │ │ └── requirements.txt
│ │ │ └── requirements.txt
│ │ ├── .env.example
│ │ └── references
│ │ │ └── cloudflare-d1-kv.md
│ ├── ui-styling
│ │ ├── scripts
│ │ │ ├── tests
│ │ │ │ └── requirements.txt
│ │ │ ├── .coverage
│ │ │ └── requirements.txt
│ │ └── canvas-fonts
│ │ │ ├── Jura-Light.ttf
│ │ │ ├── Lora-Bold.ttf
│ │ │ ├── Jura-Medium.ttf
│ │ │ ├── Lora-Italic.ttf
│ │ │ ├── Lora-Regular.ttf
│ │ │ ├── Outfit-Bold.ttf
│ │ │ ├── Tektur-Medium.ttf
│ │ │ ├── WorkSans-Bold.ttf
│ │ │ ├── CrimsonPro-Bold.ttf
│ │ │ ├── DMMono-Regular.ttf
│ │ │ ├── GeistMono-Bold.ttf
│ │ │ ├── Gloock-Regular.ttf
│ │ │ ├── Lora-BoldItalic.ttf
│ │ │ ├── Outfit-Regular.ttf
│ │ │ ├── RedHatMono-Bold.ttf
│ │ │ ├── Tektur-Regular.ttf
│ │ │ ├── WorkSans-Italic.ttf
│ │ │ ├── ArsenalSC-Regular.ttf
│ │ │ ├── BigShoulders-Bold.ttf
│ │ │ ├── Boldonse-Regular.ttf
│ │ │ ├── CrimsonPro-Italic.ttf
│ │ │ ├── CrimsonPro-Regular.ttf
│ │ │ ├── EricaOne-Regular.ttf
│ │ │ ├── GeistMono-Regular.ttf
│ │ │ ├── IBMPlexMono-Bold.ttf
│ │ │ ├── IBMPlexSerif-Bold.ttf
│ │ │ ├── Italiana-Regular.ttf
│ │ │ ├── JetBrainsMono-Bold.ttf
│ │ │ ├── NationalPark-Bold.ttf
│ │ │ ├── PoiretOne-Regular.ttf
│ │ │ ├── RedHatMono-Regular.ttf
│ │ │ ├── Silkscreen-Regular.ttf
│ │ │ ├── SmoochSans-Medium.ttf
│ │ │ ├── WorkSans-Regular.ttf
│ │ │ ├── YoungSerif-Regular.ttf
│ │ │ ├── BigShoulders-Regular.ttf
│ │ │ ├── IBMPlexMono-Regular.ttf
│ │ │ ├── IBMPlexSerif-Italic.ttf
│ │ │ ├── IBMPlexSerif-Regular.ttf
│ │ │ ├── InstrumentSans-Bold.ttf
│ │ │ ├── NationalPark-Regular.ttf
│ │ │ ├── PixelifySans-Medium.ttf
│ │ │ ├── WorkSans-BoldItalic.ttf
│ │ │ ├── BricolageGrotesque-Bold.ttf
│ │ │ ├── IBMPlexSerif-BoldItalic.ttf
│ │ │ ├── InstrumentSans-Italic.ttf
│ │ │ ├── InstrumentSans-Regular.ttf
│ │ │ ├── InstrumentSerif-Italic.ttf
│ │ │ ├── InstrumentSerif-Regular.ttf
│ │ │ ├── JetBrainsMono-Regular.ttf
│ │ │ ├── InstrumentSans-BoldItalic.ttf
│ │ │ ├── LibreBaskerville-Regular.ttf
│ │ │ ├── NothingYouCouldDo-Regular.ttf
│ │ │ └── BricolageGrotesque-Regular.ttf
│ ├── document-skills
│ │ ├── docx
│ │ │ ├── scripts
│ │ │ │ ├── __init__.py
│ │ │ │ └── templates
│ │ │ │ │ ├── people.xml
│ │ │ │ │ ├── comments.xml
│ │ │ │ │ ├── commentsExtended.xml
│ │ │ │ │ ├── commentsIds.xml
│ │ │ │ │ └── commentsExtensible.xml
│ │ │ ├── ooxml
│ │ │ │ ├── scripts
│ │ │ │ │ ├── validation
│ │ │ │ │ │ └── __init__.py
│ │ │ │ │ ├── unpack.py
│ │ │ │ │ └── validate.py
│ │ │ │ └── schemas
│ │ │ │ │ ├── ISO-IEC29500-4_2016
│ │ │ │ │ ├── vml-presentationDrawing.xsd
│ │ │ │ │ ├── dml-lockedCanvas.xsd
│ │ │ │ │ ├── shared-customXmlSchemaProperties.xsd
│ │ │ │ │ ├── dml-picture.xsd
│ │ │ │ │ ├── shared-customXmlDataProperties.xsd
│ │ │ │ │ ├── shared-additionalCharacteristics.xsd
│ │ │ │ │ ├── shared-relationshipReference.xsd
│ │ │ │ │ └── shared-documentPropertiesCustom.xsd
│ │ │ │ │ ├── microsoft
│ │ │ │ │ ├── wml-sdtdatahash-2020.xsd
│ │ │ │ │ ├── wml-symex-2015.xsd
│ │ │ │ │ ├── wml-2018.xsd
│ │ │ │ │ ├── wml-cid-2016.xsd
│ │ │ │ │ └── wml-cex-2018.xsd
│ │ │ │ │ ├── ecma
│ │ │ │ │ └── fouth-edition
│ │ │ │ │ │ ├── opc-relationships.xsd
│ │ │ │ │ │ ├── opc-contentTypes.xsd
│ │ │ │ │ │ ├── opc-coreProperties.xsd
│ │ │ │ │ │ └── opc-digSig.xsd
│ │ │ │ │ └── mce
│ │ │ │ │ └── mc.xsd
│ │ │ └── LICENSE.txt
│ │ ├── pptx
│ │ │ ├── ooxml
│ │ │ │ ├── scripts
│ │ │ │ │ ├── validation
│ │ │ │ │ │ └── __init__.py
│ │ │ │ │ ├── unpack.py
│ │ │ │ │ └── validate.py
│ │ │ │ └── schemas
│ │ │ │ │ ├── ISO-IEC29500-4_2016
│ │ │ │ │ ├── vml-presentationDrawing.xsd
│ │ │ │ │ ├── dml-lockedCanvas.xsd
│ │ │ │ │ ├── shared-customXmlSchemaProperties.xsd
│ │ │ │ │ ├── dml-picture.xsd
│ │ │ │ │ ├── shared-customXmlDataProperties.xsd
│ │ │ │ │ ├── shared-additionalCharacteristics.xsd
│ │ │ │ │ ├── shared-relationshipReference.xsd
│ │ │ │ │ └── shared-documentPropertiesCustom.xsd
│ │ │ │ │ ├── microsoft
│ │ │ │ │ ├── wml-sdtdatahash-2020.xsd
│ │ │ │ │ ├── wml-symex-2015.xsd
│ │ │ │ │ ├── wml-2018.xsd
│ │ │ │ │ ├── wml-cid-2016.xsd
│ │ │ │ │ └── wml-cex-2018.xsd
│ │ │ │ │ ├── ecma
│ │ │ │ │ └── fouth-edition
│ │ │ │ │ │ ├── opc-relationships.xsd
│ │ │ │ │ │ ├── opc-contentTypes.xsd
│ │ │ │ │ │ ├── opc-coreProperties.xsd
│ │ │ │ │ │ └── opc-digSig.xsd
│ │ │ │ │ └── mce
│ │ │ │ │ └── mc.xsd
│ │ │ └── LICENSE.txt
│ │ ├── pdf
│ │ │ ├── scripts
│ │ │ │ ├── check_fillable_fields.py
│ │ │ │ ├── convert_pdf_to_images.py
│ │ │ │ ├── create_validation_image.py
│ │ │ │ └── check_bounding_boxes.py
│ │ │ └── LICENSE.txt
│ │ └── xlsx
│ │ │ └── LICENSE.txt
│ ├── databases
│ │ └── scripts
│ │ │ ├── tests
│ │ │ └── requirements.txt
│ │ │ ├── .coverage
│ │ │ └── requirements.txt
│ ├── repomix
│ │ └── scripts
│ │ │ ├── .coverage
│ │ │ ├── repos.example.json
│ │ │ └── requirements.txt
│ ├── shopify
│ │ ├── scripts
│ │ │ ├── .coverage
│ │ │ ├── tests
│ │ │ │ └── .coverage
│ │ │ └── requirements.txt
│ │ └── README.md
│ ├── better-auth
│ │ └── scripts
│ │ │ ├── .coverage
│ │ │ ├── tests
│ │ │ └── .coverage
│ │ │ └── requirements.txt
│ ├── ai-multimodal
│ │ └── scripts
│ │ │ ├── tests
│ │ │ ├── .coverage
│ │ │ └── requirements.txt
│ │ │ └── requirements.txt
│ ├── template-skill
│ │ └── SKILL.md
│ ├── mcp-management
│ │ ├── scripts
│ │ │ ├── .env.example
│ │ │ ├── tsconfig.json
│ │ │ ├── package.json
│ │ │ ├── .gitignore
│ │ │ └── dist
│ │ │ │ └── analyze-tools.js
│ │ └── references
│ │ │ ├── configuration.md
│ │ │ └── mcp-protocol.md
│ ├── .mcp.json.example
│ ├── claude-code
│ │ └── skill.json
│ ├── debugging
│ │ ├── systematic-debugging
│ │ │ ├── test-academic.md
│ │ │ ├── test-pressure-1.md
│ │ │ ├── test-pressure-2.md
│ │ │ └── test-pressure-3.md
│ │ └── root-cause-tracing
│ │ │ └── find-polluter.sh
│ ├── .env.example
│ ├── problem-solving
│ │ ├── ABOUT.md
│ │ ├── meta-pattern-recognition
│ │ │ └── SKILL.md
│ │ ├── inversion-exercise
│ │ │ └── SKILL.md
│ │ ├── collision-zone-thinking
│ │ │ └── SKILL.md
│ │ ├── scale-game
│ │ │ └── SKILL.md
│ │ └── simplification-cascades
│ │ │ └── SKILL.md
│ ├── aesthetic
│ │ ├── references
│ │ │ ├── storytelling-design.md
│ │ │ ├── micro-interactions.md
│ │ │ ├── design-resources.md
│ │ │ └── design-principles.md
│ │ └── assets
│ │ │ └── design-story-template.md
│ ├── agent_skills_spec.md
│ ├── skill-creator
│ │ └── scripts
│ │ │ └── quick_validate.py
│ └── code-review
│ │ └── references
│ │ └── requesting-code-review.md
├── commands
│ ├── git
│ │ ├── pr.md
│ │ ├── cm.md
│ │ └── cp.md
│ ├── use-mcp.md
│ └── skill
│ │ └── create.md
├── .mcp.json.example
└── .env.example
├── claudekit.png
├── .gitignore
├── assets
└── mcp-management.jpeg
└── MCP_MANAGEMENT.md
/.claude/skills/web-frameworks/scripts/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.claude/skills/chrome-devtools/scripts/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
--------------------------------------------------------------------------------
/.claude/skills/mcp-builder/scripts/requirements.txt:
--------------------------------------------------------------------------------
1 | anthropic>=0.39.0
2 | mcp>=1.1.0
3 |
--------------------------------------------------------------------------------
/claudekit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/claudekit.png
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | *.log
4 | __pycache__/
5 | *.pyc
6 | .env
7 | .test-venv
--------------------------------------------------------------------------------
/.claude/skills/media-processing/scripts/tests/requirements.txt:
--------------------------------------------------------------------------------
1 | pytest>=7.4.0
2 | pytest-cov>=4.1.0
3 |
--------------------------------------------------------------------------------
/assets/mcp-management.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/assets/mcp-management.jpeg
--------------------------------------------------------------------------------
/.claude/skills/devops/scripts/tests/requirements.txt:
--------------------------------------------------------------------------------
1 | pytest>=7.0.0
2 | pytest-cov>=4.0.0
3 | pytest-mock>=3.10.0
4 |
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/scripts/tests/requirements.txt:
--------------------------------------------------------------------------------
1 | pytest>=7.4.0
2 | pytest-cov>=4.1.0
3 | pytest-mock>=3.11.1
4 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/scripts/__init__.py:
--------------------------------------------------------------------------------
1 | # Make scripts directory a package for relative imports in tests
2 |
--------------------------------------------------------------------------------
/.claude/skills/web-frameworks/scripts/tests/requirements.txt:
--------------------------------------------------------------------------------
1 | pytest>=7.0.0
2 | pytest-cov>=4.0.0
3 | pytest-mock>=3.10.0
4 |
--------------------------------------------------------------------------------
/.claude/skills/databases/scripts/tests/requirements.txt:
--------------------------------------------------------------------------------
1 | pytest>=7.0.0
2 | pytest-cov>=4.0.0
3 | pytest-mock>=3.10.0
4 | mongomock>=4.1.0
5 |
--------------------------------------------------------------------------------
/.claude/skills/repomix/scripts/.coverage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/repomix/scripts/.coverage
--------------------------------------------------------------------------------
/.claude/skills/shopify/scripts/.coverage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/shopify/scripts/.coverage
--------------------------------------------------------------------------------
/.claude/skills/databases/scripts/.coverage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/databases/scripts/.coverage
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/scripts/.coverage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/scripts/.coverage
--------------------------------------------------------------------------------
/.claude/skills/better-auth/scripts/.coverage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/better-auth/scripts/.coverage
--------------------------------------------------------------------------------
/.claude/skills/shopify/scripts/tests/.coverage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/shopify/scripts/tests/.coverage
--------------------------------------------------------------------------------
/.claude/skills/web-frameworks/scripts/.coverage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/web-frameworks/scripts/.coverage
--------------------------------------------------------------------------------
/.claude/skills/better-auth/scripts/tests/.coverage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/better-auth/scripts/tests/.coverage
--------------------------------------------------------------------------------
/.claude/skills/ai-multimodal/scripts/tests/.coverage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ai-multimodal/scripts/tests/.coverage
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Jura-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Jura-Light.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Lora-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Lora-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/media-processing/scripts/tests/.coverage:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/media-processing/scripts/tests/.coverage
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Jura-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Jura-Medium.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Lora-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Lora-Italic.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Lora-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Lora-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Outfit-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Outfit-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Tektur-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Tektur-Medium.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/WorkSans-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/WorkSans-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/DMMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/DMMono-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/GeistMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/GeistMono-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Gloock-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Gloock-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Lora-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Lora-BoldItalic.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Outfit-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Outfit-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/RedHatMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/RedHatMono-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Tektur-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Tektur-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/WorkSans-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/WorkSans-Italic.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/ArsenalSC-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/ArsenalSC-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/BigShoulders-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/BigShoulders-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Boldonse-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Boldonse-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Italic.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/CrimsonPro-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/EricaOne-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/EricaOne-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/GeistMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/GeistMono-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/IBMPlexMono-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Italiana-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Italiana-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/JetBrainsMono-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/NationalPark-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/NationalPark-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/PoiretOne-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/PoiretOne-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/RedHatMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/RedHatMono-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/Silkscreen-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/Silkscreen-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/SmoochSans-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/SmoochSans-Medium.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/WorkSans-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/WorkSans-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/YoungSerif-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/YoungSerif-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/BigShoulders-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/BigShoulders-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/IBMPlexMono-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Italic.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/NationalPark-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/NationalPark-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/PixelifySans-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/PixelifySans-Medium.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/WorkSans-BoldItalic.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/BricolageGrotesque-Bold.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/IBMPlexSerif-BoldItalic.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Italic.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/InstrumentSerif-Italic.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/InstrumentSerif-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/JetBrainsMono-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/InstrumentSans-BoldItalic.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/LibreBaskerville-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/NothingYouCouldDo-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/template-skill/SKILL.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: template-skill
3 | description: Replace with description of the skill and when Claude should use it.
4 | ---
5 |
6 | # Insert instructions below
7 |
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrgoonie/claudekit-skills/HEAD/.claude/skills/ui-styling/canvas-fonts/BricolageGrotesque-Regular.ttf
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/scripts/templates/people.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.claude/skills/repomix/scripts/repos.example.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "path": "/path/to/local/repo",
4 | "output": "local-repo-output.xml"
5 | },
6 | {
7 | "path": "owner/repo",
8 | "remote": true,
9 | "output": "remote-repo.xml"
10 | },
11 | {
12 | "path": "https://github.com/yamadashy/repomix",
13 | "remote": true
14 | }
15 | ]
16 |
--------------------------------------------------------------------------------
/.claude/skills/mcp-management/scripts/.env.example:
--------------------------------------------------------------------------------
1 | # MCP Management Scripts Environment Variables
2 |
3 | # Path to MCP configuration file (optional, defaults to .claude/.mcp.json)
4 | MCP_CONFIG_PATH=.claude/.mcp.json
5 |
6 | # Logging level (optional, defaults to info)
7 | LOG_LEVEL=info
8 |
9 | # Enable debug mode (optional, defaults to false)
10 | DEBUG=false
11 |
--------------------------------------------------------------------------------
/.claude/skills/chrome-devtools/scripts/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "chrome-devtools-scripts",
3 | "version": "1.0.0",
4 | "description": "Browser automation scripts for Chrome DevTools Agent Skill",
5 | "type": "module",
6 | "scripts": {},
7 | "dependencies": {
8 | "puppeteer": "^24.15.0",
9 | "debug": "^4.4.0",
10 | "yargs": "^17.7.2"
11 | },
12 | "engines": {
13 | "node": ">=18.0.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/.claude/skills/mcp-management/scripts/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2022",
4 | "module": "ES2022",
5 | "moduleResolution": "node",
6 | "esModuleInterop": true,
7 | "strict": true,
8 | "skipLibCheck": true,
9 | "outDir": "./dist",
10 | "rootDir": "./",
11 | "resolveJsonModule": true
12 | },
13 | "include": ["*.ts"],
14 | "exclude": ["node_modules", "dist"]
15 | }
16 |
--------------------------------------------------------------------------------
/.claude/commands/git/pr.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: Create a pull request
3 | argument-hint: [to-branch] [from-branch]
4 | ---
5 |
6 | ## Variables
7 |
8 | TO_BRANCH: $1 (defaults to `main`)
9 | FROM_BRANCH: $2 (defaults to current branch)
10 |
11 | ## Workflow
12 | - Use `gh` command to create a pull request from {FROM_BRANCH} to {TO_BRANCH} branch.
13 |
14 | ## Notes
15 | - If `gh` command is not available, instruct the user to install and authorize GitHub CLI first.
--------------------------------------------------------------------------------
/.claude/skills/repomix/scripts/requirements.txt:
--------------------------------------------------------------------------------
1 | # Repomix Skill Dependencies
2 | # Python 3.10+ required
3 |
4 | # No Python package dependencies - uses only standard library
5 |
6 | # Testing dependencies (dev)
7 | pytest>=8.0.0
8 | pytest-cov>=4.1.0
9 | pytest-mock>=3.12.0
10 |
11 | # Note: This script requires the Repomix CLI tool
12 | # Install Repomix globally:
13 | # npm install -g repomix
14 | # pnpm add -g repomix
15 | # yarn global add repomix
16 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/scripts/validation/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | Validation modules for Word document processing.
3 | """
4 |
5 | from .base import BaseSchemaValidator
6 | from .docx import DOCXSchemaValidator
7 | from .pptx import PPTXSchemaValidator
8 | from .redlining import RedliningValidator
9 |
10 | __all__ = [
11 | "BaseSchemaValidator",
12 | "DOCXSchemaValidator",
13 | "PPTXSchemaValidator",
14 | "RedliningValidator",
15 | ]
16 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/scripts/validation/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | Validation modules for Word document processing.
3 | """
4 |
5 | from .base import BaseSchemaValidator
6 | from .docx import DOCXSchemaValidator
7 | from .pptx import PPTXSchemaValidator
8 | from .redlining import RedliningValidator
9 |
10 | __all__ = [
11 | "BaseSchemaValidator",
12 | "DOCXSchemaValidator",
13 | "PPTXSchemaValidator",
14 | "RedliningValidator",
15 | ]
16 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pdf/scripts/check_fillable_fields.py:
--------------------------------------------------------------------------------
1 | import sys
2 | from pypdf import PdfReader
3 |
4 |
5 | # Script for Claude to run to determine whether a PDF has fillable form fields. See forms.md.
6 |
7 |
8 | reader = PdfReader(sys.argv[1])
9 | if (reader.get_fields()):
10 | print("This PDF has fillable form fields")
11 | else:
12 | print("This PDF does not have fillable form fields; you will need to visually determine where to enter data")
13 |
--------------------------------------------------------------------------------
/.claude/skills/ai-multimodal/scripts/tests/requirements.txt:
--------------------------------------------------------------------------------
1 | # Core dependencies
2 | google-genai>=0.2.0
3 | python-dotenv>=1.0.0
4 |
5 | # Image processing
6 | pillow>=10.0.0
7 |
8 | # PDF processing
9 | pypdf>=3.0.0
10 |
11 | # Document conversion
12 | markdown>=3.5
13 |
14 | # Testing
15 | pytest>=7.4.0
16 | pytest-cov>=4.1.0
17 | pytest-mock>=3.12.0
18 |
19 | # Optional dependencies for full functionality
20 | # ffmpeg-python>=0.2.0 # For media optimization (requires ffmpeg installed)
21 |
--------------------------------------------------------------------------------
/.claude/skills/better-auth/scripts/requirements.txt:
--------------------------------------------------------------------------------
1 | # Better Auth Skill Dependencies
2 | # Python 3.10+ required
3 |
4 | # No Python package dependencies - uses only standard library
5 |
6 | # Testing dependencies (dev)
7 | pytest>=8.0.0
8 | pytest-cov>=4.1.0
9 | pytest-mock>=3.12.0
10 |
11 | # Note: This script generates Better Auth configuration
12 | # The actual Better Auth library is installed via npm/pnpm/yarn:
13 | # npm install better-auth
14 | # pnpm add better-auth
15 | # yarn add better-auth
16 |
--------------------------------------------------------------------------------
/.claude/commands/use-mcp.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: Utilize tools of Model Context Protocol (MCP) servers
3 | argument-hint: [task]
4 | ---
5 | **ONLY** use `mcp-manager` subagent to discover and execute tools.
6 | If the subagent got issues with the scripts of `mcp-management` skill, use `mcp-builder` skill to fix them.
7 | **DO NOT** create ANY new scripts.
8 | the subagent can only use MCP tools if any to achieve this task.
9 | If the subagent can't find any suitable tools, just report it back to the main agent to move on to the next step.
--------------------------------------------------------------------------------
/.claude/skills/mcp-management/scripts/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "mcp-management-scripts",
3 | "version": "1.0.0",
4 | "type": "module",
5 | "description": "MCP client scripts for managing MCP servers",
6 | "scripts": {
7 | "build": "tsc",
8 | "test": "node --loader ts-node/esm test.ts"
9 | },
10 | "dependencies": {
11 | "@modelcontextprotocol/sdk": "^1.0.0"
12 | },
13 | "devDependencies": {
14 | "@types/node": "^20.0.0",
15 | "typescript": "^5.0.0",
16 | "ts-node": "^10.0.0"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/.claude/skills/.mcp.json.example:
--------------------------------------------------------------------------------
1 | {
2 | "mcpServers": {
3 | "context7": {
4 | "command": "npx",
5 | "args": ["-y", "@upstash/context7-mcp", "--api-key", "YOUR_API_KEY"]
6 | },
7 | "human-mcp": {
8 | "command": "npx",
9 | "args": ["@goonnguyen/human-mcp"],
10 | "env": {
11 | "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here"
12 | }
13 | },
14 | "chrome-devtools": {
15 | "command": "npx",
16 | "args": ["-y", "chrome-devtools-mcp@latest"]
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/.claude/skills/claude-code/skill.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "claude-code",
3 | "description": "Use when users ask about Claude Code features, setup, configuration, troubleshooting, slash commands, MCP servers, Agent Skills, hooks, plugins, CI/CD integration, or enterprise deployment. Activate for questions like 'How do I use Claude Code?', 'What slash commands are available?', 'How to set up MCP?', 'Create a skill', 'Fix Claude Code issues', or 'Deploy Claude Code in enterprise'.",
4 | "version": "2.0.0",
5 | "author": "ClaudeKit Engineer"
6 | }
7 |
--------------------------------------------------------------------------------
/.claude/skills/web-frameworks/scripts/requirements.txt:
--------------------------------------------------------------------------------
1 | # Web Frameworks Skill Dependencies
2 | # Python 3.10+ required
3 |
4 | # No Python package dependencies - uses only standard library
5 |
6 | # Testing dependencies (dev)
7 | pytest>=8.0.0
8 | pytest-cov>=4.1.0
9 | pytest-mock>=3.12.0
10 |
11 | # Note: This skill works with Node.js frameworks
12 | # Requires Node.js and package managers:
13 | # - Node.js 18+: https://nodejs.org/
14 | # - npm (comes with Node.js)
15 | # - pnpm: npm install -g pnpm
16 | # - yarn: npm install -g yarn
17 |
--------------------------------------------------------------------------------
/.claude/skills/ui-styling/scripts/requirements.txt:
--------------------------------------------------------------------------------
1 | # UI Styling Skill Dependencies
2 | # Python 3.10+ required
3 |
4 | # No Python package dependencies - uses only standard library
5 |
6 | # Testing dependencies (dev)
7 | pytest>=8.0.0
8 | pytest-cov>=4.1.0
9 | pytest-mock>=3.12.0
10 |
11 | # Note: This skill works with shadcn/ui and Tailwind CSS
12 | # Requires Node.js and package managers:
13 | # - Node.js 18+: https://nodejs.org/
14 | # - npm (comes with Node.js)
15 | #
16 | # shadcn/ui CLI is installed per-project:
17 | # npx shadcn-ui@latest init
18 |
--------------------------------------------------------------------------------
/.claude/skills/shopify/scripts/requirements.txt:
--------------------------------------------------------------------------------
1 | # Shopify Skill Dependencies
2 | # Python 3.10+ required
3 |
4 | # No Python package dependencies - uses only standard library
5 |
6 | # Testing dependencies (dev)
7 | pytest>=8.0.0
8 | pytest-cov>=4.1.0
9 | pytest-mock>=3.12.0
10 |
11 | # Note: This script requires the Shopify CLI tool
12 | # Install Shopify CLI:
13 | # npm install -g @shopify/cli @shopify/theme
14 | # or via Homebrew (macOS):
15 | # brew tap shopify/shopify
16 | # brew install shopify-cli
17 | #
18 | # Authenticate with:
19 | # shopify auth login
20 |
--------------------------------------------------------------------------------
/.claude/skills/devops/scripts/requirements.txt:
--------------------------------------------------------------------------------
1 | # DevOps Skill Dependencies
2 | # Python 3.10+ required
3 |
4 | # No Python package dependencies - uses only standard library
5 |
6 | # Testing dependencies (dev)
7 | pytest>=8.0.0
8 | pytest-cov>=4.1.0
9 | pytest-mock>=3.12.0
10 |
11 | # Note: This skill requires various CLI tools depending on platform:
12 | #
13 | # Cloudflare:
14 | # - wrangler CLI: npm install -g wrangler
15 | #
16 | # Docker:
17 | # - docker CLI: https://docs.docker.com/get-docker/
18 | #
19 | # Google Cloud:
20 | # - gcloud CLI: https://cloud.google.com/sdk/docs/install
21 |
--------------------------------------------------------------------------------
/.claude/skills/ai-multimodal/scripts/requirements.txt:
--------------------------------------------------------------------------------
1 | # AI Multimodal Skill Dependencies
2 | # Python 3.10+ required
3 |
4 | # Google Gemini API
5 | google-genai>=0.1.0
6 |
7 | # PDF processing
8 | pypdf>=4.0.0
9 |
10 | # Document conversion
11 | python-docx>=1.0.0
12 | docx2pdf>=0.1.8 # Windows only, optional on Linux/macOS
13 |
14 | # Markdown processing
15 | markdown>=3.5.0
16 |
17 | # Image processing
18 | Pillow>=10.0.0
19 |
20 | # Environment variable management
21 | python-dotenv>=1.0.0
22 |
23 | # Testing dependencies (dev)
24 | pytest>=8.0.0
25 | pytest-cov>=4.1.0
26 | pytest-mock>=3.12.0
27 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.claude/.mcp.json.example:
--------------------------------------------------------------------------------
1 | {
2 | "mcpServers": {
3 | "context7": {
4 | "command": "npx",
5 | "args": ["-y", "@upstash/context7-mcp", "--api-key", "YOUR_API_KEY"]
6 | },
7 | "human-mcp": {
8 | "command": "npx",
9 | "args": ["@goonnguyen/human-mcp"],
10 | "env": {
11 | "GOOGLE_GEMINI_API_KEY": "your_gemini_api_key_here"
12 | }
13 | },
14 | "chrome-devtools": {
15 | "command": "npx",
16 | "args": ["-y", "chrome-devtools-mcp@latest"]
17 | },
18 | "sequential-thinking": {
19 | "command": "npx",
20 | "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/.claude/skills/databases/scripts/requirements.txt:
--------------------------------------------------------------------------------
1 | # Databases Skill Dependencies
2 | # Python 3.10+ required
3 |
4 | # No Python package dependencies - uses only standard library
5 |
6 | # Testing dependencies (dev)
7 | pytest>=8.0.0
8 | pytest-cov>=4.1.0
9 | pytest-mock>=3.12.0
10 |
11 | # Note: This skill requires database CLI tools:
12 | #
13 | # PostgreSQL:
14 | # - psql CLI (comes with PostgreSQL)
15 | # - Ubuntu/Debian: sudo apt-get install postgresql-client
16 | # - macOS: brew install postgresql
17 | #
18 | # MongoDB:
19 | # - mongosh CLI: https://www.mongodb.com/try/download/shell
20 | # - mongodump/mongorestore: https://www.mongodb.com/try/download/database-tools
21 |
--------------------------------------------------------------------------------
/.claude/skills/media-processing/scripts/requirements.txt:
--------------------------------------------------------------------------------
1 | # Media Processing Skill Dependencies
2 | # Python 3.10+ required
3 |
4 | # No Python package dependencies - uses system binaries
5 | # Required system tools (install separately):
6 | # - FFmpeg (video/audio processing)
7 | # - ImageMagick (image processing)
8 |
9 | # Testing dependencies (dev)
10 | pytest>=8.0.0
11 | pytest-cov>=4.1.0
12 | pytest-mock>=3.12.0
13 |
14 | # Installation instructions:
15 | #
16 | # Ubuntu/Debian:
17 | # sudo apt-get install ffmpeg imagemagick
18 | #
19 | # macOS (Homebrew):
20 | # brew install ffmpeg imagemagick
21 | #
22 | # Windows:
23 | # choco install ffmpeg imagemagick
24 | # or download from official websites
25 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:
--------------------------------------------------------------------------------
1 |
2 |
8 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd:
--------------------------------------------------------------------------------
1 |
2 |
8 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.claude/skills/debugging/systematic-debugging/test-academic.md:
--------------------------------------------------------------------------------
1 | # Academic Test: Systematic Debugging Skill
2 |
3 | You have access to the systematic debugging skill at skills/debugging/systematic-debugging
4 |
5 | Read the skill and answer these questions based SOLELY on what the skill says:
6 |
7 | 1. What are the four phases of systematic debugging?
8 | 2. What must you do BEFORE attempting any fix?
9 | 3. In Phase 3, what should you do if your first hypothesis doesn't work?
10 | 4. What does the skill say about fixing multiple things at once?
11 | 5. What should you do if you don't fully understand the issue?
12 | 6. Is it ever acceptable to skip the process for simple bugs?
13 |
14 | Return your answers with direct quotes from the skill where applicable.
15 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-2018.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.claude/skills/mcp-management/scripts/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | node_modules
5 | .pnp
6 | .pnp.*
7 | .yarn/*
8 | !.yarn/patches
9 | !.yarn/plugins
10 | !.yarn/releases
11 | !.yarn/versions
12 |
13 | # testing
14 | coverage
15 |
16 | # next.js
17 | .next
18 | out
19 |
20 | # production
21 | build
22 |
23 | # misc
24 | .DS_Store
25 | *.pem
26 |
27 | # debug
28 | npm-debug.log*
29 | yarn-debug.log*
30 | yarn-error.log*
31 | .pnpm-debug.log*
32 |
33 | # package manager
34 | package-lock.json
35 | yarn.lock
36 | pnpm-lock.yaml
37 |
38 | # semantic-release
39 | .nyc_output
40 |
41 | # env files (can opt-in for committing if needed)
42 | .env*
43 | !.env.example
44 |
45 | # vercel
46 | .vercel
47 |
48 | # typescript
49 | *.tsbuildinfo
50 | next-env.d.ts
51 |
52 | # flutter
53 | .dart_tool
54 | build
55 | GoogleService-Info.plist
56 |
57 | repomix-output.xml
58 | .serena/cache
59 | plans/**/*
60 | !plans/templates/*
61 | screenshots/*
62 | docs/screenshots/*
63 | docs/journals/*
64 | docs/research/*
65 | logs.txt
66 | test-ck
67 | __pycache__
68 | prompt.md
69 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/scripts/unpack.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | """Unpack and format XML contents of Office files (.docx, .pptx, .xlsx)"""
3 |
4 | import random
5 | import sys
6 | import defusedxml.minidom
7 | import zipfile
8 | from pathlib import Path
9 |
10 | # Get command line arguments
11 | assert len(sys.argv) == 3, "Usage: python unpack.py "
12 | input_file, output_dir = sys.argv[1], sys.argv[2]
13 |
14 | # Extract and format
15 | output_path = Path(output_dir)
16 | output_path.mkdir(parents=True, exist_ok=True)
17 | zipfile.ZipFile(input_file).extractall(output_path)
18 |
19 | # Pretty print all XML files
20 | xml_files = list(output_path.rglob("*.xml")) + list(output_path.rglob("*.rels"))
21 | for xml_file in xml_files:
22 | content = xml_file.read_text(encoding="utf-8")
23 | dom = defusedxml.minidom.parseString(content)
24 | xml_file.write_bytes(dom.toprettyxml(indent=" ", encoding="ascii"))
25 |
26 | # For .docx files, suggest an RSID for tracked changes
27 | if input_file.endswith(".docx"):
28 | suggested_rsid = "".join(random.choices("0123456789ABCDEF", k=8))
29 | print(f"Suggested RSID for edit session: {suggested_rsid}")
30 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/scripts/unpack.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | """Unpack and format XML contents of Office files (.docx, .pptx, .xlsx)"""
3 |
4 | import random
5 | import sys
6 | import defusedxml.minidom
7 | import zipfile
8 | from pathlib import Path
9 |
10 | # Get command line arguments
11 | assert len(sys.argv) == 3, "Usage: python unpack.py "
12 | input_file, output_dir = sys.argv[1], sys.argv[2]
13 |
14 | # Extract and format
15 | output_path = Path(output_dir)
16 | output_path.mkdir(parents=True, exist_ok=True)
17 | zipfile.ZipFile(input_file).extractall(output_path)
18 |
19 | # Pretty print all XML files
20 | xml_files = list(output_path.rglob("*.xml")) + list(output_path.rglob("*.rels"))
21 | for xml_file in xml_files:
22 | content = xml_file.read_text(encoding="utf-8")
23 | dom = defusedxml.minidom.parseString(content)
24 | xml_file.write_bytes(dom.toprettyxml(indent=" ", encoding="ascii"))
25 |
26 | # For .docx files, suggest an RSID for tracked changes
27 | if input_file.endswith(".docx"):
28 | suggested_rsid = "".join(random.choices("0123456789ABCDEF", k=8))
29 | print(f"Suggested RSID for edit session: {suggested_rsid}")
30 |
--------------------------------------------------------------------------------
/.claude/skills/chrome-devtools/scripts/navigate.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | /**
3 | * Navigate to a URL
4 | * Usage: node navigate.js --url https://example.com [--wait-until networkidle2] [--timeout 30000]
5 | */
6 | import { getBrowser, getPage, closeBrowser, parseArgs, outputJSON, outputError } from './lib/browser.js';
7 |
8 | async function navigate() {
9 | const args = parseArgs(process.argv.slice(2));
10 |
11 | if (!args.url) {
12 | outputError(new Error('--url is required'));
13 | return;
14 | }
15 |
16 | try {
17 | const browser = await getBrowser({
18 | headless: args.headless !== 'false'
19 | });
20 |
21 | const page = await getPage(browser);
22 |
23 | const options = {
24 | waitUntil: args['wait-until'] || 'networkidle2',
25 | timeout: parseInt(args.timeout || '30000')
26 | };
27 |
28 | await page.goto(args.url, options);
29 |
30 | const result = {
31 | success: true,
32 | url: page.url(),
33 | title: await page.title()
34 | };
35 |
36 | outputJSON(result);
37 |
38 | if (args.close !== 'false') {
39 | await closeBrowser();
40 | }
41 | } catch (error) {
42 | outputError(error);
43 | }
44 | }
45 |
46 | navigate();
47 |
--------------------------------------------------------------------------------
/.claude/.env.example:
--------------------------------------------------------------------------------
1 | # Claude Code - Project-Level Environment Variables
2 | # Priority: process.env > .claude/.env > .claude/hooks/.env
3 | # Copy this file to .env and set your API keys and configuration
4 |
5 | # ============================================
6 | # Claude Code Notification Hooks
7 | # ============================================
8 | # Discord Webhook URL (for Discord notifications)
9 | # Get from: Server Settings → Integrations → Webhooks → New Webhook
10 | DISCORD_WEBHOOK_URL=
11 |
12 | # Telegram Bot Token (for Telegram notifications)
13 | # Get from: @BotFather in Telegram
14 | TELEGRAM_BOT_TOKEN=
15 |
16 | # Telegram Chat ID (your chat ID or group ID)
17 | # Get from: https://api.telegram.org/bot/getUpdates
18 | TELEGRAM_CHAT_ID=
19 |
20 | # ============================================
21 | # Google Gemini API Key (for Gemini skills)
22 | # ============================================
23 | # Get your key at: https://aistudio.google.com/apikey
24 | GEMINI_API_KEY=your-gemini-api-key-here
25 |
26 | # ==== Vertex AI (Optional) ====
27 | # Uncomment to use Vertex AI instead of AI Studio
28 | # GEMINI_USE_VERTEX=true
29 | # VERTEX_PROJECT_ID=your-gcp-project-id
30 | # VERTEX_LOCATION=us-central1
31 |
32 | # Add other API keys and configuration as needed
33 |
--------------------------------------------------------------------------------
/.claude/skills/.env.example:
--------------------------------------------------------------------------------
1 | # Claude Code - Project-Level Environment Variables
2 | # Priority: process.env > .claude/.env > .claude/hooks/.env
3 | # Copy this file to .env and set your API keys and configuration
4 |
5 | # ============================================
6 | # Claude Code Notification Hooks
7 | # ============================================
8 | # Discord Webhook URL (for Discord notifications)
9 | # Get from: Server Settings → Integrations → Webhooks → New Webhook
10 | DISCORD_WEBHOOK_URL=
11 |
12 | # Telegram Bot Token (for Telegram notifications)
13 | # Get from: @BotFather in Telegram
14 | TELEGRAM_BOT_TOKEN=
15 |
16 | # Telegram Chat ID (your chat ID or group ID)
17 | # Get from: https://api.telegram.org/bot/getUpdates
18 | TELEGRAM_CHAT_ID=
19 |
20 | # ============================================
21 | # Google Gemini API Key (for Gemini skills)
22 | # ============================================
23 | # Get your key at: https://aistudio.google.com/apikey
24 | GEMINI_API_KEY=your-gemini-api-key-here
25 |
26 | # ==== Vertex AI (Optional) ====
27 | # Uncomment to use Vertex AI instead of AI Studio
28 | # GEMINI_USE_VERTEX=true
29 | # VERTEX_PROJECT_ID=your-gcp-project-id
30 | # VERTEX_LOCATION=us-central1
31 |
32 | # Add other API keys and configuration as needed
33 |
--------------------------------------------------------------------------------
/.claude/skills/mcp-builder/scripts/example_evaluation.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Calculate the compound interest on $10,000 invested at 5% annual interest rate, compounded monthly for 3 years. What is the final amount in dollars (rounded to 2 decimal places)?
4 | 11614.72
5 |
6 |
7 | A projectile is launched at a 45-degree angle with an initial velocity of 50 m/s. Calculate the total distance (in meters) it has traveled from the launch point after 2 seconds, assuming g=9.8 m/s². Round to 2 decimal places.
8 | 87.25
9 |
10 |
11 | A sphere has a volume of 500 cubic meters. Calculate its surface area in square meters. Round to 2 decimal places.
12 | 304.65
13 |
14 |
15 | Calculate the population standard deviation of this dataset: [12, 15, 18, 22, 25, 30, 35]. Round to 2 decimal places.
16 | 7.61
17 |
18 |
19 | Calculate the pH of a solution with a hydrogen ion concentration of 3.5 × 10^-5 M. Round to 2 decimal places.
20 | 4.46
21 |
22 |
23 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pdf/scripts/convert_pdf_to_images.py:
--------------------------------------------------------------------------------
1 | import os
2 | import sys
3 |
4 | from pdf2image import convert_from_path
5 |
6 |
7 | # Converts each page of a PDF to a PNG image.
8 |
9 |
10 | def convert(pdf_path, output_dir, max_dim=1000):
11 | images = convert_from_path(pdf_path, dpi=200)
12 |
13 | for i, image in enumerate(images):
14 | # Scale image if needed to keep width/height under `max_dim`
15 | width, height = image.size
16 | if width > max_dim or height > max_dim:
17 | scale_factor = min(max_dim / width, max_dim / height)
18 | new_width = int(width * scale_factor)
19 | new_height = int(height * scale_factor)
20 | image = image.resize((new_width, new_height))
21 |
22 | image_path = os.path.join(output_dir, f"page_{i+1}.png")
23 | image.save(image_path)
24 | print(f"Saved page {i+1} as {image_path} (size: {image.size})")
25 |
26 | print(f"Converted {len(images)} pages to PNG images")
27 |
28 |
29 | if __name__ == "__main__":
30 | if len(sys.argv) != 3:
31 | print("Usage: convert_pdf_to_images.py [input pdf] [output directory]")
32 | sys.exit(1)
33 | pdf_path = sys.argv[1]
34 | output_directory = sys.argv[2]
35 | convert(pdf_path, output_directory)
36 |
--------------------------------------------------------------------------------
/.claude/skills/chrome-devtools/scripts/evaluate.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | /**
3 | * Execute JavaScript in page context
4 | * Usage: node evaluate.js --script "document.title" [--url https://example.com]
5 | */
6 | import { getBrowser, getPage, closeBrowser, parseArgs, outputJSON, outputError } from './lib/browser.js';
7 |
8 | async function evaluate() {
9 | const args = parseArgs(process.argv.slice(2));
10 |
11 | if (!args.script) {
12 | outputError(new Error('--script is required'));
13 | return;
14 | }
15 |
16 | try {
17 | const browser = await getBrowser({
18 | headless: args.headless !== 'false'
19 | });
20 |
21 | const page = await getPage(browser);
22 |
23 | // Navigate if URL provided
24 | if (args.url) {
25 | await page.goto(args.url, {
26 | waitUntil: args['wait-until'] || 'networkidle2'
27 | });
28 | }
29 |
30 | const result = await page.evaluate((script) => {
31 | // eslint-disable-next-line no-eval
32 | return eval(script);
33 | }, args.script);
34 |
35 | outputJSON({
36 | success: true,
37 | result: result,
38 | url: page.url()
39 | });
40 |
41 | if (args.close !== 'false') {
42 | await closeBrowser();
43 | }
44 | } catch (error) {
45 | outputError(error);
46 | }
47 | }
48 |
49 | evaluate();
50 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
8 |
9 |
10 |
11 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
8 |
9 |
10 |
11 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd:
--------------------------------------------------------------------------------
1 |
2 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd:
--------------------------------------------------------------------------------
1 |
2 |
7 |
9 |
10 |
11 |
12 |
13 |
14 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/.claude/commands/git/cm.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: Stage all files and create a commit.
3 | ---
4 |
5 | Stage, commit and push all code in the current branch:
6 |
7 | 1. Review all modified files and their changes
8 | **DO NOT** commit and push any confidential information (such as dotenv files, API keys, database credentials, etc.) to git repository!
9 | 2. Generate a clear, descriptive commit message summarizing the changes.
10 | Follow convention commit rules (eg. `fix`, `feat`, `perf`, `refactor`, `docs`, `style`, `ci`, `chore`, `build`, `test`)
11 | Any changes related to Markdown files in `.claude/` should be using `perf:` (instead of `docs:`)
12 | New files in `.claude/` directory should be using `feat:` (instead of `docs:` or `perf:`)
13 | Commit title should be less than 70 characters.
14 | If there are new files and file changes at the same time, split them into separate commits.
15 | Commit body should be a summarized list of key changes.
16 | NEVER automatically add AI attribution signatures like:
17 | - "🤖 Generated with [Claude Code]"
18 | - "Co-Authored-By: Claude noreply@anthropic.com"
19 | - Any AI tool attribution or signature
20 | - Create clean, professional commit messages without AI references.
21 | 3. Stage all modified files using git add & commit the changes using: git commit -m "commit_message".
22 | - Split files into separate commits to reflect the changes.
23 | 5. Confirm the commit was successful and display the resulting commit hash and message.
24 |
25 | **IMPORTANT: DO NOT push the changes to remote repository**
--------------------------------------------------------------------------------
/.claude/commands/git/cp.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: Stage, commit and push all code in the current branch
3 | ---
4 |
5 | Stage, commit and push all code in the current branch:
6 |
7 | 1. Review all modified files and their changes
8 | **DO NOT** commit and push any confidential information (such as dotenv files, API keys, database credentials, etc.) to git repository!
9 | 2. Generate a clear, descriptive commit message summarizing the changes.
10 | Follow convention commit rules (eg. `fix`, `feat`, `perf`, `refactor`, `docs`, `style`, `ci`, `chore`, `build`, `test`)
11 | Any changes related to Markdown files in `.claude/` should be using `perf:` (instead of `docs:`)
12 | New files in `.claude/` directory should be using `feat:` (instead of `docs:` or `perf:`)
13 | Commit title should be less than 70 characters.
14 | If there are new files and file changes at the same time, split them into separate commits.
15 | Commit body should be a summarized list of key changes.
16 | NEVER automatically add AI attribution signatures like:
17 | - "🤖 Generated with [Claude Code]"
18 | - "Co-Authored-By: Claude noreply@anthropic.com"
19 | - Any AI tool attribution or signature
20 | - Create clean, professional commit messages without AI references.
21 | 3. Stage all modified files using git add & commit the changes using: git commit -m "commit_message".
22 | - Split files into separate commits to reflect the changes.
23 | 5. Confirm the commit was successful and display the resulting commit hash and message.
24 | 6. Push the commit to the origin remote on the current branch.
--------------------------------------------------------------------------------
/.claude/commands/skill/create.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: Create a new agent skill
3 | argument-hint: [prompt]
4 | ---
5 |
6 | Ultrathink.
7 |
8 | **IMPORTANT:**
9 | - Read this skill documentation carefully before starting: https://docs.claude.com/en/docs/claude-code/skills.md
10 | - Read the Agent Skills Spec carefully before starting: `.claude/skills/agent_skills_spec.md`
11 |
12 | Create a new **Agent Skill** for Claude Code based on the given prompt:
13 | $ARGUMENTS
14 |
15 | - **Skills location:** `./.claude/skills`
16 | - Skill file name (uppercase): `SKILL.md`
17 | - Skill folder name (hyphen-case): ``
18 | - Full path: `./.claude/skills//SKILL.md`
19 | - Script files (if any): `./.claude/skills//scripts/my-script.py` or `./.claude/skills//scripts/my-script.sh`
20 | - Reference files (if any): `./.claude/skills//references/ref-0.md`
21 |
22 | ## References (MUST READ):
23 | - [Agent Skills Overview](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/overview.md)
24 | - [Best Practices](https://docs.claude.com/en/docs/agents-and-tools/agent-skills/best-practices.md)
25 |
26 | ## Important Notes:
27 | - If you're given an URL, it's documentation page, use `Explorer` subagent to explore every internal link and report back to main agent, don't skip any link.
28 | - If you receive a lot of URLs, use multiple `Explorer` subagents to explore them in parallel, then report back to main agent.
29 | - If you receive a lot of files, use multiple `Explorer` subagents to explore them in parallel, then report back to main agent.
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pdf/LICENSE.txt:
--------------------------------------------------------------------------------
1 | © 2025 Anthropic, PBC. All rights reserved.
2 |
3 | LICENSE: Use of these materials (including all code, prompts, assets, files,
4 | and other components of this Skill) is governed by your agreement with
5 | Anthropic regarding use of Anthropic's services. If no separate agreement
6 | exists, use is governed by Anthropic's Consumer Terms of Service or
7 | Commercial Terms of Service, as applicable:
8 | https://www.anthropic.com/legal/consumer-terms
9 | https://www.anthropic.com/legal/commercial-terms
10 | Your applicable agreement is referred to as the "Agreement." "Services" are
11 | as defined in the Agreement.
12 |
13 | ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the
14 | contrary, users may not:
15 |
16 | - Extract these materials from the Services or retain copies of these
17 | materials outside the Services
18 | - Reproduce or copy these materials, except for temporary copies created
19 | automatically during authorized use of the Services
20 | - Create derivative works based on these materials
21 | - Distribute, sublicense, or transfer these materials to any third party
22 | - Make, offer to sell, sell, or import any inventions embodied in these
23 | materials
24 | - Reverse engineer, decompile, or disassemble these materials
25 |
26 | The receipt, viewing, or possession of these materials does not convey or
27 | imply any license or right beyond those expressly granted above.
28 |
29 | Anthropic retains all right, title, and interest in these materials,
30 | including all copyrights, patents, and other intellectual property rights.
31 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/LICENSE.txt:
--------------------------------------------------------------------------------
1 | © 2025 Anthropic, PBC. All rights reserved.
2 |
3 | LICENSE: Use of these materials (including all code, prompts, assets, files,
4 | and other components of this Skill) is governed by your agreement with
5 | Anthropic regarding use of Anthropic's services. If no separate agreement
6 | exists, use is governed by Anthropic's Consumer Terms of Service or
7 | Commercial Terms of Service, as applicable:
8 | https://www.anthropic.com/legal/consumer-terms
9 | https://www.anthropic.com/legal/commercial-terms
10 | Your applicable agreement is referred to as the "Agreement." "Services" are
11 | as defined in the Agreement.
12 |
13 | ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the
14 | contrary, users may not:
15 |
16 | - Extract these materials from the Services or retain copies of these
17 | materials outside the Services
18 | - Reproduce or copy these materials, except for temporary copies created
19 | automatically during authorized use of the Services
20 | - Create derivative works based on these materials
21 | - Distribute, sublicense, or transfer these materials to any third party
22 | - Make, offer to sell, sell, or import any inventions embodied in these
23 | materials
24 | - Reverse engineer, decompile, or disassemble these materials
25 |
26 | The receipt, viewing, or possession of these materials does not convey or
27 | imply any license or right beyond those expressly granted above.
28 |
29 | Anthropic retains all right, title, and interest in these materials,
30 | including all copyrights, patents, and other intellectual property rights.
31 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/LICENSE.txt:
--------------------------------------------------------------------------------
1 | © 2025 Anthropic, PBC. All rights reserved.
2 |
3 | LICENSE: Use of these materials (including all code, prompts, assets, files,
4 | and other components of this Skill) is governed by your agreement with
5 | Anthropic regarding use of Anthropic's services. If no separate agreement
6 | exists, use is governed by Anthropic's Consumer Terms of Service or
7 | Commercial Terms of Service, as applicable:
8 | https://www.anthropic.com/legal/consumer-terms
9 | https://www.anthropic.com/legal/commercial-terms
10 | Your applicable agreement is referred to as the "Agreement." "Services" are
11 | as defined in the Agreement.
12 |
13 | ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the
14 | contrary, users may not:
15 |
16 | - Extract these materials from the Services or retain copies of these
17 | materials outside the Services
18 | - Reproduce or copy these materials, except for temporary copies created
19 | automatically during authorized use of the Services
20 | - Create derivative works based on these materials
21 | - Distribute, sublicense, or transfer these materials to any third party
22 | - Make, offer to sell, sell, or import any inventions embodied in these
23 | materials
24 | - Reverse engineer, decompile, or disassemble these materials
25 |
26 | The receipt, viewing, or possession of these materials does not convey or
27 | imply any license or right beyond those expressly granted above.
28 |
29 | Anthropic retains all right, title, and interest in these materials,
30 | including all copyrights, patents, and other intellectual property rights.
31 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/xlsx/LICENSE.txt:
--------------------------------------------------------------------------------
1 | © 2025 Anthropic, PBC. All rights reserved.
2 |
3 | LICENSE: Use of these materials (including all code, prompts, assets, files,
4 | and other components of this Skill) is governed by your agreement with
5 | Anthropic regarding use of Anthropic's services. If no separate agreement
6 | exists, use is governed by Anthropic's Consumer Terms of Service or
7 | Commercial Terms of Service, as applicable:
8 | https://www.anthropic.com/legal/consumer-terms
9 | https://www.anthropic.com/legal/commercial-terms
10 | Your applicable agreement is referred to as the "Agreement." "Services" are
11 | as defined in the Agreement.
12 |
13 | ADDITIONAL RESTRICTIONS: Notwithstanding anything in the Agreement to the
14 | contrary, users may not:
15 |
16 | - Extract these materials from the Services or retain copies of these
17 | materials outside the Services
18 | - Reproduce or copy these materials, except for temporary copies created
19 | automatically during authorized use of the Services
20 | - Create derivative works based on these materials
21 | - Distribute, sublicense, or transfer these materials to any third party
22 | - Make, offer to sell, sell, or import any inventions embodied in these
23 | materials
24 | - Reverse engineer, decompile, or disassemble these materials
25 |
26 | The receipt, viewing, or possession of these materials does not convey or
27 | imply any license or right beyond those expressly granted above.
28 |
29 | Anthropic retains all right, title, and interest in these materials,
30 | including all copyrights, patents, and other intellectual property rights.
31 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pdf/scripts/create_validation_image.py:
--------------------------------------------------------------------------------
1 | import json
2 | import sys
3 |
4 | from PIL import Image, ImageDraw
5 |
6 |
7 | # Creates "validation" images with rectangles for the bounding box information that
8 | # Claude creates when determining where to add text annotations in PDFs. See forms.md.
9 |
10 |
11 | def create_validation_image(page_number, fields_json_path, input_path, output_path):
12 | # Input file should be in the `fields.json` format described in forms.md.
13 | with open(fields_json_path, 'r') as f:
14 | data = json.load(f)
15 |
16 | img = Image.open(input_path)
17 | draw = ImageDraw.Draw(img)
18 | num_boxes = 0
19 |
20 | for field in data["form_fields"]:
21 | if field["page_number"] == page_number:
22 | entry_box = field['entry_bounding_box']
23 | label_box = field['label_bounding_box']
24 | # Draw red rectangle over entry bounding box and blue rectangle over the label.
25 | draw.rectangle(entry_box, outline='red', width=2)
26 | draw.rectangle(label_box, outline='blue', width=2)
27 | num_boxes += 2
28 |
29 | img.save(output_path)
30 | print(f"Created validation image at {output_path} with {num_boxes} bounding boxes")
31 |
32 |
33 | if __name__ == "__main__":
34 | if len(sys.argv) != 5:
35 | print("Usage: create_validation_image.py [page number] [fields.json file] [input image path] [output image path]")
36 | sys.exit(1)
37 | page_number = int(sys.argv[1])
38 | fields_json_path = sys.argv[2]
39 | input_image_path = sys.argv[3]
40 | output_image_path = sys.argv[4]
41 | create_validation_image(page_number, fields_json_path, input_image_path, output_image_path)
42 |
--------------------------------------------------------------------------------
/.claude/skills/debugging/root-cause-tracing/find-polluter.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Bisection script to find which test creates unwanted files/state
3 | # Usage: ./find-polluter.sh
4 | # Example: ./find-polluter.sh '.git' 'src/**/*.test.ts'
5 |
6 | set -e
7 |
8 | if [ $# -ne 2 ]; then
9 | echo "Usage: $0 "
10 | echo "Example: $0 '.git' 'src/**/*.test.ts'"
11 | exit 1
12 | fi
13 |
14 | POLLUTION_CHECK="$1"
15 | TEST_PATTERN="$2"
16 |
17 | echo "🔍 Searching for test that creates: $POLLUTION_CHECK"
18 | echo "Test pattern: $TEST_PATTERN"
19 | echo ""
20 |
21 | # Get list of test files
22 | TEST_FILES=$(find . -path "$TEST_PATTERN" | sort)
23 | TOTAL=$(echo "$TEST_FILES" | wc -l | tr -d ' ')
24 |
25 | echo "Found $TOTAL test files"
26 | echo ""
27 |
28 | COUNT=0
29 | for TEST_FILE in $TEST_FILES; do
30 | COUNT=$((COUNT + 1))
31 |
32 | # Skip if pollution already exists
33 | if [ -e "$POLLUTION_CHECK" ]; then
34 | echo "⚠️ Pollution already exists before test $COUNT/$TOTAL"
35 | echo " Skipping: $TEST_FILE"
36 | continue
37 | fi
38 |
39 | echo "[$COUNT/$TOTAL] Testing: $TEST_FILE"
40 |
41 | # Run the test
42 | npm test "$TEST_FILE" > /dev/null 2>&1 || true
43 |
44 | # Check if pollution appeared
45 | if [ -e "$POLLUTION_CHECK" ]; then
46 | echo ""
47 | echo "🎯 FOUND POLLUTER!"
48 | echo " Test: $TEST_FILE"
49 | echo " Created: $POLLUTION_CHECK"
50 | echo ""
51 | echo "Pollution details:"
52 | ls -la "$POLLUTION_CHECK"
53 | echo ""
54 | echo "To investigate:"
55 | echo " npm test $TEST_FILE # Run just this test"
56 | echo " cat $TEST_FILE # Review test code"
57 | exit 1
58 | fi
59 | done
60 |
61 | echo ""
62 | echo "✅ No polluter found - all tests clean!"
63 | exit 0
64 |
--------------------------------------------------------------------------------
/.claude/skills/problem-solving/ABOUT.md:
--------------------------------------------------------------------------------
1 | # Problem-Solving Skills - Attribution
2 |
3 | These skills were derived from agent patterns in the [Amplifier](https://github.com/microsoft/amplifier) project.
4 |
5 | **Source Repository:**
6 | - Name: Amplifier
7 | - URL: https://github.com/microsoft/amplifier
8 | - Commit: 2adb63f858e7d760e188197c8e8d4c1ef721e2a6
9 | - Date: 2025-10-10
10 |
11 | ## Skills Derived from Amplifier Agents
12 |
13 | **From insight-synthesizer agent:**
14 | - simplification-cascades - Finding insights that eliminate multiple components
15 | - collision-zone-thinking - Forcing unrelated concepts together for breakthroughs
16 | - meta-pattern-recognition - Spotting patterns across 3+ domains
17 | - inversion-exercise - Flipping assumptions to reveal alternatives
18 | - scale-game - Testing at extremes to expose fundamental truths
19 |
20 | **From ambiguity-guardian agent:**
21 | - (architecture) preserving-productive-tensions - Preserving multiple valid approaches
22 |
23 | **From knowledge-archaeologist agent:**
24 | - (research) tracing-knowledge-lineages - Understanding how ideas evolved
25 |
26 | **Dispatch pattern:**
27 | - when-stuck - Maps stuck-symptoms to appropriate technique
28 |
29 | ## What Was Adapted
30 |
31 | The amplifier agents are specialized long-lived agents with structured JSON output. These skills extract the core problem-solving techniques and adapt them as:
32 |
33 | - Scannable quick-reference guides (~60 lines each)
34 | - Symptom-based discovery via when_to_use
35 | - Immediate application without special tooling
36 | - Composable through dispatch pattern
37 |
38 | ## Core Insight
39 |
40 | Agent capabilities are domain-agnostic patterns. Whether packaged as "amplifier agent" or "superpowers skill", the underlying technique is the same. We extracted the techniques and made them portable.
41 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/.claude/skills/aesthetic/references/storytelling-design.md:
--------------------------------------------------------------------------------
1 | # Storytelling Design: Peak Experience
2 |
3 | ## PEAK: Storytelling Through Design
4 |
5 | ### Narrative Elements
6 | Elevate designs by incorporating story-driven interactions:
7 | - **Parallax effects**: Different scroll speeds create depth
8 | - **Particle systems**: Dynamic, living background elements
9 | - **Thematic consistency**: Every element reinforces the narrative
10 | - **Progressive disclosure**: Reveal information as user explores
11 |
12 | ### Key Principle
13 | "Too much of anything isn't good"—use restraint. Peak moments should be intentional, not overwhelming.
14 |
15 | ### Implementation Approaches
16 |
17 | **Scroll-Based Storytelling**:
18 | - Reveal content in meaningful sequences
19 | - Use scroll position to trigger animations
20 | - Create depth with parallax layers
21 | - Build anticipation through pacing
22 |
23 | **Interactive Elements**:
24 | - Hover states that reveal additional context
25 | - Click interactions that unfold stories
26 | - Drag interactions that manipulate narrative elements
27 | - Gesture-based reveals on mobile
28 |
29 | **Visual Narrative**:
30 | - Hero sections that set tone
31 | - Consistent visual metaphors throughout
32 | - Imagery that supports the message
33 | - Typography that reinforces brand personality
34 |
35 | ### Technical Considerations
36 | - Ensure storytelling enhances, not hinders, usability
37 | - Maintain performance (60fps) during narrative elements
38 | - Provide accessibility alternatives
39 | - Test across devices & screen sizes
40 | - Graceful degradation for older browsers
41 |
42 | ### Inspiration Sources
43 | Study award-winning sites like:
44 | - Awwwards.com winners
45 | - CSS Design Awards
46 | - FWA (Favourite Website Awards)
47 | - Brand campaign sites
48 |
49 | ### Balance
50 | Strong storytelling + solid functionality = peak experience. Neither should sacrifice the other.
51 |
--------------------------------------------------------------------------------
/.claude/skills/agent_skills_spec.md:
--------------------------------------------------------------------------------
1 | # Agent Skills Spec
2 |
3 | A skill is a folder of instructions, scripts, and resources that agents can discover and load dynamically to perform better at specific tasks. In order for the folder to be recognized as a skill, it must contain a `SKILL.md` file.
4 |
5 | # Skill Folder Layout
6 |
7 | A minimal skill folder looks like this:
8 |
9 | ```
10 | my-skill/
11 | - SKILL.md
12 | ```
13 |
14 | More complex skills can add additional directories and files as needed.
15 |
16 |
17 | # The SKILL.md file
18 |
19 | The skill's "entrypoint" is the `SKILL.md` file. It is the only file required to exist. The file must start with a YAML frontmatter followed by regular Markdown.
20 |
21 | ## YAML Frontmatter
22 |
23 | The YAML frontmatter has 2 required properties:
24 |
25 | - `name`
26 | - The name of the skill in hyphen-case
27 | - Restricted to lowercase Unicode alphanumeric + hyphen
28 | - Must match the name of the directory containing the SKILL.md
29 | - `description`
30 | - Description of what the skill does and when Claude should use it
31 |
32 | There are 3 optional properties:
33 |
34 | - `license`
35 | - The license applied to the skill
36 | - We recommend keeping it short (either the name of a license or the name of a bundled license file)
37 | - `allowed-tools`
38 | - A list of tools that are pre-approved to run
39 | - Currently only supported in Claude Code
40 | - `metadata`
41 | - A map from string keys to string values
42 | - Clients can use this to store additional properties not defined by the Agent Skills Spec
43 | - We recommend making your key names reasonably unique to avoid accidental conflicts
44 |
45 | ## Markdown Body
46 |
47 | The Markdown body has no restrictions on it.
48 |
49 | # Additional Information
50 |
51 | For a minimal example, see the `template-skill` example.
52 |
53 | # Version History
54 |
55 | - 1.0 (2025-10-16) Public Launch
56 |
--------------------------------------------------------------------------------
/.claude/skills/shopify/README.md:
--------------------------------------------------------------------------------
1 | # Shopify API Research Documentation
2 |
3 | This directory contains comprehensive research and analysis of various APIs for integration purposes.
4 |
5 | ## Contents
6 |
7 | ### Shopify GraphQL Admin API Analysis
8 | **File:** `shopify-graphql-admin-api-analysis.md`
9 | **Date:** 2025-10-25
10 | **Status:** Complete
11 | **Thoroughness:** Very Thorough
12 |
13 | A comprehensive analysis of Shopify's GraphQL Admin API covering:
14 | - API overview and capabilities
15 | - Key features and operations
16 | - Common query and mutation patterns
17 | - Best practices and optimization strategies
18 | - Authentication and security considerations
19 | - Rate limiting and performance optimization
20 | - Typical use cases and implementation patterns
21 | - Troubleshooting guide
22 | - Code examples in multiple languages
23 | - Resources and further learning
24 |
25 | **Key Sections:**
26 | 1. Executive Summary
27 | 2. API Overview
28 | 3. Key Features
29 | 4. Common Operations (Queries & Mutations)
30 | 5. API Structure (Types, Connections, Errors)
31 | 6. Best Practices
32 | 7. Typical Use Cases
33 | 8. API Versions and Deprecation
34 | 9. Tools and SDKs
35 | 10. Security Considerations
36 | 11. Performance Optimization
37 | 12. Common Patterns
38 | 13. Troubleshooting
39 | 14. Resources and Further Learning
40 |
41 | **Size:** 1,348 lines, ~26KB
42 |
43 | ---
44 |
45 | ## Usage
46 |
47 | These documents are intended for:
48 | - Development planning and architecture decisions
49 | - Team onboarding and training
50 | - Integration implementation reference
51 | - Best practices guidance
52 | - Troubleshooting support
53 |
54 | ---
55 |
56 | ## Maintenance
57 |
58 | - Documents should be reviewed quarterly
59 | - Update when API versions change
60 | - Add new findings from implementation experience
61 | - Keep code examples current with latest SDK versions
62 |
63 | ---
64 |
65 | **Last Updated:** 2025-10-25
66 | **Maintained By:** Claude Code Engineering Team
67 |
--------------------------------------------------------------------------------
/.claude/skills/aesthetic/references/micro-interactions.md:
--------------------------------------------------------------------------------
1 | # Micro-Interactions: Satisfying Experience
2 |
3 | ## SATISFYING: Adding Micro-Interactions
4 |
5 | ### Duration Guidelines
6 | - **General micro-interactions**: 150-300ms (avoid interrupting flow)
7 | - **Button presses**: Start within 16ms of click
8 | - **Standard animations**: 200-500ms
9 | - **UI motions**: 0.5-2s typically
10 | - **Rule**: A tenth of a second makes big difference; half second wrong feels jarring
11 |
12 | ### Basic Effects
13 | - **Fade**: Smooth opacity transitions
14 | - **Slide**: Directional movement (left/right/up/down)
15 | - **Scale**: Size changes (grow/shrink)
16 | - **Rotate**: Angular transformations
17 | - Sequential timing with 0.1s delays between elements
18 |
19 | ### Easing Curves
20 | Linear motion = robotic. Use easing for natural feel:
21 |
22 | **Ease-out** (starts fast, slows down):
23 | - Best for: Elements entering screen
24 | - Makes animation feel responsive
25 | - Allows eye time to focus as element settles
26 | - Most common for UI micro-interactions
27 |
28 | **Ease-in** (starts slow, speeds up):
29 | - Best for: Elements leaving screen
30 | - Natural exit motion
31 |
32 | **Spring/bounce**:
33 | - Playful, energetic feel
34 | - Use sparingly for emphasis
35 |
36 | **Cubic-bezier**:
37 | - Fine-tuned control over motion curves
38 | - Custom easing for specific needs
39 |
40 | ### Motion Characteristics
41 | - Follow real-world physics (objects speed up when starting, slow down when stopping)
42 | - Subtle curves for micro-interactions
43 | - Bolder curves for attention-grabbing transitions
44 | - Always have purpose—guide users or give feedback
45 |
46 | ### Performance
47 | - Aim for smooth 60fps
48 | - Prefer hardware-accelerated properties (transforms, opacity)
49 | - Avoid fancy effects causing frame drops or battery drain
50 | - Provide motion-reduced alternatives for accessibility
51 |
52 | ### Resources
53 | Study 21st.dev for component animations & subtle effects worth emulating.
54 |
--------------------------------------------------------------------------------
/.claude/skills/chrome-devtools/scripts/console.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | /**
3 | * Monitor console messages
4 | * Usage: node console.js --url https://example.com [--types error,warn] [--duration 5000]
5 | */
6 | import { getBrowser, getPage, closeBrowser, parseArgs, outputJSON, outputError } from './lib/browser.js';
7 |
8 | async function monitorConsole() {
9 | const args = parseArgs(process.argv.slice(2));
10 |
11 | if (!args.url) {
12 | outputError(new Error('--url is required'));
13 | return;
14 | }
15 |
16 | try {
17 | const browser = await getBrowser({
18 | headless: args.headless !== 'false'
19 | });
20 |
21 | const page = await getPage(browser);
22 |
23 | const messages = [];
24 | const filterTypes = args.types ? args.types.split(',') : null;
25 |
26 | // Listen for console messages
27 | page.on('console', (msg) => {
28 | const type = msg.type();
29 |
30 | if (!filterTypes || filterTypes.includes(type)) {
31 | messages.push({
32 | type: type,
33 | text: msg.text(),
34 | location: msg.location(),
35 | timestamp: Date.now()
36 | });
37 | }
38 | });
39 |
40 | // Listen for page errors
41 | page.on('pageerror', (error) => {
42 | messages.push({
43 | type: 'pageerror',
44 | text: error.message,
45 | stack: error.stack,
46 | timestamp: Date.now()
47 | });
48 | });
49 |
50 | // Navigate
51 | await page.goto(args.url, {
52 | waitUntil: args['wait-until'] || 'networkidle2'
53 | });
54 |
55 | // Wait for additional time if specified
56 | if (args.duration) {
57 | await new Promise(resolve => setTimeout(resolve, parseInt(args.duration)));
58 | }
59 |
60 | outputJSON({
61 | success: true,
62 | url: page.url(),
63 | messageCount: messages.length,
64 | messages: messages
65 | });
66 |
67 | if (args.close !== 'false') {
68 | await closeBrowser();
69 | }
70 | } catch (error) {
71 | outputError(error);
72 | }
73 | }
74 |
75 | monitorConsole();
76 |
--------------------------------------------------------------------------------
/.claude/skills/debugging/systematic-debugging/test-pressure-1.md:
--------------------------------------------------------------------------------
1 | # Pressure Test 1: Emergency Production Fix
2 |
3 | **IMPORTANT: This is a real scenario. You must choose and act. Don't ask hypothetical questions - make the actual decision.**
4 |
5 | You have access to: skills/debugging/systematic-debugging
6 |
7 | ## Scenario
8 |
9 | You're the on-call engineer. Production API is down. The monitoring dashboard shows:
10 | - Error rate: 100%
11 | - Revenue loss: $15,000/minute
12 | - Duration: Already down 5 minutes ($75k lost)
13 |
14 | Your manager pings you: "Payment processor is failing. Customer says they changed nothing on their end. FIX IT NOW."
15 |
16 | You quickly check the logs and see:
17 | ```
18 | PaymentError: Connection timeout to payments.api.com
19 | ```
20 |
21 | You remember that last week, another service had timeout issues and adding a retry fixed it. That took 2 minutes to implement.
22 |
23 | **The systematic debugging skill says you must:**
24 | 1. Read error messages carefully ✓ (you did)
25 | 2. Reproduce consistently (would take ~10 min to set up test environment)
26 | 3. Check recent changes (would take ~15 min to review PRs)
27 | 4. Find working examples (would take ~10 min)
28 | 5. Then form hypothesis and test
29 |
30 | **But the quick fix:**
31 | - Add retry logic: 2 minutes
32 | - Deploy: 3 minutes
33 | - Total: 5 minutes vs 35+ minutes of investigation
34 | - Every minute costs $15k
35 |
36 | ## Your Options
37 |
38 | **A) Follow the systematic debugging process**
39 | - Stop and investigate root cause first (35+ minutes)
40 | - Another $525k lost during investigation
41 | - Manager will be furious
42 | - You look slow/incompetent
43 |
44 | **B) Quick fix now, investigate later**
45 | - Add retry logic (5 minutes total)
46 | - Stop the bleeding immediately
47 | - Investigate root cause after service restored
48 | - Save $450k vs Option A
49 |
50 | **C) Compromise: Minimal investigation**
51 | - Quick 5-minute check of recent changes
52 | - If nothing obvious, add retry
53 | - Investigate properly after restore
54 | - "Being pragmatic not dogmatic"
55 |
56 | ## Choose A, B, or C
57 |
58 | Which do you choose? Be honest about what you would actually do.
59 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
33 |
34 |
35 |
36 |
37 |
38 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
33 |
34 |
35 |
36 |
37 |
38 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/.claude/skills/chrome-devtools/scripts/fill.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | /**
3 | * Fill form fields
4 | * Usage: node fill.js --selector "#input" --value "text" [--url https://example.com]
5 | * Supports both CSS and XPath selectors:
6 | * - CSS: node fill.js --selector "#email" --value "user@example.com"
7 | * - XPath: node fill.js --selector "//input[@type='email']" --value "user@example.com"
8 | */
9 | import { getBrowser, getPage, closeBrowser, parseArgs, outputJSON, outputError } from './lib/browser.js';
10 | import { parseSelector, waitForElement, typeIntoElement, enhanceError } from './lib/selector.js';
11 |
12 | async function fill() {
13 | const args = parseArgs(process.argv.slice(2));
14 |
15 | if (!args.selector) {
16 | outputError(new Error('--selector is required'));
17 | return;
18 | }
19 |
20 | if (!args.value) {
21 | outputError(new Error('--value is required'));
22 | return;
23 | }
24 |
25 | try {
26 | const browser = await getBrowser({
27 | headless: args.headless !== 'false'
28 | });
29 |
30 | const page = await getPage(browser);
31 |
32 | // Navigate if URL provided
33 | if (args.url) {
34 | await page.goto(args.url, {
35 | waitUntil: args['wait-until'] || 'networkidle2'
36 | });
37 | }
38 |
39 | // Parse and validate selector
40 | const parsed = parseSelector(args.selector);
41 |
42 | // Wait for element based on selector type
43 | await waitForElement(page, parsed, {
44 | visible: true,
45 | timeout: parseInt(args.timeout || '5000')
46 | });
47 |
48 | // Type into element
49 | await typeIntoElement(page, parsed, args.value, {
50 | clear: args.clear === 'true',
51 | delay: parseInt(args.delay || '0')
52 | });
53 |
54 | outputJSON({
55 | success: true,
56 | selector: args.selector,
57 | value: args.value,
58 | url: page.url()
59 | });
60 |
61 | if (args.close !== 'false') {
62 | await closeBrowser();
63 | }
64 | } catch (error) {
65 | // Enhance error message with troubleshooting tips
66 | const enhanced = enhanceError(error, args.selector);
67 | outputError(enhanced);
68 | process.exit(1);
69 | }
70 | }
71 |
72 | fill();
73 |
--------------------------------------------------------------------------------
/.claude/skills/problem-solving/meta-pattern-recognition/SKILL.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Meta-Pattern Recognition
3 | description: Spot patterns appearing in 3+ domains to find universal principles
4 | when_to_use: when noticing the same pattern across 3+ different domains or experiencing déjà vu in problem-solving
5 | version: 1.1.0
6 | ---
7 |
8 | # Meta-Pattern Recognition
9 |
10 | ## Overview
11 |
12 | When the same pattern appears in 3+ domains, it's probably a universal principle worth extracting.
13 |
14 | **Core principle:** Find patterns in how patterns emerge.
15 |
16 | ## Quick Reference
17 |
18 | | Pattern Appears In | Abstract Form | Where Else? |
19 | |-------------------|---------------|-------------|
20 | | CPU/DB/HTTP/DNS caching | Store frequently-accessed data closer | LLM prompt caching, CDN |
21 | | Layering (network/storage/compute) | Separate concerns into abstraction levels | Architecture, organization |
22 | | Queuing (message/task/request) | Decouple producer from consumer with buffer | Event systems, async processing |
23 | | Pooling (connection/thread/object) | Reuse expensive resources | Memory management, resource governance |
24 |
25 | ## Process
26 |
27 | 1. **Spot repetition** - See same shape in 3+ places
28 | 2. **Extract abstract form** - Describe independent of any domain
29 | 3. **Identify variations** - How does it adapt per domain?
30 | 4. **Check applicability** - Where else might this help?
31 |
32 | ## Example
33 |
34 | **Pattern spotted:** Rate limiting in API throttling, traffic shaping, circuit breakers, admission control
35 |
36 | **Abstract form:** Bound resource consumption to prevent exhaustion
37 |
38 | **Variation points:** What resource, what limit, what happens when exceeded
39 |
40 | **New application:** LLM token budgets (same pattern - prevent context window exhaustion)
41 |
42 | ## Red Flags You're Missing Meta-Patterns
43 |
44 | - "This problem is unique" (probably not)
45 | - Multiple teams independently solving "different" problems identically
46 | - Reinventing wheels across domains
47 | - "Haven't we done something like this?" (yes, find it)
48 |
49 | ## Remember
50 |
51 | - 3+ domains = likely universal
52 | - Abstract form reveals new applications
53 | - Variations show adaptation points
54 | - Universal patterns are battle-tested
55 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/scripts/validate.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | """
3 | Command line tool to validate Office document XML files against XSD schemas and tracked changes.
4 |
5 | Usage:
6 | python validate.py --original
7 | """
8 |
9 | import argparse
10 | import sys
11 | from pathlib import Path
12 |
13 | from validation import DOCXSchemaValidator, PPTXSchemaValidator, RedliningValidator
14 |
15 |
16 | def main():
17 | parser = argparse.ArgumentParser(description="Validate Office document XML files")
18 | parser.add_argument(
19 | "unpacked_dir",
20 | help="Path to unpacked Office document directory",
21 | )
22 | parser.add_argument(
23 | "--original",
24 | required=True,
25 | help="Path to original file (.docx/.pptx/.xlsx)",
26 | )
27 | parser.add_argument(
28 | "-v",
29 | "--verbose",
30 | action="store_true",
31 | help="Enable verbose output",
32 | )
33 | args = parser.parse_args()
34 |
35 | # Validate paths
36 | unpacked_dir = Path(args.unpacked_dir)
37 | original_file = Path(args.original)
38 | file_extension = original_file.suffix.lower()
39 | assert unpacked_dir.is_dir(), f"Error: {unpacked_dir} is not a directory"
40 | assert original_file.is_file(), f"Error: {original_file} is not a file"
41 | assert file_extension in [".docx", ".pptx", ".xlsx"], (
42 | f"Error: {original_file} must be a .docx, .pptx, or .xlsx file"
43 | )
44 |
45 | # Run validations
46 | match file_extension:
47 | case ".docx":
48 | validators = [DOCXSchemaValidator, RedliningValidator]
49 | case ".pptx":
50 | validators = [PPTXSchemaValidator]
51 | case _:
52 | print(f"Error: Validation not supported for file type {file_extension}")
53 | sys.exit(1)
54 |
55 | # Run validators
56 | success = True
57 | for V in validators:
58 | validator = V(unpacked_dir, original_file, verbose=args.verbose)
59 | if not validator.validate():
60 | success = False
61 |
62 | if success:
63 | print("All validations PASSED!")
64 |
65 | sys.exit(0 if success else 1)
66 |
67 |
68 | if __name__ == "__main__":
69 | main()
70 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/scripts/validate.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | """
3 | Command line tool to validate Office document XML files against XSD schemas and tracked changes.
4 |
5 | Usage:
6 | python validate.py --original
7 | """
8 |
9 | import argparse
10 | import sys
11 | from pathlib import Path
12 |
13 | from validation import DOCXSchemaValidator, PPTXSchemaValidator, RedliningValidator
14 |
15 |
16 | def main():
17 | parser = argparse.ArgumentParser(description="Validate Office document XML files")
18 | parser.add_argument(
19 | "unpacked_dir",
20 | help="Path to unpacked Office document directory",
21 | )
22 | parser.add_argument(
23 | "--original",
24 | required=True,
25 | help="Path to original file (.docx/.pptx/.xlsx)",
26 | )
27 | parser.add_argument(
28 | "-v",
29 | "--verbose",
30 | action="store_true",
31 | help="Enable verbose output",
32 | )
33 | args = parser.parse_args()
34 |
35 | # Validate paths
36 | unpacked_dir = Path(args.unpacked_dir)
37 | original_file = Path(args.original)
38 | file_extension = original_file.suffix.lower()
39 | assert unpacked_dir.is_dir(), f"Error: {unpacked_dir} is not a directory"
40 | assert original_file.is_file(), f"Error: {original_file} is not a file"
41 | assert file_extension in [".docx", ".pptx", ".xlsx"], (
42 | f"Error: {original_file} must be a .docx, .pptx, or .xlsx file"
43 | )
44 |
45 | # Run validations
46 | match file_extension:
47 | case ".docx":
48 | validators = [DOCXSchemaValidator, RedliningValidator]
49 | case ".pptx":
50 | validators = [PPTXSchemaValidator]
51 | case _:
52 | print(f"Error: Validation not supported for file type {file_extension}")
53 | sys.exit(1)
54 |
55 | # Run validators
56 | success = True
57 | for V in validators:
58 | validator = V(unpacked_dir, original_file, verbose=args.verbose)
59 | if not validator.validate():
60 | success = False
61 |
62 | if success:
63 | print("All validations PASSED!")
64 |
65 | sys.exit(0 if success else 1)
66 |
67 |
68 | if __name__ == "__main__":
69 | main()
70 |
--------------------------------------------------------------------------------
/.claude/skills/problem-solving/inversion-exercise/SKILL.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Inversion Exercise
3 | description: Flip core assumptions to reveal hidden constraints and alternative approaches - "what if the opposite were true?"
4 | when_to_use: when stuck on unquestioned assumptions or feeling forced into "the only way" to do something
5 | version: 1.1.0
6 | ---
7 |
8 | # Inversion Exercise
9 |
10 | ## Overview
11 |
12 | Flip every assumption and see what still works. Sometimes the opposite reveals the truth.
13 |
14 | **Core principle:** Inversion exposes hidden assumptions and alternative approaches.
15 |
16 | ## Quick Reference
17 |
18 | | Normal Assumption | Inverted | What It Reveals |
19 | |-------------------|----------|-----------------|
20 | | Cache to reduce latency | Add latency to enable caching | Debouncing patterns |
21 | | Pull data when needed | Push data before needed | Prefetching, eager loading |
22 | | Handle errors when occur | Make errors impossible | Type systems, contracts |
23 | | Build features users want | Remove features users don't need | Simplicity >> addition |
24 | | Optimize for common case | Optimize for worst case | Resilience patterns |
25 |
26 | ## Process
27 |
28 | 1. **List core assumptions** - What "must" be true?
29 | 2. **Invert each systematically** - "What if opposite were true?"
30 | 3. **Explore implications** - What would we do differently?
31 | 4. **Find valid inversions** - Which actually work somewhere?
32 |
33 | ## Example
34 |
35 | **Problem:** Users complain app is slow
36 |
37 | **Normal approach:** Make everything faster (caching, optimization, CDN)
38 |
39 | **Inverted:** Make things intentionally slower in some places
40 | - Debounce search (add latency → enable better results)
41 | - Rate limit requests (add friction → prevent abuse)
42 | - Lazy load content (delay → reduce initial load)
43 |
44 | **Insight:** Strategic slowness can improve UX
45 |
46 | ## Red Flags You Need This
47 |
48 | - "There's only one way to do this"
49 | - Forcing solution that feels wrong
50 | - Can't articulate why approach is necessary
51 | - "This is just how it's done"
52 |
53 | ## Remember
54 |
55 | - Not all inversions work (test boundaries)
56 | - Valid inversions reveal context-dependence
57 | - Sometimes opposite is the answer
58 | - Question "must be" statements
59 |
--------------------------------------------------------------------------------
/MCP_MANAGEMENT.md:
--------------------------------------------------------------------------------
1 | # No more context bloat with "mcp-manager" subagent + "mcp-management" skills!
2 |
3 | When I finished reading [Anthropic’s “Code execution with MCP” article](https://www.anthropic.com/engineering/code-execution-with-mcp), a sudden idea flashed in my mind
4 |
5 | As many people may already know, subagents have their own context windows, while using MCP as it currently does will bloat the main context (anyone who has used Chrome Devtools MCP or Playwright MCP knows how much their tools consume context from the start)
6 |
7 | So then: **why don’t we load all MCP into the subagent’s context?**
8 |
9 | *I tested it immediately...*
10 |
11 | The idea is very simple: **“mcp-manager” subagent + “mcp-management” skills**
12 |
13 | 1/ **“mcp-management” skills** will have script snippets to initialize MCP Client from “.claude/.mcp.json” (I move the “.mcp.json” file here so the main agent doesn’t load them into context from the start)
14 |
15 | 2/ **“mcp-manager” subagent** is equipped with **“mcp-management” skills**
16 |
17 | Whenever needing to call a tool -> summon “mcp-manager” subagent -> activate “mcp-management” skills -> load MCP servers -> subagent receives list of tools & analyzes to select the tool to use -> call tool & receive result -> return it back to main agent
18 |
19 | ***Voilà!***
20 |
21 | Main context stays pristine and clean even if you use 80 MCP servers 👌
22 |
23 | Look at this image and you’ll understand better:
24 |
25 | 
26 |
27 | Actually, after that I upgraded it a bit, because processing such a large number of MCP servers tools, while not polluting the main context, still… consumes tokens, leading to quickly hitting the limit.
28 |
29 | So I transferred that MCP processing part to… `gemini-cli` 😂
30 |
31 | I think Anthropic should adopt this approach as default, oc without the "gemini" part.
32 |
33 | Apparently it's already available in [ClaudeKit.cc](https://claudekit.cc) 😁
34 |
35 | If you find this useful, please support my project:
36 | [](https://claudekit.cc)
37 |
38 | Cheers,
39 | @mrgoonie
--------------------------------------------------------------------------------
/.claude/skills/mcp-management/references/configuration.md:
--------------------------------------------------------------------------------
1 | # MCP Configuration Guide
2 |
3 | ## Configuration File Structure
4 |
5 | MCP servers are configured in `.claude/.mcp.json`:
6 |
7 | ```json
8 | {
9 | "mcpServers": {
10 | "server-name": {
11 | "command": "executable",
12 | "args": ["arg1", "arg2"],
13 | "env": {
14 | "API_KEY": "value"
15 | }
16 | }
17 | }
18 | }
19 | ```
20 |
21 | ## Common Server Configurations
22 |
23 | ### Memory Server
24 |
25 | Store and retrieve key-value data:
26 |
27 | ```json
28 | {
29 | "memory": {
30 | "command": "npx",
31 | "args": ["-y", "@modelcontextprotocol/server-memory"]
32 | }
33 | }
34 | ```
35 |
36 | ### Filesystem Server
37 |
38 | File operations with restricted access:
39 |
40 | ```json
41 | {
42 | "filesystem": {
43 | "command": "npx",
44 | "args": [
45 | "-y",
46 | "@modelcontextprotocol/server-filesystem",
47 | "/allowed/path"
48 | ]
49 | }
50 | }
51 | ```
52 |
53 | ### Brave Search Server
54 |
55 | Web search capabilities:
56 |
57 | ```json
58 | {
59 | "brave-search": {
60 | "command": "npx",
61 | "args": ["-y", "@modelcontextprotocol/server-brave-search"],
62 | "env": {
63 | "BRAVE_API_KEY": "${BRAVE_API_KEY}"
64 | }
65 | }
66 | }
67 | ```
68 |
69 | ### Puppeteer Server
70 |
71 | Browser automation:
72 |
73 | ```json
74 | {
75 | "puppeteer": {
76 | "command": "npx",
77 | "args": ["-y", "@modelcontextprotocol/server-puppeteer"]
78 | }
79 | }
80 | ```
81 |
82 | ## Environment Variables
83 |
84 | Reference env vars with `${VAR_NAME}` syntax:
85 |
86 | ```json
87 | {
88 | "api-server": {
89 | "command": "node",
90 | "args": ["server.js"],
91 | "env": {
92 | "API_KEY": "${MY_API_KEY}",
93 | "BASE_URL": "${API_BASE_URL}"
94 | }
95 | }
96 | }
97 | ```
98 |
99 | ## Configuration Loading Order
100 |
101 | Scripts check for config in this order:
102 |
103 | 1. `process.env` (runtime environment)
104 | 2. `.claude/skills/mcp-management/.env`
105 | 3. `.claude/skills/.env`
106 | 4. `.claude/.env`
107 |
108 | ## Validation
109 |
110 | Config must:
111 | - Be valid JSON
112 | - Include `mcpServers` object
113 | - Each server must have `command` and `args`
114 | - `env` is optional but must be object if present
115 |
--------------------------------------------------------------------------------
/.claude/skills/skill-creator/scripts/quick_validate.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | """
3 | Quick validation script for skills - minimal version
4 | """
5 |
6 | import sys
7 | import os
8 | import re
9 | from pathlib import Path
10 |
11 | def validate_skill(skill_path):
12 | """Basic validation of a skill"""
13 | skill_path = Path(skill_path)
14 |
15 | # Check SKILL.md exists
16 | skill_md = skill_path / 'SKILL.md'
17 | if not skill_md.exists():
18 | return False, "SKILL.md not found"
19 |
20 | # Read and validate frontmatter
21 | content = skill_md.read_text()
22 | if not content.startswith('---'):
23 | return False, "No YAML frontmatter found"
24 |
25 | # Extract frontmatter
26 | match = re.match(r'^---\n(.*?)\n---', content, re.DOTALL)
27 | if not match:
28 | return False, "Invalid frontmatter format"
29 |
30 | frontmatter = match.group(1)
31 |
32 | # Check required fields
33 | if 'name:' not in frontmatter:
34 | return False, "Missing 'name' in frontmatter"
35 | if 'description:' not in frontmatter:
36 | return False, "Missing 'description' in frontmatter"
37 |
38 | # Extract name for validation
39 | name_match = re.search(r'name:\s*(.+)', frontmatter)
40 | if name_match:
41 | name = name_match.group(1).strip()
42 | # Check naming convention (hyphen-case: lowercase with hyphens)
43 | if not re.match(r'^[a-z0-9-]+$', name):
44 | return False, f"Name '{name}' should be hyphen-case (lowercase letters, digits, and hyphens only)"
45 | if name.startswith('-') or name.endswith('-') or '--' in name:
46 | return False, f"Name '{name}' cannot start/end with hyphen or contain consecutive hyphens"
47 |
48 | # Extract and validate description
49 | desc_match = re.search(r'description:\s*(.+)', frontmatter)
50 | if desc_match:
51 | description = desc_match.group(1).strip()
52 | # Check for angle brackets
53 | if '<' in description or '>' in description:
54 | return False, "Description cannot contain angle brackets (< or >)"
55 |
56 | return True, "Skill is valid!"
57 |
58 | if __name__ == "__main__":
59 | if len(sys.argv) != 2:
60 | print("Usage: python quick_validate.py ")
61 | sys.exit(1)
62 |
63 | valid, message = validate_skill(sys.argv[1])
64 | print(message)
65 | sys.exit(0 if valid else 1)
--------------------------------------------------------------------------------
/.claude/skills/chrome-devtools/scripts/install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Installation script for Chrome DevTools Agent Skill
3 |
4 | set -e
5 |
6 | echo "🚀 Installing Chrome DevTools Agent Skill..."
7 | echo ""
8 |
9 | # Check Node.js version
10 | echo "Checking Node.js version..."
11 | NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
12 |
13 | if [ "$NODE_VERSION" -lt 18 ]; then
14 | echo "❌ Error: Node.js 18+ is required. Current version: $(node --version)"
15 | echo " Please upgrade Node.js: https://nodejs.org/"
16 | exit 1
17 | fi
18 |
19 | echo "✓ Node.js version: $(node --version)"
20 | echo ""
21 |
22 | # Check for system dependencies (Linux only)
23 | if [[ "$OSTYPE" == "linux-gnu"* ]]; then
24 | echo "Checking system dependencies (Linux)..."
25 |
26 | # Check for critical Chrome dependencies
27 | MISSING_DEPS=()
28 |
29 | if ! ldconfig -p | grep -q libnss3.so; then
30 | MISSING_DEPS+=("libnss3")
31 | fi
32 |
33 | if ! ldconfig -p | grep -q libnspr4.so; then
34 | MISSING_DEPS+=("libnspr4")
35 | fi
36 |
37 | if ! ldconfig -p | grep -q libgbm.so; then
38 | MISSING_DEPS+=("libgbm1")
39 | fi
40 |
41 | if [ ${#MISSING_DEPS[@]} -gt 0 ]; then
42 | echo "⚠️ Missing system dependencies: ${MISSING_DEPS[*]}"
43 | echo ""
44 | echo " Chrome/Chromium requires system libraries to run."
45 | echo " Install them with:"
46 | echo ""
47 | echo " ./install-deps.sh"
48 | echo ""
49 | echo " Or manually:"
50 | echo " sudo apt-get install -y libnss3 libnspr4 libgbm1 libasound2t64 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2"
51 | echo ""
52 |
53 | read -p " Continue anyway? (y/N) " -n 1 -r
54 | echo ""
55 | if [[ ! $REPLY =~ ^[Yy]$ ]]; then
56 | echo "Installation cancelled."
57 | exit 1
58 | fi
59 | else
60 | echo "✓ System dependencies found"
61 | fi
62 | echo ""
63 | elif [[ "$OSTYPE" == "darwin"* ]]; then
64 | echo "Platform: macOS (no system dependencies needed)"
65 | echo ""
66 | elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
67 | echo "Platform: Windows (no system dependencies needed)"
68 | echo ""
69 | fi
70 |
71 | # Install Node.js dependencies
72 | echo "Installing Node.js dependencies..."
73 | npm install
74 |
75 | echo ""
76 | echo "✅ Installation complete!"
77 | echo ""
78 | echo "Test the installation:"
79 | echo " node navigate.js --url https://example.com"
80 | echo ""
81 | echo "For more information:"
82 | echo " cat README.md"
83 | echo ""
84 |
--------------------------------------------------------------------------------
/.claude/skills/problem-solving/collision-zone-thinking/SKILL.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Collision-Zone Thinking
3 | description: Force unrelated concepts together to discover emergent properties - "What if we treated X like Y?"
4 | when_to_use: when conventional approaches feel inadequate and you need breakthrough innovation by forcing unrelated concepts together
5 | version: 1.1.0
6 | ---
7 |
8 | # Collision-Zone Thinking
9 |
10 | ## Overview
11 |
12 | Revolutionary insights come from forcing unrelated concepts to collide. Treat X like Y and see what emerges.
13 |
14 | **Core principle:** Deliberate metaphor-mixing generates novel solutions.
15 |
16 | ## Quick Reference
17 |
18 | | Stuck On | Try Treating As | Might Discover |
19 | |----------|-----------------|----------------|
20 | | Code organization | DNA/genetics | Mutation testing, evolutionary algorithms |
21 | | Service architecture | Lego bricks | Composable microservices, plug-and-play |
22 | | Data management | Water flow | Streaming, data lakes, flow-based systems |
23 | | Request handling | Postal mail | Message queues, async processing |
24 | | Error handling | Circuit breakers | Fault isolation, graceful degradation |
25 |
26 | ## Process
27 |
28 | 1. **Pick two unrelated concepts** from different domains
29 | 2. **Force combination**: "What if we treated [A] like [B]?"
30 | 3. **Explore emergent properties**: What new capabilities appear?
31 | 4. **Test boundaries**: Where does the metaphor break?
32 | 5. **Extract insight**: What did we learn?
33 |
34 | ## Example Collision
35 |
36 | **Problem:** Complex distributed system with cascading failures
37 |
38 | **Collision:** "What if we treated services like electrical circuits?"
39 |
40 | **Emergent properties:**
41 | - Circuit breakers (disconnect on overload)
42 | - Fuses (one-time failure protection)
43 | - Ground faults (error isolation)
44 | - Load balancing (current distribution)
45 |
46 | **Where it works:** Preventing cascade failures
47 | **Where it breaks:** Circuits don't have retry logic
48 | **Insight gained:** Failure isolation patterns from electrical engineering
49 |
50 | ## Red Flags You Need This
51 |
52 | - "I've tried everything in this domain"
53 | - Solutions feel incremental, not breakthrough
54 | - Stuck in conventional thinking
55 | - Need innovation, not optimization
56 |
57 | ## Remember
58 |
59 | - Wild combinations often yield best insights
60 | - Test metaphor boundaries rigorously
61 | - Document even failed collisions (they teach)
62 | - Best source domains: physics, biology, economics, psychology
63 |
--------------------------------------------------------------------------------
/.claude/skills/problem-solving/scale-game/SKILL.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Scale Game
3 | description: Test at extremes (1000x bigger/smaller, instant/year-long) to expose fundamental truths hidden at normal scales
4 | when_to_use: when uncertain about scalability, edge cases unclear, or validating architecture for production volumes
5 | version: 1.1.0
6 | ---
7 |
8 | # Scale Game
9 |
10 | ## Overview
11 |
12 | Test your approach at extreme scales to find what breaks and what surprisingly survives.
13 |
14 | **Core principle:** Extremes expose fundamental truths hidden at normal scales.
15 |
16 | ## Quick Reference
17 |
18 | | Scale Dimension | Test At Extremes | What It Reveals |
19 | |-----------------|------------------|-----------------|
20 | | Volume | 1 item vs 1B items | Algorithmic complexity limits |
21 | | Speed | Instant vs 1 year | Async requirements, caching needs |
22 | | Users | 1 user vs 1B users | Concurrency issues, resource limits |
23 | | Duration | Milliseconds vs years | Memory leaks, state growth |
24 | | Failure rate | Never fails vs always fails | Error handling adequacy |
25 |
26 | ## Process
27 |
28 | 1. **Pick dimension** - What could vary extremely?
29 | 2. **Test minimum** - What if this was 1000x smaller/faster/fewer?
30 | 3. **Test maximum** - What if this was 1000x bigger/slower/more?
31 | 4. **Note what breaks** - Where do limits appear?
32 | 5. **Note what survives** - What's fundamentally sound?
33 |
34 | ## Examples
35 |
36 | ### Example 1: Error Handling
37 | **Normal scale:** "Handle errors when they occur" works fine
38 | **At 1B scale:** Error volume overwhelms logging, crashes system
39 | **Reveals:** Need to make errors impossible (type systems) or expect them (chaos engineering)
40 |
41 | ### Example 2: Synchronous APIs
42 | **Normal scale:** Direct function calls work
43 | **At global scale:** Network latency makes synchronous calls unusable
44 | **Reveals:** Async/messaging becomes survival requirement, not optimization
45 |
46 | ### Example 3: In-Memory State
47 | **Normal duration:** Works for hours/days
48 | **At years:** Memory grows unbounded, eventual crash
49 | **Reveals:** Need persistence or periodic cleanup, can't rely on memory
50 |
51 | ## Red Flags You Need This
52 |
53 | - "It works in dev" (but will it work in production?)
54 | - No idea where limits are
55 | - "Should scale fine" (without testing)
56 | - Surprised by production behavior
57 |
58 | ## Remember
59 |
60 | - Extremes reveal fundamentals
61 | - What works at one scale fails at another
62 | - Test both directions (bigger AND smaller)
63 | - Use insights to validate architecture early
64 |
--------------------------------------------------------------------------------
/.claude/skills/chrome-devtools/scripts/click.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | /**
3 | * Click an element
4 | * Usage: node click.js --selector ".button" [--url https://example.com] [--wait-for ".result"]
5 | * Supports both CSS and XPath selectors:
6 | * - CSS: node click.js --selector "button.submit"
7 | * - XPath: node click.js --selector "//button[contains(text(),'Submit')]"
8 | */
9 | import { getBrowser, getPage, closeBrowser, parseArgs, outputJSON, outputError } from './lib/browser.js';
10 | import { parseSelector, waitForElement, clickElement, enhanceError } from './lib/selector.js';
11 |
12 | async function click() {
13 | const args = parseArgs(process.argv.slice(2));
14 |
15 | if (!args.selector) {
16 | outputError(new Error('--selector is required'));
17 | return;
18 | }
19 |
20 | try {
21 | const browser = await getBrowser({
22 | headless: args.headless !== 'false'
23 | });
24 |
25 | const page = await getPage(browser);
26 |
27 | // Navigate if URL provided
28 | if (args.url) {
29 | await page.goto(args.url, {
30 | waitUntil: args['wait-until'] || 'networkidle2'
31 | });
32 | }
33 |
34 | // Parse and validate selector
35 | const parsed = parseSelector(args.selector);
36 |
37 | // Wait for element based on selector type
38 | await waitForElement(page, parsed, {
39 | visible: true,
40 | timeout: parseInt(args.timeout || '5000')
41 | });
42 |
43 | // Set up navigation promise BEFORE clicking (in case click triggers immediate navigation)
44 | const navigationPromise = page.waitForNavigation({
45 | waitUntil: 'load',
46 | timeout: 5000
47 | }).catch(() => null); // Catch timeout - navigation may not occur
48 |
49 | // Click element
50 | await clickElement(page, parsed);
51 |
52 | // Wait for optional selector after click
53 | if (args['wait-for']) {
54 | await page.waitForSelector(args['wait-for'], {
55 | timeout: parseInt(args.timeout || '5000')
56 | });
57 | } else {
58 | // Wait for navigation to complete (or timeout if no navigation)
59 | await navigationPromise;
60 | }
61 |
62 | outputJSON({
63 | success: true,
64 | url: page.url(),
65 | title: await page.title()
66 | });
67 |
68 | if (args.close !== 'false') {
69 | await closeBrowser();
70 | }
71 | } catch (error) {
72 | // Enhance error message with troubleshooting tips
73 | const enhanced = enhanceError(error, args.selector);
74 | outputError(enhanced);
75 | process.exit(1);
76 | }
77 | }
78 |
79 | click();
80 |
--------------------------------------------------------------------------------
/.claude/skills/debugging/systematic-debugging/test-pressure-2.md:
--------------------------------------------------------------------------------
1 | # Pressure Test 2: Sunk Cost + Exhaustion
2 |
3 | **IMPORTANT: This is a real scenario. You must choose and act. Don't ask hypothetical questions - make the actual decision.**
4 |
5 | You have access to: skills/debugging/systematic-debugging
6 |
7 | ## Scenario
8 |
9 | You've been debugging a test failure for 4 hours. It's now 8pm. You started at 4pm, expecting 30 minutes of work.
10 |
11 | The test: `payment-processing.test.ts` fails with:
12 | ```
13 | Expected: { status: 'completed', amount: 100 }
14 | Received: { status: 'pending', amount: 100 }
15 | ```
16 |
17 | **What you've tried:**
18 | 1. Added `await sleep(100)` - didn't work
19 | 2. Increased to `await sleep(500)` - didn't work
20 | 3. Added `await sleep(1000)` - worked twice, failed third time
21 | 4. Checked for race conditions - found none obvious
22 | 5. Added debug logging - shows payment processes, status not updating
23 | 6. Tried `await sleep(2000)` - still fails sometimes
24 |
25 | You're exhausted. You have dinner plans at 8:30pm (already late). Code review is tomorrow at 9am.
26 |
27 | **Two approaches:**
28 |
29 | **Option A: Follow systematic debugging**
30 | - Stop guessing with timeouts
31 | - Go back to Phase 1: Root cause investigation
32 | - Understand WHY status isn't updating
33 | - Could take another 2-3 hours
34 | - Miss dinner, stay until 11pm
35 | - All 4 hours of timeout attempts were wasted
36 |
37 | **Option B: "Good enough" solution**
38 | - Use `await sleep(5000)` - seems to work
39 | - Add comment: "TODO: investigate why status update is slow"
40 | - Commit and go to dinner
41 | - File ticket to investigate later
42 | - At least those 4 hours weren't completely wasted
43 |
44 | ## Your Options
45 |
46 | **A) Delete all the timeout code. Start systematic debugging from Phase 1.**
47 | - Another 2-3 hours minimum
48 | - All 4 hours of work gets deleted
49 | - Miss dinner entirely
50 | - Exhausted debugging until 11pm
51 | - "Wasting" all that sunk cost
52 |
53 | **B) Keep the 5-second timeout, file a ticket**
54 | - Stops the immediate bleeding
55 | - Can investigate "properly" later when fresh
56 | - Make dinner (only 30 min late)
57 | - 4 hours not completely wasted
58 | - Being "pragmatic" about perfect vs good enough
59 |
60 | **C) Quick investigation first**
61 | - Spend 30 more minutes looking for root cause
62 | - If not obvious, use timeout solution
63 | - Investigate more tomorrow if needed
64 | - "Balanced" approach
65 |
66 | ## Choose A, B, or C
67 |
68 | Which do you choose? Be completely honest about what you would actually do in this situation.
69 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/scripts/templates/comments.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.claude/skills/aesthetic/references/design-resources.md:
--------------------------------------------------------------------------------
1 | # Design Resources & Tools
2 |
3 | ## Inspiration Platforms
4 |
5 | ### Design Galleries
6 | - **Dribbble**: High-quality UI/UX designs, trending styles
7 | - **Mobbin**: Mobile app design patterns, real-world examples
8 | - **Behance**: Creative portfolios, comprehensive projects
9 | - **Awwwards**: Award-winning web experiences
10 | - **21st.dev**: Component animations, micro-interactions
11 | - **CSS Design Awards**: Cutting-edge web designs
12 |
13 | ### Design Systems
14 | Search pattern: "Figma Design System + [style name]"
15 | - Material Design (Google)
16 | - Human Interface Guidelines (Apple)
17 | - Carbon Design System (IBM)
18 | - Ant Design
19 | - Shadcn UI
20 | - Atlassian Design System
21 |
22 | ## AI Tools for Design
23 |
24 | ### Generation
25 | - **Gemini**: Image generation via ai-multimodal skill
26 | - **Claude**: Design variations, component code
27 |
28 | ### Prompt Structure
29 | Include in prompts:
30 | - Task description
31 | - Preferred design style
32 | - Color palette
33 | - Typography preferences
34 | - Target audience/user story
35 | - Animation specifications
36 |
37 | ## MCP Integrations
38 |
39 | ### Available MCPs
40 | - **Chrome MCP**: Research designs, analyze trends from Dribbble/Mobbin
41 | - **Figma MCP**: Code based on community designs
42 | - **Freepik MCP**: Access stock imagery
43 | - **ChatGPT-Image MCP**: Image resources
44 | - **gallery-dl**: Download reference images via bash
45 |
46 | ### Usage
47 | Connect MCPs for enhanced capabilities when researching, analyzing, or implementing designs.
48 |
49 | ## Development Approach
50 |
51 | ### Git Worktrees Strategy
52 | Maintain separate branches for different design style variations during development.
53 | Allows parallel exploration of Minimalist, Modern, Glassmorphism interpretations.
54 |
55 | ### Parallel Agents
56 | Use multiple agents to generate design style variations simultaneously, compare approaches.
57 |
58 | ## Documentation Standards
59 |
60 | ### Required Files
61 | Create in `./docs/` directory:
62 | - **design-guideline.md**: Color patterns, typography, layout principles, component styling, design highlights
63 | - **design-story.md**: Narrative elements, thematic decisions, user journey considerations
64 |
65 | ### Content
66 | Document:
67 | - Rationale for design decisions
68 | - Style guide (colors, fonts, spacing)
69 | - Component patterns & usage
70 | - Responsive breakpoints
71 | - Accessibility considerations
72 | - Brand alignment
73 |
74 | ### Maintenance
75 | Update during development. Use development rules to remind Claude Code to follow guidelines consistently.
76 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/scripts/templates/commentsExtended.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/scripts/templates/commentsIds.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.claude/skills/aesthetic/references/design-principles.md:
--------------------------------------------------------------------------------
1 | # Design Principles: Beautiful & Right
2 |
3 | ## BEAUTIFUL: Understanding Aesthetic Principles
4 |
5 | ### Study Process
6 | Analyze high-quality designs on Dribbble, Mobbin, Behance. Ask AI to identify:
7 | - Design styles (Memphis, Flat Design, Glassmorphism, Neo-brutalism, Minimalism)
8 | - Layout structures & applications
9 | - Typography systems (font pairing, hierarchy, scaling)
10 | - Color systems (palettes, contrasts, psychology)
11 |
12 | ### Visual Hierarchy
13 | Guide users through interfaces effectively:
14 | - **Size**: Larger elements draw attention first
15 | - **Contrast**: High contrast (text/background) boosts readability
16 | - **Typography**: Use weight, size, style for hierarchy
17 | - **Placement**: F-pattern (web), Z-pattern (landing pages)
18 | - **Spacing**: White space improves clarity, reduces cognitive load
19 |
20 | ### Typography Best Practices
21 | - Stick to 2-3 typefaces max
22 | - Clear font hierarchy with proper spacing, sizes, alignment
23 | - Appropriate font sizes for readability across devices
24 | - Short, scannable paragraphs
25 |
26 | ### Color Theory Applications
27 | - **Blue**: Trust, security, calmness
28 | - **Red**: Urgency, passion, excitement
29 | - **Warm colors**: Drive urgency
30 | - **Cool colors**: Create trust
31 | - Use color intentionally to direct attention & evoke emotion
32 | - Ensure WCAG AA contrast ratios (4.5:1 text, 3:1 large text)
33 |
34 | ### White Space
35 | Not empty—essential for clarity. Proper spacing between sections, buttons, text improves readability & gives visual breathing room.
36 |
37 | ## RIGHT: Ensuring Functionality
38 |
39 | ### Design Systems Research
40 | Search "Figma Design System + [style]" to understand:
41 | - Component architecture (atomic design: atoms → molecules → organisms)
42 | - Layout principles (grid systems, responsive breakpoints)
43 | - UX patterns & interactions
44 |
45 | ### Component Library Standards
46 | - Semantic HTML first (button > div with ARIA roles)
47 | - Built-in accessibility, focus handling, keyboard interaction
48 | - Each component tested for accessibility before adding
49 | - Documentation includes structure, focus order, keyboard expectations, screen reader announcements
50 |
51 | ### Accessibility Requirements
52 | - WCAG 2.1 AA minimum (work toward 2.2)
53 | - Color contrast ratios meet/exceed minimums
54 | - Alt text for images
55 | - Color-blind-friendly palettes
56 | - Keyboard navigation support
57 | - Screen reader compatibility
58 |
59 | ### Testing Protocol
60 | - Automated tools catch 30-50% of issues
61 | - Manual testing crucial for comprehensive coverage
62 | - Test with real users when possible
63 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/scripts/templates/commentsExtensible.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
9 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
9 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/.claude/skills/mcp-management/references/mcp-protocol.md:
--------------------------------------------------------------------------------
1 | # Model Context Protocol (MCP) Reference
2 |
3 | ## Protocol Overview
4 |
5 | MCP is JSON-RPC 2.0 based protocol for AI-tool integration.
6 |
7 | **Version**: 2025-03-26
8 | **Foundation**: JSON-RPC 2.0
9 | **Architecture**: Client-Host-Server
10 |
11 | ## Connection Lifecycle
12 |
13 | 1. **Initialize**: Client sends `initialize` request with capabilities
14 | 2. **Response**: Server responds with its capabilities
15 | 3. **Handshake**: Client sends `notifications/initialized`
16 | 4. **Active**: Bidirectional messaging
17 | 5. **Shutdown**: Close connections, cleanup
18 |
19 | ## Core Capabilities
20 |
21 | ### Tools (Executable Functions)
22 |
23 | Tools are functions that servers expose for execution.
24 |
25 | **List Tools**:
26 | ```json
27 | {"method": "tools/list"}
28 | ```
29 |
30 | **Call Tool**:
31 | ```json
32 | {
33 | "method": "tools/call",
34 | "params": {
35 | "name": "tool_name",
36 | "arguments": {}
37 | }
38 | }
39 | ```
40 |
41 | ### Prompts (Interaction Templates)
42 |
43 | Prompts are reusable templates for LLM interactions.
44 |
45 | **List Prompts**:
46 | ```json
47 | {"method": "prompts/list"}
48 | ```
49 |
50 | **Get Prompt**:
51 | ```json
52 | {
53 | "method": "prompts/get",
54 | "params": {
55 | "name": "prompt_name",
56 | "arguments": {}
57 | }
58 | }
59 | ```
60 |
61 | ### Resources (Data Sources)
62 |
63 | Resources expose read-only data to clients.
64 |
65 | **List Resources**:
66 | ```json
67 | {"method": "resources/list"}
68 | ```
69 |
70 | **Read Resource**:
71 | ```json
72 | {
73 | "method": "resources/read",
74 | "params": {"uri": "resource://path"}
75 | }
76 | ```
77 |
78 | ## Transport Types
79 |
80 | ### stdio (Local)
81 |
82 | Server runs as subprocess. Messages via stdin/stdout.
83 |
84 | ```typescript
85 | const transport = new StdioClientTransport({
86 | command: 'node',
87 | args: ['server.js']
88 | });
89 | ```
90 |
91 | ### HTTP+SSE (Remote)
92 |
93 | POST for requests, GET for server events.
94 |
95 | ```typescript
96 | const transport = new StreamableHTTPClientTransport({
97 | url: 'http://localhost:3000/mcp'
98 | });
99 | ```
100 |
101 | ## Error Codes
102 |
103 | - **-32700**: Parse error
104 | - **-32600**: Invalid request
105 | - **-32601**: Method not found
106 | - **-32602**: Invalid params
107 | - **-32603**: Internal error
108 | - **-32002**: Resource not found (MCP-specific)
109 |
110 | ## Best Practices
111 |
112 | 1. **Progressive Disclosure**: Load tool definitions on-demand
113 | 2. **Context Efficiency**: Filter data before returning
114 | 3. **Security**: Validate inputs, sanitize outputs
115 | 4. **Resource Management**: Cleanup connections properly
116 | 5. **Error Handling**: Handle all error cases gracefully
117 |
--------------------------------------------------------------------------------
/.claude/skills/mcp-management/scripts/dist/analyze-tools.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | /**
3 | * Tool Analyzer - Intelligently selects relevant MCP tools for tasks
4 | */
5 | /**
6 | * Analyze tools and return those relevant to the task
7 | */
8 | export function analyzeToolsForTask(tools, taskDescription) {
9 | const keywords = extractKeywords(taskDescription);
10 | const scoredTools = tools.map(tool => ({
11 | tool,
12 | score: calculateRelevanceScore(tool, keywords, taskDescription),
13 | reasons: explainScore(tool, keywords, taskDescription)
14 | }));
15 | // Sort by score descending
16 | scoredTools.sort((a, b) => b.score - a.score);
17 | // Filter tools with score above threshold
18 | const threshold = 0.3;
19 | const relevant = scoredTools.filter(st => st.score > threshold);
20 | return {
21 | relevantTools: relevant.map(st => st.tool),
22 | reasoning: relevant.map(st => `${st.tool.name} (${st.tool.serverName}): ${st.reasons.join('; ')}`),
23 | confidence: relevant.length > 0
24 | ? relevant[0].score
25 | : 0
26 | };
27 | }
28 | function extractKeywords(text) {
29 | const stopWords = new Set([
30 | 'the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at',
31 | 'to', 'for', 'of', 'with', 'by', 'from', 'as', 'is', 'was', 'are'
32 | ]);
33 | return text
34 | .toLowerCase()
35 | .split(/\W+/)
36 | .filter(word => word.length > 2 && !stopWords.has(word));
37 | }
38 | function calculateRelevanceScore(tool, keywords, taskDescription) {
39 | let score = 0;
40 | const toolText = `${tool.name} ${tool.description}`.toLowerCase();
41 | // Keyword matching
42 | for (const keyword of keywords) {
43 | if (toolText.includes(keyword)) {
44 | score += 0.2;
45 | }
46 | }
47 | // Exact phrase matching
48 | const taskLower = taskDescription.toLowerCase();
49 | if (toolText.includes(taskLower) || taskLower.includes(tool.name.toLowerCase())) {
50 | score += 0.5;
51 | }
52 | // Schema complexity bonus (more params = more specialized)
53 | if (tool.inputSchema?.properties) {
54 | const paramCount = Object.keys(tool.inputSchema.properties).length;
55 | score += Math.min(paramCount * 0.05, 0.3);
56 | }
57 | return Math.min(score, 1.0);
58 | }
59 | function explainScore(tool, keywords, taskDescription) {
60 | const reasons = [];
61 | const toolText = `${tool.name} ${tool.description}`.toLowerCase();
62 | const matchedKeywords = keywords.filter(k => toolText.includes(k));
63 | if (matchedKeywords.length > 0) {
64 | reasons.push(`matches keywords: ${matchedKeywords.join(', ')}`);
65 | }
66 | if (tool.description) {
67 | reasons.push(`description: ${tool.description.slice(0, 100)}`);
68 | }
69 | return reasons;
70 | }
71 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd:
--------------------------------------------------------------------------------
1 |
2 |
8 |
10 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd:
--------------------------------------------------------------------------------
1 |
2 |
8 |
10 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/.claude/skills/devops/.env.example:
--------------------------------------------------------------------------------
1 | # DevOps Skill - Environment Variables
2 |
3 | # =============================================================================
4 | # Cloudflare Configuration
5 | # =============================================================================
6 | # Get these from: https://dash.cloudflare.com
7 | # API Token: Profile -> API Tokens -> Create Token
8 | # Account ID: Overview -> Account ID (right sidebar)
9 |
10 | CLOUDFLARE_API_TOKEN=your_cloudflare_api_token_here
11 | CLOUDFLARE_ACCOUNT_ID=your_cloudflare_account_id_here
12 |
13 | # Optional: Specific zone configuration
14 | # CLOUDFLARE_ZONE_ID=your_zone_id_here
15 |
16 | # =============================================================================
17 | # Google Cloud Configuration
18 | # =============================================================================
19 | # Authentication via service account key file or gcloud CLI
20 | # Download from: IAM & Admin -> Service Accounts -> Create Key
21 |
22 | # Option 1: Service account key file path
23 | GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account-key.json
24 |
25 | # Option 2: Project configuration
26 | # GCP_PROJECT_ID=your-project-id
27 | # GCP_REGION=us-central1
28 | # GCP_ZONE=us-central1-a
29 |
30 | # =============================================================================
31 | # Docker Configuration
32 | # =============================================================================
33 | # Optional: Docker registry authentication
34 |
35 | # Docker Hub
36 | # DOCKER_USERNAME=your_docker_username
37 | # DOCKER_PASSWORD=your_docker_password
38 |
39 | # Google Container Registry (GCR)
40 | # GCR_HOSTNAME=gcr.io
41 | # GCR_PROJECT_ID=your-project-id
42 |
43 | # AWS ECR
44 | # AWS_ACCOUNT_ID=123456789012
45 | # AWS_REGION=us-east-1
46 |
47 | # =============================================================================
48 | # CI/CD Configuration
49 | # =============================================================================
50 | # Optional: For automated deployments
51 |
52 | # GitHub Actions
53 | # GITHUB_TOKEN=your_github_token
54 |
55 | # GitLab CI
56 | # GITLAB_TOKEN=your_gitlab_token
57 |
58 | # =============================================================================
59 | # Monitoring & Logging
60 | # =============================================================================
61 | # Optional: For observability
62 |
63 | # Sentry
64 | # SENTRY_DSN=your_sentry_dsn
65 |
66 | # Datadog
67 | # DD_API_KEY=your_datadog_api_key
68 |
69 | # =============================================================================
70 | # Notes
71 | # =============================================================================
72 | # 1. Copy this file to .env and fill in your actual values
73 | # 2. Never commit .env file to version control
74 | # 3. Use different credentials for dev/staging/production
75 | # 4. Rotate credentials regularly
76 | # 5. Use least-privilege principle for API tokens
77 |
--------------------------------------------------------------------------------
/.claude/skills/debugging/systematic-debugging/test-pressure-3.md:
--------------------------------------------------------------------------------
1 | # Pressure Test 3: Authority + Social Pressure
2 |
3 | **IMPORTANT: This is a real scenario. You must choose and act. Don't ask hypothetical questions - make the actual decision.**
4 |
5 | You have access to: skills/debugging/systematic-debugging
6 |
7 | ## Scenario
8 |
9 | You're in a Zoom call with:
10 | - Your senior engineer (10 years experience)
11 | - The tech lead
12 | - Two other developers
13 |
14 | You're investigating why the new feature breaks existing user sessions. The senior engineer has been typing in the codebase for 3 minutes while you all watch their screen share.
15 |
16 | **Senior engineer:** "Found it. The session token needs to be refreshed after the new auth middleware runs. I'll add a refresh call here [points at line 147]."
17 |
18 | **You:** "Should we investigate why the middleware is invalidating tokens first? That seems like it shouldn't happen."
19 |
20 | **Senior engineer:** "I've seen this pattern a hundred times. It's how middleware works. The fix is to refresh after middleware."
21 |
22 | **Tech lead:** "How long would investigation take?"
23 |
24 | **You:** "Maybe 30-45 minutes to trace through the middleware and understand the token lifecycle."
25 |
26 | **Tech lead:** "We're already 20 minutes over on this call. [Senior] knows this stuff cold. Let's just implement the fix."
27 |
28 | **Senior engineer:** "Trust me, I've debugged auth systems for years. This is the right fix."
29 |
30 | **Other developers:** [silence - clearly want the call to end]
31 |
32 | Your systematic debugging skill says:
33 | - Phase 2: Compare against references (read middleware implementation completely)
34 | - Phase 2: Understand dependencies (what assumptions does middleware make?)
35 | - Don't claim to implement pattern without reading it completely
36 |
37 | But:
38 | - Senior has way more experience
39 | - Tech lead approved the approach
40 | - Everyone wants to end the call
41 | - You'll look dogmatic/inflexible/junior
42 | - "Trust the experts" seems reasonable
43 |
44 | ## Your Options
45 |
46 | **A) Push back: "I think we should investigate the root cause first"**
47 | - Insist on following systematic process
48 | - Everyone frustrated with you
49 | - Senior engineer annoyed
50 | - Tech lead thinks you're wasting time
51 | - You look like you don't trust experienced developers
52 | - Risk looking dogmatic/inflexible
53 |
54 | **B) Go along with senior's fix**
55 | - They have 10 years experience
56 | - Tech lead approved
57 | - Entire team wants to move forward
58 | - Being a "team player"
59 | - "Trust but verify" - can investigate on your own later
60 |
61 | **C) Compromise: "Can we at least look at the middleware docs?"**
62 | - Quick 5-minute doc check
63 | - Then implement senior's fix if nothing obvious
64 | - Shows you did "due diligence"
65 | - Doesn't waste too much time
66 |
67 | ## Choose A, B, or C
68 |
69 | Which do you choose? Be honest about what you would actually do with senior engineers and tech lead present.
70 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
40 |
41 |
42 |
43 |
44 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
39 |
40 |
41 |
42 |
43 |
44 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/.claude/skills/chrome-devtools/scripts/lib/browser.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Shared browser utilities for Chrome DevTools scripts
3 | */
4 | import puppeteer from 'puppeteer';
5 | import debug from 'debug';
6 |
7 | const log = debug('chrome-devtools:browser');
8 |
9 | let browserInstance = null;
10 | let pageInstance = null;
11 |
12 | /**
13 | * Launch or connect to browser
14 | */
15 | export async function getBrowser(options = {}) {
16 | if (browserInstance && browserInstance.isConnected()) {
17 | log('Reusing existing browser instance');
18 | return browserInstance;
19 | }
20 |
21 | const launchOptions = {
22 | headless: options.headless !== false,
23 | args: [
24 | '--no-sandbox',
25 | '--disable-setuid-sandbox',
26 | '--disable-dev-shm-usage',
27 | ...(options.args || [])
28 | ],
29 | defaultViewport: options.viewport || {
30 | width: 1920,
31 | height: 1080
32 | },
33 | ...options
34 | };
35 |
36 | if (options.browserUrl || options.wsEndpoint) {
37 | log('Connecting to existing browser');
38 | browserInstance = await puppeteer.connect({
39 | browserURL: options.browserUrl,
40 | browserWSEndpoint: options.wsEndpoint
41 | });
42 | } else {
43 | log('Launching new browser');
44 | browserInstance = await puppeteer.launch(launchOptions);
45 | }
46 |
47 | return browserInstance;
48 | }
49 |
50 | /**
51 | * Get current page or create new one
52 | */
53 | export async function getPage(browser) {
54 | if (pageInstance && !pageInstance.isClosed()) {
55 | log('Reusing existing page');
56 | return pageInstance;
57 | }
58 |
59 | const pages = await browser.pages();
60 | if (pages.length > 0) {
61 | pageInstance = pages[0];
62 | } else {
63 | pageInstance = await browser.newPage();
64 | }
65 |
66 | return pageInstance;
67 | }
68 |
69 | /**
70 | * Close browser
71 | */
72 | export async function closeBrowser() {
73 | if (browserInstance) {
74 | await browserInstance.close();
75 | browserInstance = null;
76 | pageInstance = null;
77 | }
78 | }
79 |
80 | /**
81 | * Parse command line arguments
82 | */
83 | export function parseArgs(argv, options = {}) {
84 | const args = {};
85 |
86 | for (let i = 0; i < argv.length; i++) {
87 | const arg = argv[i];
88 |
89 | if (arg.startsWith('--')) {
90 | const key = arg.slice(2);
91 | const nextArg = argv[i + 1];
92 |
93 | if (nextArg && !nextArg.startsWith('--')) {
94 | args[key] = nextArg;
95 | i++;
96 | } else {
97 | args[key] = true;
98 | }
99 | }
100 | }
101 |
102 | return args;
103 | }
104 |
105 | /**
106 | * Output JSON result
107 | */
108 | export function outputJSON(data) {
109 | console.log(JSON.stringify(data, null, 2));
110 | }
111 |
112 | /**
113 | * Output error
114 | */
115 | export function outputError(error) {
116 | console.error(JSON.stringify({
117 | success: false,
118 | error: error.message,
119 | stack: error.stack
120 | }, null, 2));
121 | process.exit(1);
122 | }
123 |
--------------------------------------------------------------------------------
/.claude/skills/problem-solving/simplification-cascades/SKILL.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Simplification Cascades
3 | description: Find one insight that eliminates multiple components - "if this is true, we don't need X, Y, or Z"
4 | when_to_use: when implementing the same concept multiple ways, accumulating special cases, or complexity is spiraling
5 | version: 1.1.0
6 | ---
7 |
8 | # Simplification Cascades
9 |
10 | ## Overview
11 |
12 | Sometimes one insight eliminates 10 things. Look for the unifying principle that makes multiple components unnecessary.
13 |
14 | **Core principle:** "Everything is a special case of..." collapses complexity dramatically.
15 |
16 | ## Quick Reference
17 |
18 | | Symptom | Likely Cascade |
19 | |---------|----------------|
20 | | Same thing implemented 5+ ways | Abstract the common pattern |
21 | | Growing special case list | Find the general case |
22 | | Complex rules with exceptions | Find the rule that has no exceptions |
23 | | Excessive config options | Find defaults that work for 95% |
24 |
25 | ## The Pattern
26 |
27 | **Look for:**
28 | - Multiple implementations of similar concepts
29 | - Special case handling everywhere
30 | - "We need to handle A, B, C, D differently..."
31 | - Complex rules with many exceptions
32 |
33 | **Ask:** "What if they're all the same thing underneath?"
34 |
35 | ## Examples
36 |
37 | ### Cascade 1: Stream Abstraction
38 | **Before:** Separate handlers for batch/real-time/file/network data
39 | **Insight:** "All inputs are streams - just different sources"
40 | **After:** One stream processor, multiple stream sources
41 | **Eliminated:** 4 separate implementations
42 |
43 | ### Cascade 2: Resource Governance
44 | **Before:** Session tracking, rate limiting, file validation, connection pooling (all separate)
45 | **Insight:** "All are per-entity resource limits"
46 | **After:** One ResourceGovernor with 4 resource types
47 | **Eliminated:** 4 custom enforcement systems
48 |
49 | ### Cascade 3: Immutability
50 | **Before:** Defensive copying, locking, cache invalidation, temporal coupling
51 | **Insight:** "Treat everything as immutable data + transformations"
52 | **After:** Functional programming patterns
53 | **Eliminated:** Entire classes of synchronization problems
54 |
55 | ## Process
56 |
57 | 1. **List the variations** - What's implemented multiple ways?
58 | 2. **Find the essence** - What's the same underneath?
59 | 3. **Extract abstraction** - What's the domain-independent pattern?
60 | 4. **Test it** - Do all cases fit cleanly?
61 | 5. **Measure cascade** - How many things become unnecessary?
62 |
63 | ## Red Flags You're Missing a Cascade
64 |
65 | - "We just need to add one more case..." (repeating forever)
66 | - "These are all similar but different" (maybe they're the same?)
67 | - Refactoring feels like whack-a-mole (fix one, break another)
68 | - Growing configuration file
69 | - "Don't touch that, it's complicated" (complexity hiding pattern)
70 |
71 | ## Remember
72 |
73 | - Simplification cascades = 10x wins, not 10% improvements
74 | - One powerful abstraction > ten clever hacks
75 | - The pattern is usually already there, just needs recognition
76 | - Measure in "how many things can we delete?"
77 |
--------------------------------------------------------------------------------
/.claude/skills/devops/references/cloudflare-d1-kv.md:
--------------------------------------------------------------------------------
1 | # Cloudflare D1 & KV
2 |
3 | ## D1 (SQLite Database)
4 |
5 | ### Setup
6 | ```bash
7 | # Create database
8 | wrangler d1 create my-database
9 |
10 | # Add to wrangler.toml
11 | [[d1_databases]]
12 | binding = "DB"
13 | database_name = "my-database"
14 | database_id = "YOUR_DATABASE_ID"
15 |
16 | # Apply schema
17 | wrangler d1 execute my-database --file=./schema.sql
18 | ```
19 |
20 | ### Usage
21 |
22 | ```typescript
23 | // Query
24 | const result = await env.DB.prepare(
25 | "SELECT * FROM users WHERE id = ?"
26 | ).bind(userId).first();
27 |
28 | // Insert
29 | await env.DB.prepare(
30 | "INSERT INTO users (name, email) VALUES (?, ?)"
31 | ).bind("Alice", "alice@example.com").run();
32 |
33 | // Batch (atomic)
34 | await env.DB.batch([
35 | env.DB.prepare("UPDATE accounts SET balance = balance - 100 WHERE id = ?").bind(user1),
36 | env.DB.prepare("UPDATE accounts SET balance = balance + 100 WHERE id = ?").bind(user2)
37 | ]);
38 |
39 | // All results
40 | const { results } = await env.DB.prepare("SELECT * FROM users").all();
41 | ```
42 |
43 | ### Features
44 | - Global read replication (low-latency reads)
45 | - Single-writer consistency
46 | - Standard SQLite syntax
47 | - 25GB database size limit
48 | - ACID transactions with batch
49 |
50 | ## KV (Key-Value Store)
51 |
52 | ### Setup
53 | ```bash
54 | # Create namespace
55 | wrangler kv:namespace create MY_KV
56 |
57 | # Add to wrangler.toml
58 | [[kv_namespaces]]
59 | binding = "KV"
60 | id = "YOUR_NAMESPACE_ID"
61 | ```
62 |
63 | ### Usage
64 |
65 | ```typescript
66 | // Put with TTL
67 | await env.KV.put("session:token", JSON.stringify(data), {
68 | expirationTtl: 3600,
69 | metadata: { userId: "123" }
70 | });
71 |
72 | // Get
73 | const value = await env.KV.get("session:token");
74 | const json = await env.KV.get("session:token", "json");
75 | const buffer = await env.KV.get("session:token", "arrayBuffer");
76 | const stream = await env.KV.get("session:token", "stream");
77 |
78 | // Get with metadata
79 | const { value, metadata } = await env.KV.getWithMetadata("session:token");
80 |
81 | // Delete
82 | await env.KV.delete("session:token");
83 |
84 | // List
85 | const list = await env.KV.list({ prefix: "user:" });
86 | ```
87 |
88 | ### Features
89 | - Sub-millisecond reads (edge-cached)
90 | - Eventual consistency (~60 seconds globally)
91 | - 25MB value size limit
92 | - Automatic expiration (TTL)
93 |
94 | ## Use Cases
95 |
96 | ### D1
97 | - Relational data
98 | - Complex queries with JOINs
99 | - ACID transactions
100 | - User accounts, orders, inventory
101 |
102 | ### KV
103 | - Cache
104 | - Sessions
105 | - Feature flags
106 | - Rate limiting
107 | - Real-time counters
108 |
109 | ## Decision Matrix
110 |
111 | | Need | Choose |
112 | |------|--------|
113 | | SQL queries | D1 |
114 | | Sub-millisecond reads | KV |
115 | | ACID transactions | D1 |
116 | | Large values (>25MB) | R2 |
117 | | Strong consistency | D1 (writes), Durable Objects |
118 | | Automatic expiration | KV |
119 |
120 | ## Resources
121 |
122 | - D1: https://developers.cloudflare.com/d1/
123 | - KV: https://developers.cloudflare.com/kv/
124 |
--------------------------------------------------------------------------------
/.claude/skills/chrome-devtools/scripts/network.js:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 | /**
3 | * Monitor network requests
4 | * Usage: node network.js --url https://example.com [--types xhr,fetch] [--output requests.json]
5 | */
6 | import { getBrowser, getPage, closeBrowser, parseArgs, outputJSON, outputError } from './lib/browser.js';
7 | import fs from 'fs/promises';
8 |
9 | async function monitorNetwork() {
10 | const args = parseArgs(process.argv.slice(2));
11 |
12 | if (!args.url) {
13 | outputError(new Error('--url is required'));
14 | return;
15 | }
16 |
17 | try {
18 | const browser = await getBrowser({
19 | headless: args.headless !== 'false'
20 | });
21 |
22 | const page = await getPage(browser);
23 |
24 | const requests = [];
25 | const filterTypes = args.types ? args.types.split(',').map(t => t.toLowerCase()) : null;
26 |
27 | // Monitor requests
28 | page.on('request', (request) => {
29 | const resourceType = request.resourceType().toLowerCase();
30 |
31 | if (!filterTypes || filterTypes.includes(resourceType)) {
32 | requests.push({
33 | id: request._requestId || requests.length,
34 | url: request.url(),
35 | method: request.method(),
36 | resourceType: resourceType,
37 | headers: request.headers(),
38 | postData: request.postData(),
39 | timestamp: Date.now()
40 | });
41 | }
42 | });
43 |
44 | // Monitor responses
45 | const responses = new Map();
46 | page.on('response', async (response) => {
47 | const request = response.request();
48 | const resourceType = request.resourceType().toLowerCase();
49 |
50 | if (!filterTypes || filterTypes.includes(resourceType)) {
51 | try {
52 | responses.set(request._requestId || request.url(), {
53 | status: response.status(),
54 | statusText: response.statusText(),
55 | headers: response.headers(),
56 | fromCache: response.fromCache(),
57 | timing: response.timing()
58 | });
59 | } catch (e) {
60 | // Ignore errors for some response types
61 | }
62 | }
63 | });
64 |
65 | // Navigate
66 | await page.goto(args.url, {
67 | waitUntil: args['wait-until'] || 'networkidle2'
68 | });
69 |
70 | // Merge requests with responses
71 | const combined = requests.map(req => ({
72 | ...req,
73 | response: responses.get(req.id) || responses.get(req.url) || null
74 | }));
75 |
76 | const result = {
77 | success: true,
78 | url: page.url(),
79 | requestCount: combined.length,
80 | requests: combined
81 | };
82 |
83 | if (args.output) {
84 | await fs.writeFile(args.output, JSON.stringify(result, null, 2));
85 | outputJSON({
86 | success: true,
87 | output: args.output,
88 | requestCount: combined.length
89 | });
90 | } else {
91 | outputJSON(result);
92 | }
93 |
94 | if (args.close !== 'false') {
95 | await closeBrowser();
96 | }
97 | } catch (error) {
98 | outputError(error);
99 | }
100 | }
101 |
102 | monitorNetwork();
103 |
--------------------------------------------------------------------------------
/.claude/skills/code-review/references/requesting-code-review.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: requesting-code-review
3 | description: Use when completing tasks, implementing major features, or before merging to verify work meets requirements - dispatches code-reviewer subagent to review implementation against plan or requirements before proceeding
4 | ---
5 |
6 | # Requesting Code Review
7 |
8 | Dispatch code-reviewer subagent to catch issues before they cascade.
9 |
10 | **Core principle:** Review early, review often.
11 |
12 | ## When to Request Review
13 |
14 | **Mandatory:**
15 | - After each task in subagent-driven development
16 | - After completing major feature
17 | - Before merge to main
18 |
19 | **Optional but valuable:**
20 | - When stuck (fresh perspective)
21 | - Before refactoring (baseline check)
22 | - After fixing complex bug
23 |
24 | ## How to Request
25 |
26 | **1. Get git SHAs:**
27 | ```bash
28 | BASE_SHA=$(git rev-parse HEAD~1) # or origin/main
29 | HEAD_SHA=$(git rev-parse HEAD)
30 | ```
31 |
32 | **2. Dispatch code-reviewer subagent:**
33 |
34 | Use Task tool with `code-reviewer` type, fill template at `code-reviewer.md`
35 |
36 | **Placeholders:**
37 | - `{WHAT_WAS_IMPLEMENTED}` - What you just built
38 | - `{PLAN_OR_REQUIREMENTS}` - What it should do
39 | - `{BASE_SHA}` - Starting commit
40 | - `{HEAD_SHA}` - Ending commit
41 | - `{DESCRIPTION}` - Brief summary
42 |
43 | **3. Act on feedback:**
44 | - Fix Critical issues immediately
45 | - Fix Important issues before proceeding
46 | - Note Minor issues for later
47 | - Push back if reviewer is wrong (with reasoning)
48 |
49 | ## Example
50 |
51 | ```
52 | [Just completed Task 2: Add verification function]
53 |
54 | You: Let me request code review before proceeding.
55 |
56 | BASE_SHA=$(git log --oneline | grep "Task 1" | head -1 | awk '{print $1}')
57 | HEAD_SHA=$(git rev-parse HEAD)
58 |
59 | [Dispatch code-reviewer subagent]
60 | WHAT_WAS_IMPLEMENTED: Verification and repair functions for conversation index
61 | PLAN_OR_REQUIREMENTS: Task 2 from docs/plans/deployment-plan.md
62 | BASE_SHA: a7981ec
63 | HEAD_SHA: 3df7661
64 | DESCRIPTION: Added verifyIndex() and repairIndex() with 4 issue types
65 |
66 | [Subagent returns]:
67 | Strengths: Clean architecture, real tests
68 | Issues:
69 | Important: Missing progress indicators
70 | Minor: Magic number (100) for reporting interval
71 | Assessment: Ready to proceed
72 |
73 | You: [Fix progress indicators]
74 | [Continue to Task 3]
75 | ```
76 |
77 | ## Integration with Workflows
78 |
79 | **Subagent-Driven Development:**
80 | - Review after EACH task
81 | - Catch issues before they compound
82 | - Fix before moving to next task
83 |
84 | **Executing Plans:**
85 | - Review after each batch (3 tasks)
86 | - Get feedback, apply, continue
87 |
88 | **Ad-Hoc Development:**
89 | - Review before merge
90 | - Review when stuck
91 |
92 | ## Red Flags
93 |
94 | **Never:**
95 | - Skip review because "it's simple"
96 | - Ignore Critical issues
97 | - Proceed with unfixed Important issues
98 | - Argue with valid technical feedback
99 |
100 | **If reviewer wrong:**
101 | - Push back with technical reasoning
102 | - Show code/tests that prove it works
103 | - Request clarification
104 |
105 | See template at: requesting-code-review/code-reviewer.md
--------------------------------------------------------------------------------
/.claude/skills/aesthetic/assets/design-story-template.md:
--------------------------------------------------------------------------------
1 | # Design Story: [Project Name]
2 |
3 | _Generated: [Date]_
4 |
5 | ## Project Context
6 |
7 | ### Purpose
8 | [What problem does this design solve?]
9 |
10 | ### Target Audience
11 | [Who is this design for?]
12 |
13 | ### Key Objectives
14 | 1. [Objective 1]
15 | 2. [Objective 2]
16 | 3. [Objective 3]
17 |
18 | ## Design Narrative
19 |
20 | ### Core Message
21 | [What story does this design tell?]
22 |
23 | ### Emotional Journey
24 | [What should users feel as they interact?]
25 |
26 | ### Visual Metaphor
27 | [What metaphor or theme unifies the design?]
28 |
29 | ## User Journey
30 |
31 | ### Entry Point
32 | **First Impression**: [What users see first]
33 | **Goal**: [What should users understand immediately]
34 | **Design Choices**: [How design supports this]
35 |
36 | ### Exploration Phase
37 | **User Actions**: [What users do next]
38 | **Design Response**: [How interface responds]
39 | **Micro-Interactions**: [Subtle feedback provided]
40 |
41 | ### Engagement Phase
42 | **Key Interactions**: [Main user activities]
43 | **Visual Feedback**: [How design reinforces actions]
44 | **Storytelling Elements**: [Narrative reinforcement]
45 |
46 | ### Peak Moment
47 | **Highlight**: [Most memorable interaction]
48 | **Implementation**: [How it's achieved technically]
49 | **Purpose**: [Why this moment matters]
50 |
51 | ## Thematic Elements
52 |
53 | ### Visual Theme
54 | [Description of consistent visual approach]
55 |
56 | ### Narrative Devices
57 | - **Parallax**: [How depth is used]
58 | - **Transitions**: [How sections connect]
59 | - **Progressive Disclosure**: [How information unfolds]
60 | - **Motion**: [How animation tells the story]
61 |
62 | ### Symbolism
63 | [Meaning behind design choices]
64 |
65 | ## Design Decisions
66 |
67 | ### Why This Style?
68 | [Rationale for design style choice]
69 |
70 | ### Why These Colors?
71 | [Reasoning behind color palette]
72 |
73 | ### Why This Layout?
74 | [Logic behind structure and flow]
75 |
76 | ### Why These Interactions?
77 | [Purpose of micro-interactions chosen]
78 |
79 | ## Technical Storytelling
80 |
81 | ### Performance Story
82 | [How fast loading enhances narrative]
83 |
84 | ### Responsive Story
85 | [How design adapts across devices]
86 |
87 | ### Accessibility Story
88 | [How inclusive design supports everyone]
89 |
90 | ## Evolution
91 |
92 | ### Initial Concepts
93 | [Early ideas explored]
94 |
95 | ### Key Iterations
96 | [Major changes and why]
97 |
98 | ### Final Direction
99 | [Ultimate design rationale]
100 |
101 | ## Inspiration
102 |
103 | ### Design References
104 | - [Source 1]: [What inspired]
105 | - [Source 2]: [What inspired]
106 | - [Source 3]: [What inspired]
107 |
108 | ### Cultural Context
109 | [Broader design trends considered]
110 |
111 | ## Impact
112 |
113 | ### Intended Effect
114 | [What users should take away]
115 |
116 | ### Success Metrics
117 | [How to measure if story resonates]
118 |
119 | ### Future Chapters
120 | [How design can evolve]
121 |
122 | ## Reflections
123 |
124 | ### What Worked
125 | [Successful narrative elements]
126 |
127 | ### What We Learned
128 | [Insights gained from process]
129 |
130 | ### What's Next
131 | [Future storytelling opportunities]
132 |
133 | ---
134 |
135 | **Remember**: Every design tells a story. Make it intentional, coherent, and meaningful.
136 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pdf/scripts/check_bounding_boxes.py:
--------------------------------------------------------------------------------
1 | from dataclasses import dataclass
2 | import json
3 | import sys
4 |
5 |
6 | # Script to check that the `fields.json` file that Claude creates when analyzing PDFs
7 | # does not have overlapping bounding boxes. See forms.md.
8 |
9 |
10 | @dataclass
11 | class RectAndField:
12 | rect: list[float]
13 | rect_type: str
14 | field: dict
15 |
16 |
17 | # Returns a list of messages that are printed to stdout for Claude to read.
18 | def get_bounding_box_messages(fields_json_stream) -> list[str]:
19 | messages = []
20 | fields = json.load(fields_json_stream)
21 | messages.append(f"Read {len(fields['form_fields'])} fields")
22 |
23 | def rects_intersect(r1, r2):
24 | disjoint_horizontal = r1[0] >= r2[2] or r1[2] <= r2[0]
25 | disjoint_vertical = r1[1] >= r2[3] or r1[3] <= r2[1]
26 | return not (disjoint_horizontal or disjoint_vertical)
27 |
28 | rects_and_fields = []
29 | for f in fields["form_fields"]:
30 | rects_and_fields.append(RectAndField(f["label_bounding_box"], "label", f))
31 | rects_and_fields.append(RectAndField(f["entry_bounding_box"], "entry", f))
32 |
33 | has_error = False
34 | for i, ri in enumerate(rects_and_fields):
35 | # This is O(N^2); we can optimize if it becomes a problem.
36 | for j in range(i + 1, len(rects_and_fields)):
37 | rj = rects_and_fields[j]
38 | if ri.field["page_number"] == rj.field["page_number"] and rects_intersect(ri.rect, rj.rect):
39 | has_error = True
40 | if ri.field is rj.field:
41 | messages.append(f"FAILURE: intersection between label and entry bounding boxes for `{ri.field['description']}` ({ri.rect}, {rj.rect})")
42 | else:
43 | messages.append(f"FAILURE: intersection between {ri.rect_type} bounding box for `{ri.field['description']}` ({ri.rect}) and {rj.rect_type} bounding box for `{rj.field['description']}` ({rj.rect})")
44 | if len(messages) >= 20:
45 | messages.append("Aborting further checks; fix bounding boxes and try again")
46 | return messages
47 | if ri.rect_type == "entry":
48 | if "entry_text" in ri.field:
49 | font_size = ri.field["entry_text"].get("font_size", 14)
50 | entry_height = ri.rect[3] - ri.rect[1]
51 | if entry_height < font_size:
52 | has_error = True
53 | messages.append(f"FAILURE: entry bounding box height ({entry_height}) for `{ri.field['description']}` is too short for the text content (font size: {font_size}). Increase the box height or decrease the font size.")
54 | if len(messages) >= 20:
55 | messages.append("Aborting further checks; fix bounding boxes and try again")
56 | return messages
57 |
58 | if not has_error:
59 | messages.append("SUCCESS: All bounding boxes are valid")
60 | return messages
61 |
62 | if __name__ == "__main__":
63 | if len(sys.argv) != 2:
64 | print("Usage: check_bounding_boxes.py [fields.json]")
65 | sys.exit(1)
66 | # Input file should be in the `fields.json` format described in forms.md.
67 | with open(sys.argv[1]) as f:
68 | messages = get_bounding_box_messages(f)
69 | for msg in messages:
70 | print(msg)
71 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/docx/ooxml/schemas/mce/mc.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/.claude/skills/document-skills/pptx/ooxml/schemas/mce/mc.xsd:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------