@bastani/atomic 0.5.11-0 → 0.5.12-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/adapt/SKILL.md +199 -0
- package/.agents/skills/advanced-evaluation/SKILL.md +402 -0
- package/.agents/skills/advanced-evaluation/references/bias-mitigation.md +288 -0
- package/.agents/skills/advanced-evaluation/references/evaluation-pipeline.md +43 -0
- package/.agents/skills/advanced-evaluation/references/implementation-patterns.md +315 -0
- package/.agents/skills/advanced-evaluation/references/metrics-guide.md +331 -0
- package/.agents/skills/advanced-evaluation/scripts/evaluation_example.py +392 -0
- package/.agents/skills/animate/SKILL.md +175 -0
- package/.agents/skills/arrange/SKILL.md +124 -0
- package/.agents/skills/audit/SKILL.md +148 -0
- package/.agents/skills/bdi-mental-states/SKILL.md +311 -0
- package/.agents/skills/bdi-mental-states/references/bdi-ontology-core.md +207 -0
- package/.agents/skills/bdi-mental-states/references/framework-integration.md +582 -0
- package/.agents/skills/bdi-mental-states/references/rdf-examples.md +315 -0
- package/.agents/skills/bdi-mental-states/references/sparql-competency.md +420 -0
- package/.agents/skills/bolder/SKILL.md +117 -0
- package/.agents/skills/bun/SKILL.md +199 -0
- package/.agents/skills/clarify/SKILL.md +183 -0
- package/.agents/skills/colorize/SKILL.md +143 -0
- package/.agents/skills/context-compression/SKILL.md +272 -0
- package/.agents/skills/context-compression/references/evaluation-framework.md +213 -0
- package/.agents/skills/context-compression/scripts/compression_evaluator.py +862 -0
- package/.agents/skills/context-compression/tests/test_compression_evaluator.py +56 -0
- package/.agents/skills/context-degradation/SKILL.md +206 -0
- package/.agents/skills/context-degradation/references/patterns.md +314 -0
- package/.agents/skills/context-degradation/scripts/degradation_detector.py +614 -0
- package/.agents/skills/context-fundamentals/SKILL.md +201 -0
- package/.agents/skills/context-fundamentals/references/context-components.md +283 -0
- package/.agents/skills/context-fundamentals/scripts/context_manager.py +533 -0
- package/.agents/skills/context-optimization/SKILL.md +195 -0
- package/.agents/skills/context-optimization/references/optimization_techniques.md +272 -0
- package/.agents/skills/context-optimization/scripts/compaction.py +562 -0
- package/.agents/skills/create-spec/SKILL.md +244 -0
- package/.agents/skills/critique/SKILL.md +225 -0
- package/.agents/skills/critique/reference/cognitive-load.md +106 -0
- package/.agents/skills/critique/reference/heuristics-scoring.md +234 -0
- package/.agents/skills/critique/reference/personas.md +178 -0
- package/.agents/skills/delight/SKILL.md +304 -0
- package/.agents/skills/distill/SKILL.md +122 -0
- package/.agents/skills/docx/LICENSE.txt +30 -0
- package/.agents/skills/docx/SKILL.md +590 -0
- package/.agents/skills/docx/scripts/__init__.py +1 -0
- package/.agents/skills/docx/scripts/accept_changes.py +135 -0
- package/.agents/skills/docx/scripts/comment.py +318 -0
- package/.agents/skills/docx/scripts/office/helpers/__init__.py +0 -0
- package/.agents/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/.agents/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.agents/skills/docx/scripts/office/pack.py +159 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.agents/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.agents/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.agents/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.agents/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.agents/skills/docx/scripts/office/soffice.py +183 -0
- package/.agents/skills/docx/scripts/office/unpack.py +132 -0
- package/.agents/skills/docx/scripts/office/validate.py +111 -0
- package/.agents/skills/docx/scripts/office/validators/__init__.py +15 -0
- package/.agents/skills/docx/scripts/office/validators/base.py +847 -0
- package/.agents/skills/docx/scripts/office/validators/docx.py +446 -0
- package/.agents/skills/docx/scripts/office/validators/pptx.py +275 -0
- package/.agents/skills/docx/scripts/office/validators/redlining.py +247 -0
- package/.agents/skills/docx/scripts/templates/comments.xml +3 -0
- package/.agents/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/.agents/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/.agents/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/.agents/skills/docx/scripts/templates/people.xml +3 -0
- package/.agents/skills/evaluation/SKILL.md +251 -0
- package/.agents/skills/evaluation/references/metrics.md +339 -0
- package/.agents/skills/evaluation/scripts/evaluator.py +627 -0
- package/.agents/skills/explain-code/SKILL.md +230 -0
- package/.agents/skills/extract/SKILL.md +91 -0
- package/.agents/skills/filesystem-context/SKILL.md +287 -0
- package/.agents/skills/filesystem-context/references/implementation-patterns.md +549 -0
- package/.agents/skills/filesystem-context/scripts/filesystem_context.py +425 -0
- package/.agents/skills/find-skills/SKILL.md +142 -0
- package/.agents/skills/frontend-design/SKILL.md +147 -0
- package/.agents/skills/frontend-design/reference/color-and-contrast.md +132 -0
- package/.agents/skills/frontend-design/reference/interaction-design.md +195 -0
- package/.agents/skills/frontend-design/reference/motion-design.md +99 -0
- package/.agents/skills/frontend-design/reference/responsive-design.md +114 -0
- package/.agents/skills/frontend-design/reference/spatial-design.md +100 -0
- package/.agents/skills/frontend-design/reference/typography.md +133 -0
- package/.agents/skills/frontend-design/reference/ux-writing.md +107 -0
- package/.agents/skills/gh-commit/SKILL.md +243 -0
- package/.agents/skills/gh-create-pr/SKILL.md +93 -0
- package/.agents/skills/harden/SKILL.md +354 -0
- package/.agents/skills/hosted-agents/SKILL.md +260 -0
- package/.agents/skills/hosted-agents/references/infrastructure-patterns.md +700 -0
- package/.agents/skills/hosted-agents/scripts/sandbox_manager.py +590 -0
- package/.agents/skills/impeccable/SKILL.md +365 -0
- package/.agents/skills/impeccable/reference/color-and-contrast.md +105 -0
- package/.agents/skills/impeccable/reference/craft.md +70 -0
- package/.agents/skills/impeccable/reference/extract.md +70 -0
- package/.agents/skills/impeccable/reference/interaction-design.md +195 -0
- package/.agents/skills/impeccable/reference/motion-design.md +99 -0
- package/.agents/skills/impeccable/reference/responsive-design.md +114 -0
- package/.agents/skills/impeccable/reference/spatial-design.md +100 -0
- package/.agents/skills/impeccable/reference/typography.md +142 -0
- package/.agents/skills/impeccable/reference/ux-writing.md +107 -0
- package/.agents/skills/impeccable/scripts/cleanup-deprecated.mjs +214 -0
- package/.agents/skills/init/SKILL.md +138 -0
- package/.agents/skills/layout/SKILL.md +125 -0
- package/.agents/skills/liteparse/SKILL.md +222 -0
- package/.agents/skills/memory-systems/SKILL.md +219 -0
- package/.agents/skills/memory-systems/references/implementation.md +551 -0
- package/.agents/skills/memory-systems/scripts/memory_store.py +616 -0
- package/.agents/skills/multi-agent-patterns/SKILL.md +257 -0
- package/.agents/skills/multi-agent-patterns/references/frameworks.md +433 -0
- package/.agents/skills/multi-agent-patterns/scripts/coordination.py +613 -0
- package/.agents/skills/normalize/SKILL.md +70 -0
- package/.agents/skills/onboard/SKILL.md +245 -0
- package/.agents/skills/opentui/SKILL.md +201 -0
- package/.agents/skills/opentui/references/animation/REFERENCE.md +431 -0
- package/.agents/skills/opentui/references/components/REFERENCE.md +144 -0
- package/.agents/skills/opentui/references/components/code-diff.md +672 -0
- package/.agents/skills/opentui/references/components/containers.md +417 -0
- package/.agents/skills/opentui/references/components/inputs.md +531 -0
- package/.agents/skills/opentui/references/components/text-display.md +386 -0
- package/.agents/skills/opentui/references/core/REFERENCE.md +145 -0
- package/.agents/skills/opentui/references/core/api.md +543 -0
- package/.agents/skills/opentui/references/core/configuration.md +168 -0
- package/.agents/skills/opentui/references/core/gotchas.md +393 -0
- package/.agents/skills/opentui/references/core/patterns.md +449 -0
- package/.agents/skills/opentui/references/keyboard/REFERENCE.md +617 -0
- package/.agents/skills/opentui/references/layout/REFERENCE.md +337 -0
- package/.agents/skills/opentui/references/layout/patterns.md +444 -0
- package/.agents/skills/opentui/references/react/REFERENCE.md +174 -0
- package/.agents/skills/opentui/references/react/api.md +436 -0
- package/.agents/skills/opentui/references/react/configuration.md +302 -0
- package/.agents/skills/opentui/references/react/gotchas.md +443 -0
- package/.agents/skills/opentui/references/react/patterns.md +501 -0
- package/.agents/skills/opentui/references/solid/REFERENCE.md +201 -0
- package/.agents/skills/opentui/references/solid/api.md +564 -0
- package/.agents/skills/opentui/references/solid/configuration.md +316 -0
- package/.agents/skills/opentui/references/solid/gotchas.md +427 -0
- package/.agents/skills/opentui/references/solid/patterns.md +560 -0
- package/.agents/skills/opentui/references/testing/REFERENCE.md +614 -0
- package/.agents/skills/optimize/SKILL.md +266 -0
- package/.agents/skills/overdrive/SKILL.md +142 -0
- package/.agents/skills/pdf/LICENSE.txt +30 -0
- package/.agents/skills/pdf/SKILL.md +314 -0
- package/.agents/skills/pdf/forms.md +294 -0
- package/.agents/skills/pdf/reference.md +612 -0
- package/.agents/skills/pdf/scripts/check_bounding_boxes.py +65 -0
- package/.agents/skills/pdf/scripts/check_fillable_fields.py +11 -0
- package/.agents/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/.agents/skills/pdf/scripts/create_validation_image.py +37 -0
- package/.agents/skills/pdf/scripts/extract_form_field_info.py +122 -0
- package/.agents/skills/pdf/scripts/extract_form_structure.py +115 -0
- package/.agents/skills/pdf/scripts/fill_fillable_fields.py +98 -0
- package/.agents/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/.agents/skills/playwright-cli/SKILL.md +344 -0
- package/.agents/skills/playwright-cli/references/element-attributes.md +23 -0
- package/.agents/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/.agents/skills/playwright-cli/references/request-mocking.md +87 -0
- package/.agents/skills/playwright-cli/references/running-code.md +231 -0
- package/.agents/skills/playwright-cli/references/session-management.md +169 -0
- package/.agents/skills/playwright-cli/references/storage-state.md +275 -0
- package/.agents/skills/playwright-cli/references/test-generation.md +88 -0
- package/.agents/skills/playwright-cli/references/tracing.md +139 -0
- package/.agents/skills/playwright-cli/references/video-recording.md +143 -0
- package/.agents/skills/polish/SKILL.md +224 -0
- package/.agents/skills/pptx/LICENSE.txt +30 -0
- package/.agents/skills/pptx/SKILL.md +232 -0
- package/.agents/skills/pptx/editing.md +205 -0
- package/.agents/skills/pptx/pptxgenjs.md +420 -0
- package/.agents/skills/pptx/scripts/__init__.py +0 -0
- package/.agents/skills/pptx/scripts/add_slide.py +195 -0
- package/.agents/skills/pptx/scripts/clean.py +286 -0
- package/.agents/skills/pptx/scripts/office/helpers/__init__.py +0 -0
- package/.agents/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/.agents/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.agents/skills/pptx/scripts/office/pack.py +159 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.agents/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.agents/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.agents/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.agents/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.agents/skills/pptx/scripts/office/soffice.py +183 -0
- package/.agents/skills/pptx/scripts/office/unpack.py +132 -0
- package/.agents/skills/pptx/scripts/office/validate.py +111 -0
- package/.agents/skills/pptx/scripts/office/validators/__init__.py +15 -0
- package/.agents/skills/pptx/scripts/office/validators/base.py +847 -0
- package/.agents/skills/pptx/scripts/office/validators/docx.py +446 -0
- package/.agents/skills/pptx/scripts/office/validators/pptx.py +275 -0
- package/.agents/skills/pptx/scripts/office/validators/redlining.py +247 -0
- package/.agents/skills/pptx/scripts/thumbnail.py +289 -0
- package/.agents/skills/project-development/SKILL.md +291 -0
- package/.agents/skills/project-development/references/case-studies.md +388 -0
- package/.agents/skills/project-development/references/pipeline-patterns.md +610 -0
- package/.agents/skills/project-development/scripts/pipeline_template.py +796 -0
- package/.agents/skills/prompt-engineer/SKILL.md +263 -0
- package/.agents/skills/prompt-engineer/references/advanced_patterns.md +271 -0
- package/.agents/skills/prompt-engineer/references/core_prompting.md +137 -0
- package/.agents/skills/prompt-engineer/references/quality_improvement.md +193 -0
- package/.agents/skills/quieter/SKILL.md +103 -0
- package/.agents/skills/research-codebase/SKILL.md +227 -0
- package/.agents/skills/shape/SKILL.md +96 -0
- package/.agents/skills/skill-creator/LICENSE.txt +202 -0
- package/.agents/skills/skill-creator/SKILL.md +485 -0
- package/.agents/skills/skill-creator/agents/analyzer.md +274 -0
- package/.agents/skills/skill-creator/agents/comparator.md +202 -0
- package/.agents/skills/skill-creator/agents/grader.md +223 -0
- package/.agents/skills/skill-creator/assets/eval_review.html +146 -0
- package/.agents/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/.agents/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/.agents/skills/skill-creator/references/schemas.md +430 -0
- package/.agents/skills/skill-creator/scripts/__init__.py +0 -0
- package/.agents/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/.agents/skills/skill-creator/scripts/generate_report.py +326 -0
- package/.agents/skills/skill-creator/scripts/improve_description.py +247 -0
- package/.agents/skills/skill-creator/scripts/package_skill.py +136 -0
- package/.agents/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/.agents/skills/skill-creator/scripts/run_eval.py +310 -0
- package/.agents/skills/skill-creator/scripts/run_loop.py +328 -0
- package/.agents/skills/skill-creator/scripts/utils.py +47 -0
- package/.agents/skills/sl-commit/SKILL.md +51 -0
- package/.agents/skills/sl-submit-diff/SKILL.md +55 -0
- package/.agents/skills/teach-impeccable/SKILL.md +71 -0
- package/.agents/skills/test-driven-development/SKILL.md +371 -0
- package/.agents/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/.agents/skills/tool-design/SKILL.md +271 -0
- package/.agents/skills/tool-design/references/architectural_reduction.md +210 -0
- package/.agents/skills/tool-design/references/best_practices.md +176 -0
- package/.agents/skills/tool-design/scripts/description_generator.py +528 -0
- package/.agents/skills/typescript-advanced-types/SKILL.md +719 -0
- package/.agents/skills/typescript-expert/SKILL.md +428 -0
- package/.agents/skills/typescript-expert/references/tsconfig-strict.json +92 -0
- package/.agents/skills/typescript-expert/references/typescript-cheatsheet.md +383 -0
- package/.agents/skills/typescript-expert/references/utility-types.ts +335 -0
- package/.agents/skills/typescript-expert/scripts/ts_diagnostic.py +203 -0
- package/.agents/skills/typescript-react-reviewer/SKILL.md +200 -0
- package/.agents/skills/typescript-react-reviewer/references/antipatterns.md +510 -0
- package/.agents/skills/typescript-react-reviewer/references/checklist.md +267 -0
- package/.agents/skills/typescript-react-reviewer/references/react19-patterns.md +305 -0
- package/.agents/skills/typeset/SKILL.md +116 -0
- package/.agents/skills/workflow-creator/SKILL.md +337 -0
- package/.agents/skills/workflow-creator/references/agent-sessions.md +789 -0
- package/.agents/skills/workflow-creator/references/computation-and-validation.md +224 -0
- package/.agents/skills/workflow-creator/references/control-flow.md +450 -0
- package/.agents/skills/workflow-creator/references/discovery-and-verification.md +156 -0
- package/.agents/skills/workflow-creator/references/failure-modes.md +732 -0
- package/.agents/skills/workflow-creator/references/getting-started.md +289 -0
- package/.agents/skills/workflow-creator/references/session-config.md +355 -0
- package/.agents/skills/workflow-creator/references/state-and-data-flow.md +374 -0
- package/.agents/skills/workflow-creator/references/user-input.md +206 -0
- package/.agents/skills/workflow-creator/references/workflow-inputs.md +274 -0
- package/.agents/skills/xlsx/LICENSE.txt +30 -0
- package/.agents/skills/xlsx/SKILL.md +292 -0
- package/.agents/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/.agents/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/.agents/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/.agents/skills/xlsx/scripts/office/pack.py +159 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/.agents/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/.agents/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/.agents/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/.agents/skills/xlsx/scripts/office/soffice.py +183 -0
- package/.agents/skills/xlsx/scripts/office/unpack.py +132 -0
- package/.agents/skills/xlsx/scripts/office/validate.py +111 -0
- package/.agents/skills/xlsx/scripts/office/validators/__init__.py +15 -0
- package/.agents/skills/xlsx/scripts/office/validators/base.py +847 -0
- package/.agents/skills/xlsx/scripts/office/validators/docx.py +446 -0
- package/.agents/skills/xlsx/scripts/office/validators/pptx.py +275 -0
- package/.agents/skills/xlsx/scripts/office/validators/redlining.py +247 -0
- package/.agents/skills/xlsx/scripts/recalc.py +184 -0
- package/.claude/agents/reviewer.md +1 -0
- package/.github/agents/reviewer.md +1 -0
- package/.opencode/agents/reviewer.md +1 -0
- package/README.md +274 -169
- package/package.json +6 -7
- package/src/commands/cli/init/index.ts +2 -2
- package/src/commands/cli/init/scm.ts +7 -8
- package/src/commands/cli/workflow-command.test.ts +74 -0
- package/src/commands/cli/workflow.ts +7 -2
- package/src/scripts/bundle-configs.ts +128 -0
- package/src/sdk/components/compact-switcher.tsx +1 -1
- package/src/sdk/components/orchestrator-panel-store.ts +13 -0
- package/src/sdk/components/orchestrator-panel.tsx +10 -0
- package/src/sdk/components/statusline.tsx +13 -1
- package/src/sdk/providers/claude.ts +42 -0
- package/src/sdk/runtime/executor.ts +111 -32
- package/src/sdk/types.ts +7 -0
- package/src/sdk/workflows/builtin/ralph/claude/index.ts +132 -76
- package/src/sdk/workflows/builtin/ralph/copilot/index.ts +129 -71
- package/src/sdk/workflows/builtin/ralph/helpers/git.ts +184 -17
- package/src/sdk/workflows/builtin/ralph/helpers/prompts.ts +463 -79
- package/src/sdk/workflows/builtin/ralph/opencode/index.ts +124 -80
- package/src/services/system/auto-sync.ts +31 -51
- package/src/services/system/skills.ts +56 -60
- package/dist/lib/path-root-guard.d.ts +0 -4
- package/dist/lib/path-root-guard.d.ts.map +0 -1
- package/dist/sdk/components/color-utils.d.ts +0 -4
- package/dist/sdk/components/color-utils.d.ts.map +0 -1
- package/dist/sdk/components/compact-switcher.d.ts +0 -10
- package/dist/sdk/components/compact-switcher.d.ts.map +0 -1
- package/dist/sdk/components/connectors.d.ts +0 -15
- package/dist/sdk/components/connectors.d.ts.map +0 -1
- package/dist/sdk/components/connectors.test.d.ts +0 -2
- package/dist/sdk/components/connectors.test.d.ts.map +0 -1
- package/dist/sdk/components/edge.d.ts +0 -4
- package/dist/sdk/components/edge.d.ts.map +0 -1
- package/dist/sdk/components/error-boundary.d.ts +0 -23
- package/dist/sdk/components/error-boundary.d.ts.map +0 -1
- package/dist/sdk/components/graph-theme.d.ts +0 -17
- package/dist/sdk/components/graph-theme.d.ts.map +0 -1
- package/dist/sdk/components/header.d.ts +0 -3
- package/dist/sdk/components/header.d.ts.map +0 -1
- package/dist/sdk/components/hooks.d.ts +0 -15
- package/dist/sdk/components/hooks.d.ts.map +0 -1
- package/dist/sdk/components/layout.d.ts +0 -27
- package/dist/sdk/components/layout.d.ts.map +0 -1
- package/dist/sdk/components/layout.test.d.ts +0 -2
- package/dist/sdk/components/layout.test.d.ts.map +0 -1
- package/dist/sdk/components/node-card.d.ts +0 -10
- package/dist/sdk/components/node-card.d.ts.map +0 -1
- package/dist/sdk/components/orchestrator-panel-contexts.d.ts +0 -16
- package/dist/sdk/components/orchestrator-panel-contexts.d.ts.map +0 -1
- package/dist/sdk/components/orchestrator-panel-store.d.ts +0 -46
- package/dist/sdk/components/orchestrator-panel-store.d.ts.map +0 -1
- package/dist/sdk/components/orchestrator-panel-store.test.d.ts +0 -2
- package/dist/sdk/components/orchestrator-panel-store.test.d.ts.map +0 -1
- package/dist/sdk/components/orchestrator-panel-types.d.ts +0 -18
- package/dist/sdk/components/orchestrator-panel-types.d.ts.map +0 -1
- package/dist/sdk/components/orchestrator-panel.d.ts +0 -52
- package/dist/sdk/components/orchestrator-panel.d.ts.map +0 -1
- package/dist/sdk/components/session-graph-panel.d.ts +0 -7
- package/dist/sdk/components/session-graph-panel.d.ts.map +0 -1
- package/dist/sdk/components/status-helpers.d.ts +0 -6
- package/dist/sdk/components/status-helpers.d.ts.map +0 -1
- package/dist/sdk/components/statusline.d.ts +0 -7
- package/dist/sdk/components/statusline.d.ts.map +0 -1
- package/dist/sdk/components/workflow-picker-panel.d.ts +0 -123
- package/dist/sdk/components/workflow-picker-panel.d.ts.map +0 -1
- package/dist/sdk/define-workflow.d.ts +0 -78
- package/dist/sdk/define-workflow.d.ts.map +0 -1
- package/dist/sdk/define-workflow.test.d.ts +0 -2
- package/dist/sdk/define-workflow.test.d.ts.map +0 -1
- package/dist/sdk/errors.d.ts +0 -24
- package/dist/sdk/errors.d.ts.map +0 -1
- package/dist/sdk/errors.test.d.ts +0 -2
- package/dist/sdk/errors.test.d.ts.map +0 -1
- package/dist/sdk/index.d.ts +0 -13
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/providers/claude.d.ts +0 -170
- package/dist/sdk/providers/claude.d.ts.map +0 -1
- package/dist/sdk/providers/copilot.d.ts +0 -11
- package/dist/sdk/providers/copilot.d.ts.map +0 -1
- package/dist/sdk/providers/opencode.d.ts +0 -11
- package/dist/sdk/providers/opencode.d.ts.map +0 -1
- package/dist/sdk/runtime/discovery.d.ts +0 -86
- package/dist/sdk/runtime/discovery.d.ts.map +0 -1
- package/dist/sdk/runtime/executor-entry.d.ts +0 -11
- package/dist/sdk/runtime/executor-entry.d.ts.map +0 -1
- package/dist/sdk/runtime/executor.d.ts +0 -72
- package/dist/sdk/runtime/executor.d.ts.map +0 -1
- package/dist/sdk/runtime/executor.test.d.ts +0 -2
- package/dist/sdk/runtime/executor.test.d.ts.map +0 -1
- package/dist/sdk/runtime/graph-inference.d.ts +0 -35
- package/dist/sdk/runtime/graph-inference.d.ts.map +0 -1
- package/dist/sdk/runtime/loader.d.ts +0 -70
- package/dist/sdk/runtime/loader.d.ts.map +0 -1
- package/dist/sdk/runtime/panel.d.ts +0 -9
- package/dist/sdk/runtime/panel.d.ts.map +0 -1
- package/dist/sdk/runtime/theme.d.ts +0 -28
- package/dist/sdk/runtime/theme.d.ts.map +0 -1
- package/dist/sdk/runtime/tmux.d.ts +0 -297
- package/dist/sdk/runtime/tmux.d.ts.map +0 -1
- package/dist/sdk/types.d.ts +0 -295
- package/dist/sdk/types.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts +0 -62
- package/dist/sdk/workflows/builtin/deep-research-codebase/claude/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts +0 -46
- package/dist/sdk/workflows/builtin/deep-research-codebase/copilot/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts +0 -26
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/heuristic.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts +0 -92
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/prompts.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts +0 -57
- package/dist/sdk/workflows/builtin/deep-research-codebase/helpers/scout.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts +0 -49
- package/dist/sdk/workflows/builtin/deep-research-codebase/opencode/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts +0 -14
- package/dist/sdk/workflows/builtin/ralph/claude/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts +0 -14
- package/dist/sdk/workflows/builtin/ralph/copilot/index.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts +0 -17
- package/dist/sdk/workflows/builtin/ralph/helpers/git.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts +0 -119
- package/dist/sdk/workflows/builtin/ralph/helpers/prompts.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts +0 -20
- package/dist/sdk/workflows/builtin/ralph/helpers/review.d.ts.map +0 -1
- package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts +0 -14
- package/dist/sdk/workflows/builtin/ralph/opencode/index.d.ts.map +0 -1
- package/dist/sdk/workflows/index.d.ts +0 -24
- package/dist/sdk/workflows/index.d.ts.map +0 -1
- package/dist/services/config/definitions.d.ts +0 -85
- package/dist/services/config/definitions.d.ts.map +0 -1
- package/dist/services/system/copy.d.ts +0 -77
- package/dist/services/system/copy.d.ts.map +0 -1
- package/dist/services/system/detect.d.ts +0 -75
- package/dist/services/system/detect.d.ts.map +0 -1
- package/tsconfig.json +0 -33
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# UX Writing
|
|
2
|
+
|
|
3
|
+
## The Button Label Problem
|
|
4
|
+
|
|
5
|
+
**Never use "OK", "Submit", or "Yes/No".** These are lazy and ambiguous. Use specific verb + object patterns:
|
|
6
|
+
|
|
7
|
+
| Bad | Good | Why |
|
|
8
|
+
|-----|------|-----|
|
|
9
|
+
| OK | Save changes | Says what will happen |
|
|
10
|
+
| Submit | Create account | Outcome-focused |
|
|
11
|
+
| Yes | Delete message | Confirms the action |
|
|
12
|
+
| Cancel | Keep editing | Clarifies what "cancel" means |
|
|
13
|
+
| Click here | Download PDF | Describes the destination |
|
|
14
|
+
|
|
15
|
+
**For destructive actions**, name the destruction:
|
|
16
|
+
- "Delete" not "Remove" (delete is permanent, remove implies recoverable)
|
|
17
|
+
- "Delete 5 items" not "Delete selected" (show the count)
|
|
18
|
+
|
|
19
|
+
## Error Messages: The Formula
|
|
20
|
+
|
|
21
|
+
Every error message should answer: (1) What happened? (2) Why? (3) How to fix it? Example: "Email address isn't valid. Please include an @ symbol." not "Invalid input".
|
|
22
|
+
|
|
23
|
+
### Error Message Templates
|
|
24
|
+
|
|
25
|
+
| Situation | Template |
|
|
26
|
+
|-----------|----------|
|
|
27
|
+
| **Format error** | "[Field] needs to be [format]. Example: [example]" |
|
|
28
|
+
| **Missing required** | "Please enter [what's missing]" |
|
|
29
|
+
| **Permission denied** | "You don't have access to [thing]. [What to do instead]" |
|
|
30
|
+
| **Network error** | "We couldn't reach [thing]. Check your connection and [action]." |
|
|
31
|
+
| **Server error** | "Something went wrong on our end. We're looking into it. [Alternative action]" |
|
|
32
|
+
|
|
33
|
+
### Don't Blame the User
|
|
34
|
+
|
|
35
|
+
Reframe errors: "Please enter a date in MM/DD/YYYY format" not "You entered an invalid date".
|
|
36
|
+
|
|
37
|
+
## Empty States Are Opportunities
|
|
38
|
+
|
|
39
|
+
Empty states are onboarding moments: (1) Acknowledge briefly, (2) Explain the value of filling it, (3) Provide a clear action. "No projects yet. Create your first one to get started." not just "No items".
|
|
40
|
+
|
|
41
|
+
## Voice vs Tone
|
|
42
|
+
|
|
43
|
+
**Voice** is your brand's personality—consistent everywhere.
|
|
44
|
+
**Tone** adapts to the moment.
|
|
45
|
+
|
|
46
|
+
| Moment | Tone Shift |
|
|
47
|
+
|--------|------------|
|
|
48
|
+
| Success | Celebratory, brief: "Done! Your changes are live." |
|
|
49
|
+
| Error | Empathetic, helpful: "That didn't work. Here's what to try..." |
|
|
50
|
+
| Loading | Reassuring: "Saving your work..." |
|
|
51
|
+
| Destructive confirm | Serious, clear: "Delete this project? This can't be undone." |
|
|
52
|
+
|
|
53
|
+
**Never use humor for errors.** Users are already frustrated. Be helpful, not cute.
|
|
54
|
+
|
|
55
|
+
## Writing for Accessibility
|
|
56
|
+
|
|
57
|
+
**Link text** must have standalone meaning—"View pricing plans" not "Click here". **Alt text** describes information, not the image—"Revenue increased 40% in Q4" not "Chart". Use `alt=""` for decorative images. **Icon buttons** need `aria-label` for screen reader context.
|
|
58
|
+
|
|
59
|
+
## Writing for Translation
|
|
60
|
+
|
|
61
|
+
### Plan for Expansion
|
|
62
|
+
|
|
63
|
+
German text is ~30% longer than English. Allocate space:
|
|
64
|
+
|
|
65
|
+
| Language | Expansion |
|
|
66
|
+
|----------|-----------|
|
|
67
|
+
| German | +30% |
|
|
68
|
+
| French | +20% |
|
|
69
|
+
| Finnish | +30-40% |
|
|
70
|
+
| Chinese | -30% (fewer chars, but same width) |
|
|
71
|
+
|
|
72
|
+
### Translation-Friendly Patterns
|
|
73
|
+
|
|
74
|
+
Keep numbers separate ("New messages: 3" not "You have 3 new messages"). Use full sentences as single strings (word order varies by language). Avoid abbreviations ("5 minutes ago" not "5 mins ago"). Give translators context about where strings appear.
|
|
75
|
+
|
|
76
|
+
## Consistency: The Terminology Problem
|
|
77
|
+
|
|
78
|
+
Pick one term and stick with it:
|
|
79
|
+
|
|
80
|
+
| Inconsistent | Consistent |
|
|
81
|
+
|--------------|------------|
|
|
82
|
+
| Delete / Remove / Trash | Delete |
|
|
83
|
+
| Settings / Preferences / Options | Settings |
|
|
84
|
+
| Sign in / Log in / Enter | Sign in |
|
|
85
|
+
| Create / Add / New | Create |
|
|
86
|
+
|
|
87
|
+
Build a terminology glossary and enforce it. Variety creates confusion.
|
|
88
|
+
|
|
89
|
+
## Avoid Redundant Copy
|
|
90
|
+
|
|
91
|
+
If the heading explains it, the intro is redundant. If the button is clear, don't explain it again. Say it once, say it well.
|
|
92
|
+
|
|
93
|
+
## Loading States
|
|
94
|
+
|
|
95
|
+
Be specific: "Saving your draft..." not "Loading...". For long waits, set expectations ("This usually takes 30 seconds") or show progress.
|
|
96
|
+
|
|
97
|
+
## Confirmation Dialogs: Use Sparingly
|
|
98
|
+
|
|
99
|
+
Most confirmation dialogs are design failures—consider undo instead. When you must confirm: name the action, explain consequences, use specific button labels ("Delete project" / "Keep project", not "Yes" / "No").
|
|
100
|
+
|
|
101
|
+
## Form Instructions
|
|
102
|
+
|
|
103
|
+
Show format with placeholders, not instructions. For non-obvious fields, explain why you're asking.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
**Avoid**: Jargon without explanation. Blaming users ("You made an error" → "This field is required"). Vague errors ("Something went wrong"). Varying terminology for variety. Humor for errors.
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Cleans up deprecated Impeccable skill files, symlinks, and
|
|
4
|
+
* skills-lock.json entries left over from previous versions.
|
|
5
|
+
*
|
|
6
|
+
* Safe to run repeatedly -- it is a no-op when nothing needs cleaning.
|
|
7
|
+
*
|
|
8
|
+
* Usage (from the project root):
|
|
9
|
+
* node {{scripts_path}}/cleanup-deprecated.mjs
|
|
10
|
+
*
|
|
11
|
+
* What it does:
|
|
12
|
+
* 1. Finds every harness-specific skills directory (.claude/skills,
|
|
13
|
+
* .cursor/skills, .agents/skills, etc.).
|
|
14
|
+
* 2. For each deprecated skill name (with and without i- prefix),
|
|
15
|
+
* checks if the directory exists and its SKILL.md mentions
|
|
16
|
+
* "impeccable" (to avoid deleting unrelated user skills).
|
|
17
|
+
* 3. Deletes confirmed matches (files, directories, or symlinks).
|
|
18
|
+
* 4. Removes the corresponding entries from skills-lock.json.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { existsSync, readFileSync, writeFileSync, rmSync, readdirSync, statSync, lstatSync, unlinkSync } from 'node:fs';
|
|
22
|
+
import { join, resolve } from 'node:path';
|
|
23
|
+
|
|
24
|
+
// Skills that were renamed, merged, or folded in v2.0 and v2.1.
|
|
25
|
+
const DEPRECATED_NAMES = [
|
|
26
|
+
'frontend-design', // renamed to impeccable (v2.0)
|
|
27
|
+
'teach-impeccable', // folded into /impeccable teach (v2.0)
|
|
28
|
+
'arrange', // renamed to layout (v2.1)
|
|
29
|
+
'normalize', // merged into polish (v2.1)
|
|
30
|
+
'onboard', // merged into harden (v2.1)
|
|
31
|
+
'extract', // merged into /impeccable extract (v2.1)
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
// All known harness directories that may contain a skills/ subfolder.
|
|
35
|
+
const HARNESS_DIRS = [
|
|
36
|
+
'.claude', '.cursor', '.gemini', '.codex', '.agents',
|
|
37
|
+
'.trae', '.trae-cn', '.pi', '.opencode', '.kiro', '.rovodev',
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Walk up from startDir until we find a directory that looks like a
|
|
42
|
+
* project root (has package.json, .git, or skills-lock.json).
|
|
43
|
+
*/
|
|
44
|
+
export function findProjectRoot(startDir = process.cwd()) {
|
|
45
|
+
let dir = resolve(startDir);
|
|
46
|
+
const { root } = { root: '/' };
|
|
47
|
+
while (dir !== root) {
|
|
48
|
+
if (
|
|
49
|
+
existsSync(join(dir, 'package.json')) ||
|
|
50
|
+
existsSync(join(dir, '.git')) ||
|
|
51
|
+
existsSync(join(dir, 'skills-lock.json'))
|
|
52
|
+
) {
|
|
53
|
+
return dir;
|
|
54
|
+
}
|
|
55
|
+
const parent = resolve(dir, '..');
|
|
56
|
+
if (parent === dir) break;
|
|
57
|
+
dir = parent;
|
|
58
|
+
}
|
|
59
|
+
return resolve(startDir);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Check whether a skill directory belongs to Impeccable by reading its
|
|
64
|
+
* SKILL.md and looking for the word "impeccable" (case-insensitive).
|
|
65
|
+
* Returns false for non-existent paths or skills that don't match.
|
|
66
|
+
*/
|
|
67
|
+
export function isImpeccableSkill(skillDir) {
|
|
68
|
+
const skillMd = join(skillDir, 'SKILL.md');
|
|
69
|
+
if (!existsSync(skillMd)) return false;
|
|
70
|
+
try {
|
|
71
|
+
const content = readFileSync(skillMd, 'utf-8');
|
|
72
|
+
return /impeccable/i.test(content);
|
|
73
|
+
} catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Build the full list of names to check: each deprecated name, plus
|
|
80
|
+
* its i-prefixed variant.
|
|
81
|
+
*/
|
|
82
|
+
export function buildTargetNames() {
|
|
83
|
+
const names = [];
|
|
84
|
+
for (const name of DEPRECATED_NAMES) {
|
|
85
|
+
names.push(name);
|
|
86
|
+
names.push(`i-${name}`);
|
|
87
|
+
}
|
|
88
|
+
return names;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Find every skills directory across all harness dirs in the project.
|
|
93
|
+
* Returns absolute paths that exist on disk.
|
|
94
|
+
*/
|
|
95
|
+
export function findSkillsDirs(projectRoot) {
|
|
96
|
+
const dirs = [];
|
|
97
|
+
for (const harness of HARNESS_DIRS) {
|
|
98
|
+
const candidate = join(projectRoot, harness, 'skills');
|
|
99
|
+
if (existsSync(candidate)) {
|
|
100
|
+
dirs.push(candidate);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return dirs;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Remove deprecated skill directories/symlinks from all harness dirs.
|
|
108
|
+
* Returns an array of paths that were deleted.
|
|
109
|
+
*/
|
|
110
|
+
export function removeDeprecatedSkills(projectRoot) {
|
|
111
|
+
const targets = buildTargetNames();
|
|
112
|
+
const skillsDirs = findSkillsDirs(projectRoot);
|
|
113
|
+
const deleted = [];
|
|
114
|
+
|
|
115
|
+
for (const skillsDir of skillsDirs) {
|
|
116
|
+
for (const name of targets) {
|
|
117
|
+
const skillPath = join(skillsDir, name);
|
|
118
|
+
|
|
119
|
+
// Use lstat to detect symlinks (existsSync follows symlinks and
|
|
120
|
+
// returns false for dangling ones).
|
|
121
|
+
let stat;
|
|
122
|
+
try {
|
|
123
|
+
stat = lstatSync(skillPath);
|
|
124
|
+
} catch {
|
|
125
|
+
continue; // does not exist at all
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (stat.isSymbolicLink()) {
|
|
129
|
+
// Symlink: check the target if it's alive, otherwise treat
|
|
130
|
+
// dangling symlinks to deprecated names as safe to remove.
|
|
131
|
+
const targetAlive = existsSync(skillPath);
|
|
132
|
+
const isMatch = targetAlive ? isImpeccableSkill(skillPath) : true;
|
|
133
|
+
if (isMatch) {
|
|
134
|
+
unlinkSync(skillPath);
|
|
135
|
+
deleted.push(skillPath);
|
|
136
|
+
}
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Regular directory -- verify it belongs to impeccable
|
|
141
|
+
if (isImpeccableSkill(skillPath)) {
|
|
142
|
+
rmSync(skillPath, { recursive: true, force: true });
|
|
143
|
+
deleted.push(skillPath);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return deleted;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Remove deprecated entries from skills-lock.json.
|
|
153
|
+
* Only removes entries whose source is "pbakaus/impeccable".
|
|
154
|
+
* Returns the list of removed skill names.
|
|
155
|
+
*/
|
|
156
|
+
export function cleanSkillsLock(projectRoot) {
|
|
157
|
+
const lockPath = join(projectRoot, 'skills-lock.json');
|
|
158
|
+
if (!existsSync(lockPath)) return [];
|
|
159
|
+
|
|
160
|
+
let lock;
|
|
161
|
+
try {
|
|
162
|
+
lock = JSON.parse(readFileSync(lockPath, 'utf-8'));
|
|
163
|
+
} catch {
|
|
164
|
+
return [];
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (!lock.skills || typeof lock.skills !== 'object') return [];
|
|
168
|
+
|
|
169
|
+
const targets = buildTargetNames();
|
|
170
|
+
const removed = [];
|
|
171
|
+
|
|
172
|
+
for (const name of targets) {
|
|
173
|
+
const entry = lock.skills[name];
|
|
174
|
+
if (!entry) continue;
|
|
175
|
+
// Only remove if it belongs to impeccable
|
|
176
|
+
if (entry.source === 'pbakaus/impeccable') {
|
|
177
|
+
delete lock.skills[name];
|
|
178
|
+
removed.push(name);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (removed.length > 0) {
|
|
183
|
+
writeFileSync(lockPath, JSON.stringify(lock, null, 2) + '\n', 'utf-8');
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return removed;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Run the full cleanup. Returns a summary object.
|
|
191
|
+
*/
|
|
192
|
+
export function cleanup(projectRoot) {
|
|
193
|
+
const root = projectRoot || findProjectRoot();
|
|
194
|
+
const deletedPaths = removeDeprecatedSkills(root);
|
|
195
|
+
const removedLockEntries = cleanSkillsLock(root);
|
|
196
|
+
return { deletedPaths, removedLockEntries, projectRoot: root };
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// CLI entry point
|
|
200
|
+
if (process.argv[1] && resolve(process.argv[1]) === resolve(new URL(import.meta.url).pathname)) {
|
|
201
|
+
const result = cleanup();
|
|
202
|
+
if (result.deletedPaths.length === 0 && result.removedLockEntries.length === 0) {
|
|
203
|
+
console.log('No deprecated Impeccable skills found. Nothing to clean up.');
|
|
204
|
+
} else {
|
|
205
|
+
if (result.deletedPaths.length > 0) {
|
|
206
|
+
console.log(`Removed ${result.deletedPaths.length} deprecated skill(s):`);
|
|
207
|
+
for (const p of result.deletedPaths) console.log(` - ${p}`);
|
|
208
|
+
}
|
|
209
|
+
if (result.removedLockEntries.length > 0) {
|
|
210
|
+
console.log(`Cleaned ${result.removedLockEntries.length} entry/entries from skills-lock.json:`);
|
|
211
|
+
for (const name of result.removedLockEntries) console.log(` - ${name}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: init
|
|
3
|
+
description: Generate CLAUDE.md and AGENTS.md by exploring the codebase
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Generate CLAUDE.md and AGENTS.md
|
|
7
|
+
|
|
8
|
+
You are tasked with exploring the current codebase with the codebase-analyzer, codebase-locator, codebase-pattern-finder sub-agents, detecting the primary project languages, checking whether the corresponding language servers already exist on the user's machine, optionally installing any missing language servers after explicit user confirmation, and then generating populated `CLAUDE.md` and `AGENTS.md` files at the project root. These files provide coding agents with the context they need to work effectively in this repository.
|
|
9
|
+
|
|
10
|
+
## Steps
|
|
11
|
+
|
|
12
|
+
1. **Explore the codebase to discover project metadata:**
|
|
13
|
+
- Read `package.json`, `Cargo.toml`, `go.mod`, `pyproject.toml`, `Gemfile`, `pom.xml`, or similar manifest files
|
|
14
|
+
- Scan the top-level directory structure (`src/`, `lib/`, `app/`, `tests/`, `docs/`, etc.)
|
|
15
|
+
- Check for existing config files: `.eslintrc`, `tsconfig.json`, `biome.json`, `oxlint.json`, `.prettierrc`, CI configs (`.github/workflows/`, `.gitlab-ci.yml`), etc.
|
|
16
|
+
- Read `README.md` if it exists for project description and setup instructions
|
|
17
|
+
- Check for `.env.example`, `.env.local`, or similar environment files
|
|
18
|
+
- Identify the package manager (bun, npm, yarn, pnpm, cargo, go, pip, etc.)
|
|
19
|
+
- Identify the primary project languages from manifests, lockfiles, and source file extensions
|
|
20
|
+
- Inspect editor/tooling config such as `.vscode`, language-specific config files, or existing LSP settings when present
|
|
21
|
+
|
|
22
|
+
2. **Identify key project attributes:**
|
|
23
|
+
- **Project name**: From manifest file or directory name
|
|
24
|
+
- **Project purpose**: 1-2 sentence description from README or manifest
|
|
25
|
+
- **Project structure**: Key directories and their purposes
|
|
26
|
+
- **Tech stack**: Language, framework, runtime
|
|
27
|
+
- **Detected languages**: The main implementation languages in the repo
|
|
28
|
+
- **Recommended LSPs**: The language servers that best match those languages
|
|
29
|
+
- **Commands**: dev, build, test, lint, typecheck, format (from scripts in manifest)
|
|
30
|
+
- **Environment setup**: Required env vars, env example files
|
|
31
|
+
- **Verification command**: The command to run before commits (usually lint + typecheck + test)
|
|
32
|
+
- **Existing documentation**: Links to docs within the repo
|
|
33
|
+
|
|
34
|
+
3. **Detect installed language servers and prepare an installation plan:**
|
|
35
|
+
- For each detected language, choose the most standard LSP for that ecosystem and prefer already configured tooling when the repo clearly indicates a preference
|
|
36
|
+
- Check whether each LSP is already available by using non-destructive discovery commands such as `command -v`, `--version`, or equivalent read-only checks
|
|
37
|
+
- Use this default mapping unless the repo clearly points to a different choice:
|
|
38
|
+
- TypeScript / JavaScript -> `typescript-language-server` (and ensure `typescript` is available when required)
|
|
39
|
+
- Python -> `pyright`
|
|
40
|
+
- Go -> `gopls`
|
|
41
|
+
- Rust -> `rust-analyzer`
|
|
42
|
+
- Ruby -> `ruby-lsp`
|
|
43
|
+
- PHP -> `intelephense`
|
|
44
|
+
- Lua -> `lua-language-server`
|
|
45
|
+
- Bash / shell -> `bash-language-server`
|
|
46
|
+
- YAML -> `yaml-language-server`
|
|
47
|
+
- Docker -> `dockerfile-language-server-nodejs`
|
|
48
|
+
- Terraform -> `terraform-ls`
|
|
49
|
+
- Java -> `jdtls`
|
|
50
|
+
- Kotlin -> `kotlin-language-server`
|
|
51
|
+
- C / C++ -> `clangd`
|
|
52
|
+
- C# -> `csharp-ls`
|
|
53
|
+
- If an LSP is missing, prepare the safest install command that fits the user's available tooling and platform; do not guess a package manager that is not installed
|
|
54
|
+
- If the required runtime or package manager is missing, stop short of installation and report what is needed instead
|
|
55
|
+
|
|
56
|
+
4. **Ask for confirmation before installing anything:**
|
|
57
|
+
- Summarize the detected languages, the LSPs already present, the LSPs that are missing, and the exact install commands you plan to run
|
|
58
|
+
- Ask the user for confirmation before running any install command
|
|
59
|
+
- If the user declines, skip installation and continue with documentation generation
|
|
60
|
+
- After installation, verify each newly installed LSP with a version check or binary lookup and mention any failures clearly
|
|
61
|
+
|
|
62
|
+
5. **Populate the template below** with discovered values. Replace every `{{placeholder}}` with actual values from the repo. Delete sections that don't apply (e.g., Environment if there are no env files). Remove the "How to Fill This Template" meta-section entirely.
|
|
63
|
+
|
|
64
|
+
6. **Write the populated content** to both `CLAUDE.md` and `AGENTS.md` at the project root with identical content.
|
|
65
|
+
|
|
66
|
+
## Template
|
|
67
|
+
|
|
68
|
+
```markdown
|
|
69
|
+
# {{PROJECT_NAME}}
|
|
70
|
+
|
|
71
|
+
## Overview
|
|
72
|
+
|
|
73
|
+
{{1-2 sentences describing the project purpose}}
|
|
74
|
+
|
|
75
|
+
## Project Structure
|
|
76
|
+
|
|
77
|
+
| Path | Type | Purpose |
|
|
78
|
+
| ------------ | -------- | ----------- |
|
|
79
|
+
| \`{{path}}\` | {{type}} | {{purpose}} |
|
|
80
|
+
|
|
81
|
+
## Quick Reference
|
|
82
|
+
|
|
83
|
+
### Languages and Tooling
|
|
84
|
+
|
|
85
|
+
- Languages: {{comma-separated detected languages}}
|
|
86
|
+
- LSPs: {{comma-separated installed or recommended language servers}}
|
|
87
|
+
|
|
88
|
+
### Commands
|
|
89
|
+
|
|
90
|
+
\`\`\`bash
|
|
91
|
+
{{dev_command}} # Start dev server / all services
|
|
92
|
+
{{build_command}} # Build the project
|
|
93
|
+
{{test_command}} # Run tests
|
|
94
|
+
{{lint_command}} # Lint & format check
|
|
95
|
+
{{typecheck_command}} # Type-check (if applicable)
|
|
96
|
+
\`\`\`
|
|
97
|
+
|
|
98
|
+
### Environment
|
|
99
|
+
|
|
100
|
+
- Copy \`{{env_example_file}}\` → \`{{env_local_file}}\` for local development
|
|
101
|
+
- Required vars: {{comma-separated list of required env vars}}
|
|
102
|
+
|
|
103
|
+
## Progressive Disclosure
|
|
104
|
+
|
|
105
|
+
Read relevant docs before starting:
|
|
106
|
+
| Topic | Location |
|
|
107
|
+
| ----- | -------- |
|
|
108
|
+
| {{topic}} | \`{{path_to_doc}}\` |
|
|
109
|
+
|
|
110
|
+
## Universal Rules
|
|
111
|
+
|
|
112
|
+
1. Run \`{{verify_command}}\` before commits
|
|
113
|
+
2. Keep PRs focused on a single concern
|
|
114
|
+
3. {{Add any project-specific universal rules}}
|
|
115
|
+
|
|
116
|
+
## Code Quality
|
|
117
|
+
|
|
118
|
+
Formatting and linting are handled by automated tools:
|
|
119
|
+
|
|
120
|
+
- \`{{lint_command}}\` — {{linter/formatter names}}
|
|
121
|
+
- \`{{format_command}}\` — Auto-fix formatting (if separate from lint)
|
|
122
|
+
|
|
123
|
+
Run before committing. Don't manually check style—let tools do it.
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Important Notes
|
|
127
|
+
|
|
128
|
+
- **Keep it under 100 lines** (ideally under 60) after populating
|
|
129
|
+
- **Every instruction must be universally applicable** to all tasks in the repo
|
|
130
|
+
- **No code style rules** — delegate to linters/formatters
|
|
131
|
+
- **No task-specific instructions** — use the progressive disclosure table
|
|
132
|
+
- **No code snippets** — use `file:line` pointers instead
|
|
133
|
+
- **Include verification commands** the agent can run to validate work
|
|
134
|
+
- **Never install tooling without an explicit user confirmation first**
|
|
135
|
+
- **Prefer read-only discovery before installation** and verify any installed LSP afterward
|
|
136
|
+
- Delete any section from the template that doesn't apply to this project
|
|
137
|
+
- Do NOT include the "How to Fill This Template" section in the output
|
|
138
|
+
- Write identical content to both `CLAUDE.md` and `AGENTS.md` at the project root
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: layout
|
|
3
|
+
description: Improve layout, spacing, and visual rhythm. Fixes monotonous grids, inconsistent spacing, and weak visual hierarchy. Use when the user mentions layout feeling off, spacing issues, visual hierarchy, crowded UI, alignment problems, or wanting better composition.
|
|
4
|
+
version: 2.1.1
|
|
5
|
+
user-invocable: true
|
|
6
|
+
argument-hint: "[target]"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Assess and improve layout and spacing that feels monotonous, crowded, or structurally weak — turning generic arrangements into intentional, rhythmic compositions.
|
|
10
|
+
|
|
11
|
+
## MANDATORY PREPARATION
|
|
12
|
+
|
|
13
|
+
Invoke /impeccable — it contains design principles, anti-patterns, and the **Context Gathering Protocol**. Follow the protocol before proceeding — if no design context exists yet, you MUST run /impeccable teach first.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Assess Current Layout
|
|
18
|
+
|
|
19
|
+
Analyze what's weak about the current spatial design:
|
|
20
|
+
|
|
21
|
+
1. **Spacing**:
|
|
22
|
+
- Is spacing consistent or arbitrary? (Random padding/margin values)
|
|
23
|
+
- Is all spacing the same? (Equal padding everywhere = no rhythm)
|
|
24
|
+
- Are related elements grouped tightly, with generous space between groups?
|
|
25
|
+
|
|
26
|
+
2. **Visual hierarchy**:
|
|
27
|
+
- Apply the squint test: blur your (metaphorical) eyes — can you still identify the most important element, second most important, and clear groupings?
|
|
28
|
+
- Is hierarchy achieved effectively? (Space and weight alone can be enough — but is the current approach working?)
|
|
29
|
+
- Does whitespace guide the eye to what matters?
|
|
30
|
+
|
|
31
|
+
3. **Grid & structure**:
|
|
32
|
+
- Is there a clear underlying structure, or does the layout feel random?
|
|
33
|
+
- Are identical card grids used everywhere? (Icon + heading + text, repeated endlessly)
|
|
34
|
+
- Is everything centered? (Left-aligned with asymmetric layouts feels more designed, but not a hard and fast rule)
|
|
35
|
+
|
|
36
|
+
4. **Rhythm & variety**:
|
|
37
|
+
- Does the layout have visual rhythm? (Alternating tight/generous spacing)
|
|
38
|
+
- Is every section structured the same way? (Monotonous repetition)
|
|
39
|
+
- Are there intentional moments of surprise or emphasis?
|
|
40
|
+
|
|
41
|
+
5. **Density**:
|
|
42
|
+
- Is the layout too cramped? (Not enough breathing room)
|
|
43
|
+
- Is the layout too sparse? (Excessive whitespace without purpose)
|
|
44
|
+
- Does density match the content type? (Data-dense UIs need tighter spacing; marketing pages need more air)
|
|
45
|
+
|
|
46
|
+
**CRITICAL**: Layout problems are often the root cause of interfaces feeling "off" even when colors and fonts are fine. Space is a design material — use it with intention.
|
|
47
|
+
|
|
48
|
+
## Plan Layout Improvements
|
|
49
|
+
|
|
50
|
+
Consult the [spatial design reference](reference/spatial-design.md) from the impeccable skill for detailed guidance on grids, rhythm, and container queries.
|
|
51
|
+
|
|
52
|
+
Create a systematic plan:
|
|
53
|
+
|
|
54
|
+
- **Spacing system**: Use a consistent scale — whether that's a framework's built-in scale (e.g., Tailwind), rem-based tokens, or a custom system. The specific values matter less than consistency.
|
|
55
|
+
- **Hierarchy strategy**: How will space communicate importance?
|
|
56
|
+
- **Layout approach**: What structure fits the content? Flex for 1D, Grid for 2D, named areas for complex page layouts.
|
|
57
|
+
- **Rhythm**: Where should spacing be tight vs generous?
|
|
58
|
+
|
|
59
|
+
## Improve Layout Systematically
|
|
60
|
+
|
|
61
|
+
### Establish a Spacing System
|
|
62
|
+
|
|
63
|
+
- Use a consistent spacing scale — framework scales (Tailwind, etc.), rem-based tokens, or a custom scale all work. What matters is that values come from a defined set, not arbitrary numbers.
|
|
64
|
+
- Name tokens semantically if using custom properties: `--space-xs` through `--space-xl`, not `--spacing-8`
|
|
65
|
+
- Use `gap` for sibling spacing instead of margins — eliminates margin collapse hacks
|
|
66
|
+
- Apply `clamp()` for fluid spacing that breathes on larger screens
|
|
67
|
+
|
|
68
|
+
### Create Visual Rhythm
|
|
69
|
+
|
|
70
|
+
- **Tight grouping** for related elements (8-12px between siblings)
|
|
71
|
+
- **Generous separation** between distinct sections (48-96px)
|
|
72
|
+
- **Varied spacing** within sections — not every row needs the same gap
|
|
73
|
+
- **Asymmetric compositions** — break the predictable centered-content pattern when it makes sense
|
|
74
|
+
|
|
75
|
+
### Choose the Right Layout Tool
|
|
76
|
+
|
|
77
|
+
- **Use Flexbox for 1D layouts**: Rows of items, nav bars, button groups, card contents, most component internals. Flex is simpler and more appropriate for the majority of layout tasks.
|
|
78
|
+
- **Use Grid for 2D layouts**: Page-level structure, dashboards, data-dense interfaces, anything where rows AND columns need coordinated control.
|
|
79
|
+
- **Don't default to Grid** when Flexbox with `flex-wrap` would be simpler and more flexible.
|
|
80
|
+
- Use `repeat(auto-fit, minmax(280px, 1fr))` for responsive grids without breakpoints.
|
|
81
|
+
- Use named grid areas (`grid-template-areas`) for complex page layouts — redefine at breakpoints.
|
|
82
|
+
|
|
83
|
+
### Break Card Grid Monotony
|
|
84
|
+
|
|
85
|
+
- Don't default to card grids for everything — spacing and alignment create visual grouping naturally
|
|
86
|
+
- Use cards only when content is truly distinct and actionable — never nest cards inside cards
|
|
87
|
+
- Vary card sizes, span columns, or mix cards with non-card content to break repetition
|
|
88
|
+
|
|
89
|
+
### Strengthen Visual Hierarchy
|
|
90
|
+
|
|
91
|
+
- Use the fewest dimensions needed for clear hierarchy. Space alone can be enough — generous whitespace around an element draws the eye. Some of the most sophisticated designs achieve rhythm with just space and weight. Add color or size contrast only when simpler means aren't sufficient.
|
|
92
|
+
- Be aware of reading flow — in LTR languages, the eye naturally scans top-left to bottom-right, but primary action placement depends on context (e.g., bottom-right in dialogs, top in navigation).
|
|
93
|
+
- Create clear content groupings through proximity and separation.
|
|
94
|
+
|
|
95
|
+
### Manage Depth & Elevation
|
|
96
|
+
|
|
97
|
+
- Create a semantic z-index scale (dropdown → sticky → modal-backdrop → modal → toast → tooltip)
|
|
98
|
+
- Build a consistent shadow scale (sm → md → lg → xl) — shadows should be subtle
|
|
99
|
+
- Use elevation to reinforce hierarchy, not as decoration
|
|
100
|
+
|
|
101
|
+
### Optical Adjustments
|
|
102
|
+
|
|
103
|
+
- If an icon looks visually off-center despite being geometrically centered, nudge it — but only if you're confident it actually looks wrong. Don't adjust speculatively.
|
|
104
|
+
|
|
105
|
+
**NEVER**:
|
|
106
|
+
- Use arbitrary spacing values outside your scale
|
|
107
|
+
- Make all spacing equal — variety creates hierarchy
|
|
108
|
+
- Wrap everything in cards — not everything needs a container
|
|
109
|
+
- Nest cards inside cards — use spacing and dividers for hierarchy within
|
|
110
|
+
- Use identical card grids everywhere (icon + heading + text, repeated)
|
|
111
|
+
- Center everything — left-aligned with asymmetry feels more designed
|
|
112
|
+
- Default to the hero metric layout (big number, small label, stats, gradient) as a template. If showing real user data, a prominent metric can work — but it should display actual data, not decorative numbers.
|
|
113
|
+
- Default to CSS Grid when Flexbox would be simpler — use the simplest tool for the job
|
|
114
|
+
- Use arbitrary z-index values (999, 9999) — build a semantic scale
|
|
115
|
+
|
|
116
|
+
## Verify Layout Improvements
|
|
117
|
+
|
|
118
|
+
- **Squint test**: Can you identify primary, secondary, and groupings with blurred vision?
|
|
119
|
+
- **Rhythm**: Does the page have a satisfying beat of tight and generous spacing?
|
|
120
|
+
- **Hierarchy**: Is the most important content obvious within 2 seconds?
|
|
121
|
+
- **Breathing room**: Does the layout feel comfortable, not cramped or wasteful?
|
|
122
|
+
- **Consistency**: Is the spacing system applied uniformly?
|
|
123
|
+
- **Responsiveness**: Does the layout adapt gracefully across screen sizes?
|
|
124
|
+
|
|
125
|
+
Remember: Space is the most underused design tool. A layout with the right rhythm and hierarchy can make even simple content feel polished and intentional.
|