@prismer/runtime 2.0.8 → 2.2.63
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/CHANGELOG.md +4004 -0
- package/README.md +34 -12
- package/apc/skills/FIELD-DICTIONARY.md +111 -0
- package/apc/skills/bug-reproduce/SKILL.md +150 -0
- package/apc/skills/bug-reproduce/skill.json +96 -0
- package/apc/skills/code-review/SKILL.md +198 -0
- package/apc/skills/code-review/skill.json +124 -0
- package/apc/skills/design-review/SKILL.md +122 -0
- package/apc/skills/design-review/skill.json +88 -0
- package/apc/skills/doc-sync/SKILL.md +168 -0
- package/apc/skills/doc-sync/skill.json +81 -0
- package/apc/skills/env-doctor/SKILL.md +194 -0
- package/apc/skills/env-doctor/skill.json +209 -0
- package/apc/skills/git-ops/SKILL.md +189 -0
- package/apc/skills/git-ops/skill.json +94 -0
- package/apc/skills/impact-trace/SKILL.md +168 -0
- package/apc/skills/impact-trace/skill.json +104 -0
- package/apc/skills/observability/SKILL.md +195 -0
- package/apc/skills/observability/skill.json +116 -0
- package/apc/skills/release-db-config-sync/SKILL.md +186 -0
- package/apc/skills/release-db-config-sync/skill.json +109 -0
- package/apc/skills/release-ota-promote/SKILL.md +195 -0
- package/apc/skills/release-ota-promote/skill.json +176 -0
- package/apc/skills/release-preflight/SKILL.md +174 -0
- package/apc/skills/release-preflight/skill.json +175 -0
- package/apc/skills/release-rollback/SKILL.md +214 -0
- package/apc/skills/release-rollback/skill.json +230 -0
- package/apc/skills/release-tag/SKILL.md +194 -0
- package/apc/skills/release-tag/skill.json +94 -0
- package/apc/skills/releasing-prod/SKILL.md +49 -0
- package/apc/skills/releasing-test/SKILL.md +144 -0
- package/apc/skills/sdk-release/SKILL.md +200 -0
- package/apc/skills/spec-intake/SKILL.md +169 -0
- package/apc/skills/spec-intake/skill.json +93 -0
- package/apc/skills/test-result-feedback/SKILL.md +239 -0
- package/apc/skills/test-result-feedback/skill.json +193 -0
- package/apc/skills/test-runner/SKILL.md +169 -0
- package/apc/skills/test-runner/skill.json +103 -0
- package/apc/skills/ui-align/SKILL.md +209 -0
- package/apc/skills/ui-align/skill.json +114 -0
- package/apc/skills/ui-canvas/SKILL.md +148 -0
- package/apc/skills/ui-canvas/skill.json +127 -0
- package/built-in-skills/agent-coordination/SKILL.md +77 -38
- package/built-in-skills/agent-meta/SKILL.md +12 -0
- package/built-in-skills/assets/SKILL.md +9 -7
- package/built-in-skills/browser-use/SKILL.md +93 -0
- package/built-in-skills/canvas-design/SKILL.md +4 -3
- package/built-in-skills/canvas-design/canvas-fonts/IBMPlexSerif-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/InstrumentSerif-OFL.txt +93 -0
- package/built-in-skills/canvas-design/canvas-fonts/LICENSE-SOURCES.md +16 -0
- package/built-in-skills/claim-agent-ownership/SKILL.md +10 -5
- package/built-in-skills/claude-api/SKILL.md +2 -1
- package/built-in-skills/claude-api/python/claude-api/README.md +2 -2
- package/built-in-skills/claude-api/python/claude-api/tool-use.md +9 -5
- package/built-in-skills/claude-api/python/managed-agents/README.md +11 -1
- package/built-in-skills/claude-api/shared/error-codes.md +4 -4
- package/built-in-skills/claude-api/shared/managed-agents-client-patterns.md +4 -2
- package/built-in-skills/claude-api/shared/managed-agents-core.md +1 -2
- package/built-in-skills/claude-api/shared/managed-agents-events.md +41 -22
- package/built-in-skills/claude-api/shared/managed-agents-multiagent.md +5 -3
- package/built-in-skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +1 -1
- package/built-in-skills/claude-api/shared/managed-agents-tools.md +2 -3
- package/built-in-skills/claude-api/shared/model-migration.md +3 -3
- package/built-in-skills/claude-api/shared/models.md +1 -1
- package/built-in-skills/claude-api/typescript/claude-api/batches.md +1 -1
- package/built-in-skills/claude-api/typescript/claude-api/files-api.md +3 -1
- package/built-in-skills/claude-api/typescript/claude-api/tool-use.md +8 -2
- package/built-in-skills/claude-api/typescript/managed-agents/README.md +8 -2
- package/built-in-skills/codebase-design/DEEPENING.md +37 -0
- package/built-in-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/built-in-skills/codebase-design/LICENSE +21 -0
- package/built-in-skills/codebase-design/SKILL.md +130 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/GUIDE.md +291 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/LICENSE +21 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/LICENSE.superpowers +21 -0
- package/built-in-skills/codebase-design/references/requesting-code-review/NOTICE.md +37 -0
- package/built-in-skills/codebase-design/references/sdlc-review/GUIDE.md +130 -0
- package/built-in-skills/codebase-design/references/sdlc-review/LICENSE +21 -0
- package/built-in-skills/codebase-design/references/sdlc-review/NOTICE.md +17 -0
- package/built-in-skills/codebase-design/references/simplify-code/GUIDE.md +269 -0
- package/built-in-skills/codebase-design/references/simplify-code/LICENSE +21 -0
- package/built-in-skills/codebase-design/references/simplify-code/NOTICE.md +37 -0
- package/built-in-skills/competitor-intelligence/LICENSE +21 -0
- package/built-in-skills/competitor-intelligence/NOTICE.md +6 -0
- package/built-in-skills/competitor-intelligence/SKILL.md +125 -0
- package/built-in-skills/competitor-intelligence/scripts/watch_state.py +160 -0
- package/built-in-skills/conversation-compaction/SKILL.md +117 -0
- package/built-in-skills/council-creator/SKILL.md +427 -0
- package/built-in-skills/diagnosing-bugs/LICENSE +21 -0
- package/built-in-skills/diagnosing-bugs/SKILL.md +148 -0
- package/built-in-skills/diagnosing-bugs/references/desktop-dom/GUIDE.md +64 -0
- package/built-in-skills/diagnosing-bugs/references/desktop-dom/LICENSE +21 -0
- package/built-in-skills/diagnosing-bugs/references/desktop-dom/NOTICE.md +17 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/GUIDE.md +410 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/LICENSE +21 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/LICENSE.superpowers +21 -0
- package/built-in-skills/diagnosing-bugs/references/systematic-debugging/NOTICE.md +37 -0
- package/built-in-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/built-in-skills/doc-coauthoring/SKILL.md +7 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/GUIDE.md +647 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/LICENSE +21 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/LICENSE.hermes +21 -0
- package/built-in-skills/doc-coauthoring/references/humanizer/PROVENANCE.md +7 -0
- package/built-in-skills/document-actions/LICENSE +21 -0
- package/built-in-skills/document-actions/NOTICE.md +21 -0
- package/built-in-skills/document-actions/SKILL.md +46 -0
- package/built-in-skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/built-in-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/built-in-skills/domain-modeling/LICENSE +21 -0
- package/built-in-skills/domain-modeling/SKILL.md +76 -0
- package/built-in-skills/evidence-citations/LICENSE +21 -0
- package/built-in-skills/evidence-citations/NOTICE.md +21 -0
- package/built-in-skills/evidence-citations/SKILL.md +46 -0
- package/built-in-skills/evidence-citations/references/citation-formats.md +68 -0
- package/built-in-skills/evidence-citations/references/grounding-rationale.md +64 -0
- package/built-in-skills/evidence-citations/scripts/sources.py +720 -0
- package/built-in-skills/frontend-design/SKILL.md +7 -0
- package/built-in-skills/frontend-design/references/claude-design/GUIDE.md +650 -0
- package/built-in-skills/frontend-design/references/claude-design/LICENSE +21 -0
- package/built-in-skills/frontend-design/references/claude-design/LICENSE.hermes +21 -0
- package/built-in-skills/frontend-design/references/claude-design/PROVENANCE.md +7 -0
- package/built-in-skills/human-approval/SKILL.md +17 -2
- package/built-in-skills/image-generate/SKILL.md +107 -301
- package/built-in-skills/image-generate/scripts/generate-and-deliver.mjs +310 -0
- package/built-in-skills/ingest/SKILL.md +13 -45
- package/built-in-skills/internal-comms/SKILL.md +1 -0
- package/built-in-skills/liteparse/SKILL.md +130 -110
- package/built-in-skills/mcp-builder/SKILL.md +1 -0
- package/built-in-skills/mcp-builder/reference/evaluation.md +11 -2
- package/built-in-skills/mcp-builder/reference/node_mcp_server.md +34 -5
- package/built-in-skills/mcp-builder/reference/python_mcp_server.md +6 -2
- package/built-in-skills/mcp-builder/scripts/connections.py +1 -1
- package/built-in-skills/mcp-builder/scripts/evaluation.py +52 -34
- package/built-in-skills/mcp-builder/scripts/requirements.txt +2 -2
- package/built-in-skills/meeting-actions/LICENSE +21 -0
- package/built-in-skills/meeting-actions/NOTICE.md +21 -0
- package/built-in-skills/meeting-actions/SKILL.md +48 -0
- package/built-in-skills/memory/SKILL.md +444 -55
- package/built-in-skills/memory/references/llm-wiki/GUIDE.md +468 -0
- package/built-in-skills/memory/references/llm-wiki/LICENSE +21 -0
- package/built-in-skills/memory/references/llm-wiki/NOTICE.md +4 -0
- package/built-in-skills/memory/references/llm-wiki/scripts/lint_wiki.py +84 -0
- package/built-in-skills/memory/references/llm-wiki/scripts/requirements.txt +1 -0
- package/built-in-skills/memory/references/llm-wiki/templates/SCHEMA.md +19 -0
- package/built-in-skills/memory/references/llm-wiki/templates/index.md +9 -0
- package/built-in-skills/memory/references/llm-wiki/templates/log.md +4 -0
- package/built-in-skills/memory-dream/SKILL.md +332 -0
- package/built-in-skills/memory-import/SKILL.md +51 -0
- package/built-in-skills/office-artifacts/NOTICE.md +15 -0
- package/built-in-skills/office-artifacts/SKILL.md +37 -4
- package/built-in-skills/office-artifacts/references/RESOURCE-LIMITS.md +44 -0
- package/built-in-skills/office-artifacts/references/document-generation/GUIDE.md +105 -0
- package/built-in-skills/office-artifacts/references/docx/GUIDE.md +196 -0
- package/built-in-skills/office-artifacts/references/docx/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/docx/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/docx/references/revisions-and-comments.md +88 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_comments.py +292 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_common.py +93 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_create.py +177 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_edit.py +250 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_read.py +169 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_revisions.py +149 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_template.py +70 -0
- package/built-in-skills/office-artifacts/references/docx/scripts/docx_validate.py +155 -0
- package/built-in-skills/office-artifacts/references/docx/tests/test_docx_skill.py +525 -0
- package/built-in-skills/office-artifacts/references/pdf/GUIDE.md +125 -0
- package/built-in-skills/office-artifacts/references/pdf/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/pdf/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/pdf/references/forms.md +99 -0
- package/built-in-skills/office-artifacts/references/pdf/references/nano-pdf-editing.md +40 -0
- package/built-in-skills/office-artifacts/references/pdf/references/ocr-extraction.md +165 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/_raster.py +87 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/extract_marker.py +95 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/extract_pymupdf.py +107 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_create.py +153 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_fill_form.py +97 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_form_layout.py +168 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_make_form.py +145 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_merge.py +50 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_meta.py +123 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_page_image.py +101 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_read.py +153 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_secure.py +71 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_split.py +86 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_stamp.py +145 -0
- package/built-in-skills/office-artifacts/references/pdf/scripts/pdf_watermark.py +51 -0
- package/built-in-skills/office-artifacts/references/pdf/tests/test_pdf_skill.py +414 -0
- package/built-in-skills/office-artifacts/references/powerpoint/GUIDE.md +220 -0
- package/built-in-skills/office-artifacts/references/powerpoint/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/powerpoint/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_create.py +214 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_edit.py +442 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_from_template.py +88 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_read.py +131 -0
- package/built-in-skills/office-artifacts/references/powerpoint/scripts/pptx_render.py +104 -0
- package/built-in-skills/office-artifacts/references/powerpoint/tests/test_powerpoint_skill.py +478 -0
- package/built-in-skills/office-artifacts/references/xlsx/GUIDE.md +196 -0
- package/built-in-skills/office-artifacts/references/xlsx/LICENSE +21 -0
- package/built-in-skills/office-artifacts/references/xlsx/NOTICE.md +21 -0
- package/built-in-skills/office-artifacts/references/xlsx/references/restructuring.md +74 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/csv_to_xlsx.py +108 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_create.py +259 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_edit.py +269 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_read.py +160 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_recalc.py +111 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_restructure.py +418 -0
- package/built-in-skills/office-artifacts/references/xlsx/scripts/xlsx_to_csv.py +69 -0
- package/built-in-skills/office-artifacts/references/xlsx/tests/test_xlsx_skill.py +542 -0
- package/built-in-skills/office-artifacts/tests/test_resource_regressions.py +272 -0
- package/built-in-skills/okr/SKILL.md +154 -0
- package/built-in-skills/persona/SKILL.md +81 -0
- package/built-in-skills/persona-generator/SKILL.md +296 -0
- package/built-in-skills/pkf-svg/SKILL.md +258 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/GUIDE.md +148 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/LICENSE +21 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/LICENSE.hermes +21 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/PROVENANCE.md +7 -0
- package/built-in-skills/pkf-svg/references/architecture-diagram/templates/template.html +345 -0
- package/built-in-skills/pkf-writing/SKILL.md +258 -0
- package/built-in-skills/prismer-airtable/LICENSE +21 -0
- package/built-in-skills/prismer-airtable/NOTICE.md +11 -0
- package/built-in-skills/prismer-airtable/SKILL.md +248 -0
- package/built-in-skills/prismer-airtable/scripts/airtable_client.py +76 -0
- package/built-in-skills/prismer-apple-notes/LICENSE +21 -0
- package/built-in-skills/prismer-apple-notes/NOTICE.md +17 -0
- package/built-in-skills/prismer-apple-notes/SKILL.md +118 -0
- package/built-in-skills/prismer-apple-notes/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-apple-reminders/LICENSE +21 -0
- package/built-in-skills/prismer-apple-reminders/NOTICE.md +17 -0
- package/built-in-skills/prismer-apple-reminders/SKILL.md +155 -0
- package/built-in-skills/prismer-apple-reminders/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-ascii-video/LICENSE +21 -0
- package/built-in-skills/prismer-ascii-video/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-ascii-video/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-ascii-video/README.md +290 -0
- package/built-in-skills/prismer-ascii-video/SKILL.md +252 -0
- package/built-in-skills/prismer-ascii-video/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-ascii-video/references/architecture.md +807 -0
- package/built-in-skills/prismer-ascii-video/references/composition.md +900 -0
- package/built-in-skills/prismer-ascii-video/references/effects.md +1877 -0
- package/built-in-skills/prismer-ascii-video/references/inputs.md +693 -0
- package/built-in-skills/prismer-ascii-video/references/optimization.md +688 -0
- package/built-in-skills/prismer-ascii-video/references/scenes.md +1018 -0
- package/built-in-skills/prismer-ascii-video/references/shaders.md +1408 -0
- package/built-in-skills/prismer-ascii-video/references/troubleshooting.md +360 -0
- package/built-in-skills/prismer-baoyu-infographic/LICENSE +21 -0
- package/built-in-skills/prismer-baoyu-infographic/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-baoyu-infographic/LICENSE.origin +21 -0
- package/built-in-skills/prismer-baoyu-infographic/PORT_NOTES.md +37 -0
- package/built-in-skills/prismer-baoyu-infographic/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-baoyu-infographic/SKILL.md +240 -0
- package/built-in-skills/prismer-baoyu-infographic/references/analysis-framework.md +182 -0
- package/built-in-skills/prismer-baoyu-infographic/references/base-prompt.md +43 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/bento-grid.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/binary-comparison.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/bridge.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/circular-flow.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/comic-strip.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/comparison-matrix.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/dashboard.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/dense-modules.md +72 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/funnel.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/hierarchical-layers.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/hub-spoke.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/iceberg.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/isometric-map.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/jigsaw.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/linear-progression.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/periodic-table.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/story-mountain.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/structural-breakdown.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/tree-branching.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/venn-diagram.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/layouts/winding-roadmap.md +41 -0
- package/built-in-skills/prismer-baoyu-infographic/references/structured-content-template.md +244 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/aged-academia.md +36 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/bold-graphic.md +36 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/chalkboard.md +61 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/claymation.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/corporate-memphis.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/craft-handmade.md +44 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/cyberpunk-neon.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/hand-drawn-edu.md +63 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/ikea-manual.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/kawaii.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/knolling.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/lego-brick.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/morandi-journal.md +60 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/origami.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/pixel-art.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/pop-laboratory.md +48 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/retro-pop-grid.md +47 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/storybook-watercolor.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/subway-map.md +29 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/technical-schematic.md +36 -0
- package/built-in-skills/prismer-baoyu-infographic/references/styles/ui-wireframe.md +29 -0
- package/built-in-skills/prismer-blocked-page-recovery/LICENSE +21 -0
- package/built-in-skills/prismer-blocked-page-recovery/NOTICE.md +17 -0
- package/built-in-skills/prismer-blocked-page-recovery/SKILL.md +158 -0
- package/built-in-skills/prismer-blocked-page-recovery/scripts/recover_page.py +311 -0
- package/built-in-skills/prismer-box/LICENSE +21 -0
- package/built-in-skills/prismer-box/NOTICE.md +11 -0
- package/built-in-skills/prismer-box/SKILL.md +147 -0
- package/built-in-skills/prismer-box/references/bulk-operations.md +43 -0
- package/built-in-skills/prismer-box/references/cli-guide.md +133 -0
- package/built-in-skills/prismer-box/references/content-workflows.md +86 -0
- package/built-in-skills/prismer-box/references/hubs.md +77 -0
- package/built-in-skills/prismer-box/references/oauth-setup.md +92 -0
- package/built-in-skills/prismer-box/references/rest-api.md +37 -0
- package/built-in-skills/prismer-box/references/sdk-development.md +85 -0
- package/built-in-skills/prismer-box/references/search-and-ai.md +147 -0
- package/built-in-skills/prismer-box/references/troubleshooting.md +33 -0
- package/built-in-skills/prismer-box/references/webhooks-and-events.md +43 -0
- package/built-in-skills/prismer-codebase-inspection/LICENSE +21 -0
- package/built-in-skills/prismer-codebase-inspection/NOTICE.md +17 -0
- package/built-in-skills/prismer-codebase-inspection/SKILL.md +141 -0
- package/built-in-skills/prismer-computer-use/LICENSE +21 -0
- package/built-in-skills/prismer-computer-use/NOTICE.md +17 -0
- package/built-in-skills/prismer-computer-use/SKILL.md +372 -0
- package/built-in-skills/prismer-design-md/LICENSE +21 -0
- package/built-in-skills/prismer-design-md/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-design-md/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-design-md/SKILL.md +227 -0
- package/built-in-skills/prismer-design-md/templates/starter.md +99 -0
- package/built-in-skills/prismer-email-inbox-triage/LICENSE +21 -0
- package/built-in-skills/prismer-email-inbox-triage/NOTICE.md +11 -0
- package/built-in-skills/prismer-email-inbox-triage/SKILL.md +116 -0
- package/built-in-skills/prismer-findmy/LICENSE +21 -0
- package/built-in-skills/prismer-findmy/NOTICE.md +17 -0
- package/built-in-skills/prismer-findmy/SKILL.md +150 -0
- package/built-in-skills/prismer-findmy/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-gif-search/LICENSE +21 -0
- package/built-in-skills/prismer-gif-search/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-gif-search/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-gif-search/SKILL.md +97 -0
- package/built-in-skills/prismer-gif-search/scripts/tenor.py +81 -0
- package/built-in-skills/prismer-github/LICENSE +21 -0
- package/built-in-skills/prismer-github/NOTICE.md +17 -0
- package/built-in-skills/prismer-github/SKILL.md +74 -0
- package/built-in-skills/prismer-github/references/auth.md +91 -0
- package/built-in-skills/prismer-github/references/ci-troubleshooting.md +193 -0
- package/built-in-skills/prismer-github/references/code-review.md +465 -0
- package/built-in-skills/prismer-github/references/conventional-commits.md +81 -0
- package/built-in-skills/prismer-github/references/github-api-cheatsheet.md +177 -0
- package/built-in-skills/prismer-github/references/issue-to-pr.md +74 -0
- package/built-in-skills/prismer-github/references/issues.md +336 -0
- package/built-in-skills/prismer-github/references/pr-workflow.md +346 -0
- package/built-in-skills/prismer-github/references/repo-management.md +484 -0
- package/built-in-skills/prismer-github/references/review-output-template.md +84 -0
- package/built-in-skills/prismer-github/scripts/ensure-gh.py +132 -0
- package/built-in-skills/prismer-github/scripts/gh-env.sh +25 -0
- package/built-in-skills/prismer-github/scripts/git-credential-token.py +68 -0
- package/built-in-skills/prismer-github/scripts/github-api.py +71 -0
- package/built-in-skills/prismer-github/scripts/github-context.py +28 -0
- package/built-in-skills/prismer-github/templates/bug-report.md +35 -0
- package/built-in-skills/prismer-github/templates/feature-request.md +31 -0
- package/built-in-skills/prismer-github/templates/pr-body-bugfix.md +35 -0
- package/built-in-skills/prismer-github/templates/pr-body-feature.md +33 -0
- package/built-in-skills/prismer-google-workspace/LICENSE +21 -0
- package/built-in-skills/prismer-google-workspace/NOTICE.md +11 -0
- package/built-in-skills/prismer-google-workspace/SKILL.md +369 -0
- package/built-in-skills/prismer-google-workspace/references/daily-brief.md +65 -0
- package/built-in-skills/prismer-google-workspace/references/gmail-search-syntax.md +63 -0
- package/built-in-skills/prismer-google-workspace/scripts/_hermes_home.py +17 -0
- package/built-in-skills/prismer-google-workspace/scripts/_private_state.py +39 -0
- package/built-in-skills/prismer-google-workspace/scripts/google_api.py +1339 -0
- package/built-in-skills/prismer-google-workspace/scripts/gws_bridge.py +121 -0
- package/built-in-skills/prismer-google-workspace/scripts/setup.py +563 -0
- package/built-in-skills/prismer-google-workspace/tests/test_productivity_regressions.py +214 -0
- package/built-in-skills/prismer-hermes-agent/LICENSE +21 -0
- package/built-in-skills/prismer-hermes-agent/NOTICE.md +17 -0
- package/built-in-skills/prismer-hermes-agent/SKILL.md +247 -0
- package/built-in-skills/prismer-hermes-agent/references/background-systems.md +108 -0
- package/built-in-skills/prismer-hermes-agent/references/cli-reference.md +158 -0
- package/built-in-skills/prismer-hermes-agent/references/configuration.md +96 -0
- package/built-in-skills/prismer-hermes-agent/references/contributor-guide.md +151 -0
- package/built-in-skills/prismer-hermes-agent/references/delegate-task-concurrency-diagnosis.md +47 -0
- package/built-in-skills/prismer-hermes-agent/references/desktop-plugins.md +215 -0
- package/built-in-skills/prismer-hermes-agent/references/native-mcp.md +351 -0
- package/built-in-skills/prismer-hermes-agent/references/petdex.md +82 -0
- package/built-in-skills/prismer-hermes-agent/references/portal-auth-for-third-party-apps.md +135 -0
- package/built-in-skills/prismer-hermes-agent/references/project-context-files.md +55 -0
- package/built-in-skills/prismer-hermes-agent/references/providers-and-models.md +81 -0
- package/built-in-skills/prismer-hermes-agent/references/security-privacy.md +73 -0
- package/built-in-skills/prismer-hermes-agent/references/slash-commands.md +119 -0
- package/built-in-skills/prismer-hermes-agent/references/themes.md +134 -0
- package/built-in-skills/prismer-hermes-agent/references/troubleshooting.md +87 -0
- package/built-in-skills/prismer-hermes-agent/references/tui-widgets.md +144 -0
- package/built-in-skills/prismer-hermes-agent/references/webhooks.md +219 -0
- package/built-in-skills/prismer-hermes-agent/references/windows-quirks.md +64 -0
- package/built-in-skills/prismer-hermes-agent/templates/clock.mjs +51 -0
- package/built-in-skills/prismer-hermes-agent/templates/plugin.js +97 -0
- package/built-in-skills/prismer-hermes-agent/templates/skin.yaml +49 -0
- package/built-in-skills/prismer-himalaya/LICENSE +21 -0
- package/built-in-skills/prismer-himalaya/NOTICE.md +11 -0
- package/built-in-skills/prismer-himalaya/SKILL.md +340 -0
- package/built-in-skills/prismer-himalaya/references/configuration.md +227 -0
- package/built-in-skills/prismer-himalaya/references/message-composition.md +206 -0
- package/built-in-skills/prismer-himalaya/scripts/compose_draft.py +48 -0
- package/built-in-skills/prismer-im-collab/SKILL.md +27 -7
- package/built-in-skills/prismer-imessage/LICENSE +21 -0
- package/built-in-skills/prismer-imessage/NOTICE.md +17 -0
- package/built-in-skills/prismer-imessage/SKILL.md +128 -0
- package/built-in-skills/prismer-imessage/scripts/readiness.py +47 -0
- package/built-in-skills/prismer-manim-video/LICENSE +21 -0
- package/built-in-skills/prismer-manim-video/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-manim-video/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-manim-video/README.md +23 -0
- package/built-in-skills/prismer-manim-video/SKILL.md +279 -0
- package/built-in-skills/prismer-manim-video/references/animation-design-thinking.md +161 -0
- package/built-in-skills/prismer-manim-video/references/animations.md +282 -0
- package/built-in-skills/prismer-manim-video/references/camera-and-3d.md +135 -0
- package/built-in-skills/prismer-manim-video/references/decorations.md +202 -0
- package/built-in-skills/prismer-manim-video/references/equations.md +216 -0
- package/built-in-skills/prismer-manim-video/references/graphs-and-data.md +163 -0
- package/built-in-skills/prismer-manim-video/references/mobjects.md +333 -0
- package/built-in-skills/prismer-manim-video/references/paper-explainer.md +255 -0
- package/built-in-skills/prismer-manim-video/references/production-quality.md +190 -0
- package/built-in-skills/prismer-manim-video/references/rendering.md +187 -0
- package/built-in-skills/prismer-manim-video/references/scene-planning.md +118 -0
- package/built-in-skills/prismer-manim-video/references/troubleshooting.md +135 -0
- package/built-in-skills/prismer-manim-video/references/updaters-and-trackers.md +260 -0
- package/built-in-skills/prismer-manim-video/references/visual-design.md +124 -0
- package/built-in-skills/prismer-manim-video/scripts/setup.sh +15 -0
- package/built-in-skills/prismer-maps/LICENSE +21 -0
- package/built-in-skills/prismer-maps/NOTICE.md +11 -0
- package/built-in-skills/prismer-maps/SKILL.md +240 -0
- package/built-in-skills/prismer-maps/scripts/maps_client.py +1324 -0
- package/built-in-skills/prismer-node-inspect-debugger/LICENSE +21 -0
- package/built-in-skills/prismer-node-inspect-debugger/NOTICE.md +17 -0
- package/built-in-skills/prismer-node-inspect-debugger/SKILL.md +347 -0
- package/built-in-skills/prismer-notion/LICENSE +21 -0
- package/built-in-skills/prismer-notion/NOTICE.md +11 -0
- package/built-in-skills/prismer-notion/SKILL.md +495 -0
- package/built-in-skills/prismer-notion/references/block-types.md +112 -0
- package/built-in-skills/prismer-obsidian/LICENSE +21 -0
- package/built-in-skills/prismer-obsidian/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-obsidian/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-obsidian/SKILL.md +80 -0
- package/built-in-skills/prismer-obsidian/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-obsidian/scripts/write_note.py +84 -0
- package/built-in-skills/prismer-p5js/LICENSE +21 -0
- package/built-in-skills/prismer-p5js/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-p5js/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-p5js/README.md +64 -0
- package/built-in-skills/prismer-p5js/SKILL.md +574 -0
- package/built-in-skills/prismer-p5js/references/animation.md +439 -0
- package/built-in-skills/prismer-p5js/references/color-systems.md +355 -0
- package/built-in-skills/prismer-p5js/references/core-api.md +410 -0
- package/built-in-skills/prismer-p5js/references/export-pipeline.md +534 -0
- package/built-in-skills/prismer-p5js/references/interaction.md +398 -0
- package/built-in-skills/prismer-p5js/references/shapes-and-geometry.md +300 -0
- package/built-in-skills/prismer-p5js/references/troubleshooting.md +532 -0
- package/built-in-skills/prismer-p5js/references/typography.md +302 -0
- package/built-in-skills/prismer-p5js/references/visual-effects.md +905 -0
- package/built-in-skills/prismer-p5js/references/webgl-and-3d.md +423 -0
- package/built-in-skills/prismer-p5js/scripts/export-frames.js +91 -0
- package/built-in-skills/prismer-p5js/scripts/render.sh +113 -0
- package/built-in-skills/prismer-p5js/scripts/serve.sh +25 -0
- package/built-in-skills/prismer-p5js/scripts/setup.sh +87 -0
- package/built-in-skills/prismer-p5js/templates/viewer.html +401 -0
- package/built-in-skills/prismer-popular-web-designs/LICENSE +21 -0
- package/built-in-skills/prismer-popular-web-designs/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-popular-web-designs/LICENSE.origin +21 -0
- package/built-in-skills/prismer-popular-web-designs/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-popular-web-designs/SKILL.md +218 -0
- package/built-in-skills/prismer-popular-web-designs/templates/airbnb.md +259 -0
- package/built-in-skills/prismer-popular-web-designs/templates/airtable.md +102 -0
- package/built-in-skills/prismer-popular-web-designs/templates/apple.md +326 -0
- package/built-in-skills/prismer-popular-web-designs/templates/bmw.md +193 -0
- package/built-in-skills/prismer-popular-web-designs/templates/cal.md +272 -0
- package/built-in-skills/prismer-popular-web-designs/templates/claude.md +325 -0
- package/built-in-skills/prismer-popular-web-designs/templates/clay.md +317 -0
- package/built-in-skills/prismer-popular-web-designs/templates/clickhouse.md +294 -0
- package/built-in-skills/prismer-popular-web-designs/templates/cohere.md +279 -0
- package/built-in-skills/prismer-popular-web-designs/templates/coinbase.md +142 -0
- package/built-in-skills/prismer-popular-web-designs/templates/composio.md +320 -0
- package/built-in-skills/prismer-popular-web-designs/templates/cursor.md +322 -0
- package/built-in-skills/prismer-popular-web-designs/templates/elevenlabs.md +278 -0
- package/built-in-skills/prismer-popular-web-designs/templates/expo.md +294 -0
- package/built-in-skills/prismer-popular-web-designs/templates/figma.md +233 -0
- package/built-in-skills/prismer-popular-web-designs/templates/framer.md +259 -0
- package/built-in-skills/prismer-popular-web-designs/templates/hashicorp.md +291 -0
- package/built-in-skills/prismer-popular-web-designs/templates/ibm.md +345 -0
- package/built-in-skills/prismer-popular-web-designs/templates/intercom.md +159 -0
- package/built-in-skills/prismer-popular-web-designs/templates/kraken.md +138 -0
- package/built-in-skills/prismer-popular-web-designs/templates/linear.app.md +380 -0
- package/built-in-skills/prismer-popular-web-designs/templates/lovable.md +311 -0
- package/built-in-skills/prismer-popular-web-designs/templates/minimax.md +270 -0
- package/built-in-skills/prismer-popular-web-designs/templates/mintlify.md +339 -0
- package/built-in-skills/prismer-popular-web-designs/templates/miro.md +121 -0
- package/built-in-skills/prismer-popular-web-designs/templates/mistral.ai.md +274 -0
- package/built-in-skills/prismer-popular-web-designs/templates/mongodb.md +279 -0
- package/built-in-skills/prismer-popular-web-designs/templates/notion.md +322 -0
- package/built-in-skills/prismer-popular-web-designs/templates/nvidia.md +306 -0
- package/built-in-skills/prismer-popular-web-designs/templates/ollama.md +280 -0
- package/built-in-skills/prismer-popular-web-designs/templates/opencode.ai.md +294 -0
- package/built-in-skills/prismer-popular-web-designs/templates/pinterest.md +243 -0
- package/built-in-skills/prismer-popular-web-designs/templates/posthog.md +269 -0
- package/built-in-skills/prismer-popular-web-designs/templates/raycast.md +281 -0
- package/built-in-skills/prismer-popular-web-designs/templates/replicate.md +274 -0
- package/built-in-skills/prismer-popular-web-designs/templates/resend.md +316 -0
- package/built-in-skills/prismer-popular-web-designs/templates/revolut.md +198 -0
- package/built-in-skills/prismer-popular-web-designs/templates/runwayml.md +257 -0
- package/built-in-skills/prismer-popular-web-designs/templates/sanity.md +370 -0
- package/built-in-skills/prismer-popular-web-designs/templates/sentry.md +275 -0
- package/built-in-skills/prismer-popular-web-designs/templates/spacex.md +207 -0
- package/built-in-skills/prismer-popular-web-designs/templates/spotify.md +259 -0
- package/built-in-skills/prismer-popular-web-designs/templates/stripe.md +335 -0
- package/built-in-skills/prismer-popular-web-designs/templates/supabase.md +268 -0
- package/built-in-skills/prismer-popular-web-designs/templates/superhuman.md +265 -0
- package/built-in-skills/prismer-popular-web-designs/templates/together.ai.md +276 -0
- package/built-in-skills/prismer-popular-web-designs/templates/uber.md +308 -0
- package/built-in-skills/prismer-popular-web-designs/templates/vercel.md +323 -0
- package/built-in-skills/prismer-popular-web-designs/templates/voltagent.md +336 -0
- package/built-in-skills/prismer-popular-web-designs/templates/warp.md +266 -0
- package/built-in-skills/prismer-popular-web-designs/templates/webflow.md +105 -0
- package/built-in-skills/prismer-popular-web-designs/templates/wise.md +186 -0
- package/built-in-skills/prismer-popular-web-designs/templates/x.ai.md +270 -0
- package/built-in-skills/prismer-popular-web-designs/templates/zapier.md +341 -0
- package/built-in-skills/prismer-product-price-monitor/LICENSE +21 -0
- package/built-in-skills/prismer-product-price-monitor/NOTICE.md +11 -0
- package/built-in-skills/prismer-product-price-monitor/SKILL.md +97 -0
- package/built-in-skills/prismer-product-price-monitor/scripts/watch_state.py +116 -0
- package/built-in-skills/prismer-python-debugpy/LICENSE +21 -0
- package/built-in-skills/prismer-python-debugpy/NOTICE.md +17 -0
- package/built-in-skills/prismer-python-debugpy/SKILL.md +377 -0
- package/built-in-skills/prismer-python-debugpy/scripts/dap_client.py +68 -0
- package/built-in-skills/prismer-songsee/LICENSE +21 -0
- package/built-in-skills/prismer-songsee/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-songsee/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-songsee/SKILL.md +91 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/LICENSE +21 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-songwriting-and-ai-music/SKILL.md +317 -0
- package/built-in-skills/prismer-spike/LICENSE +21 -0
- package/built-in-skills/prismer-spike/LICENSE.gsd +21 -0
- package/built-in-skills/prismer-spike/NOTICE.md +17 -0
- package/built-in-skills/prismer-spike/SKILL.md +212 -0
- package/built-in-skills/prismer-teams-meeting-pipeline/LICENSE +21 -0
- package/built-in-skills/prismer-teams-meeting-pipeline/NOTICE.md +11 -0
- package/built-in-skills/prismer-teams-meeting-pipeline/SKILL.md +156 -0
- package/built-in-skills/prismer-xurl/LICENSE +21 -0
- package/built-in-skills/prismer-xurl/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-xurl/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-xurl/SKILL.md +444 -0
- package/built-in-skills/prismer-xurl/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-youtube-content/LICENSE +21 -0
- package/built-in-skills/prismer-youtube-content/LICENSE.hermes +21 -0
- package/built-in-skills/prismer-youtube-content/PROVENANCE.md +7 -0
- package/built-in-skills/prismer-youtube-content/SKILL.md +86 -0
- package/built-in-skills/prismer-youtube-content/provenance/category-DESCRIPTION.md +3 -0
- package/built-in-skills/prismer-youtube-content/references/output-formats.md +56 -0
- package/built-in-skills/prismer-youtube-content/scripts/fetch_transcript.py +146 -0
- package/built-in-skills/proactivity/SKILL.md +84 -0
- package/built-in-skills/remotion/SKILL.md +431 -0
- package/built-in-skills/research-arxiv/LICENSE +21 -0
- package/built-in-skills/research-arxiv/NOTICE.md +4 -0
- package/built-in-skills/research-arxiv/SKILL.md +263 -0
- package/built-in-skills/research-arxiv/scripts/search_arxiv.py +111 -0
- package/built-in-skills/role-builder/SKILL.md +209 -0
- package/built-in-skills/role-builder/scripts/author-role.mjs +350 -0
- package/built-in-skills/role-builder/scripts/ingest-role.mjs +121 -0
- package/built-in-skills/role-builder/scripts/instantiate-and-run.mjs +304 -0
- package/built-in-skills/role-builder/scripts/operation-harness.mjs +269 -0
- package/built-in-skills/skill-creator/LICENSE.prismer +21 -0
- package/built-in-skills/skill-creator/NOTICE.md +18 -0
- package/built-in-skills/skill-creator/SKILL.md +182 -421
- package/built-in-skills/skill-creator/eval-viewer/generate_review.py +20 -31
- package/built-in-skills/skill-creator/eval-viewer/viewer.html +35 -23
- package/built-in-skills/skill-creator/references/external-library-import.md +110 -0
- package/built-in-skills/skill-creator/references/hermes-agent-skill-authoring/GUIDE.md +220 -0
- package/built-in-skills/skill-creator/references/hermes-agent-skill-authoring/LICENSE +21 -0
- package/built-in-skills/skill-creator/references/skill-authoring/GUIDE.md +134 -0
- package/built-in-skills/{skill-authoring/skill.json → skill-creator/references/skill-authoring/draft-contract.json} +3 -3
- package/built-in-skills/skill-creator/references/skill-builder/GUIDE.md +167 -0
- package/built-in-skills/skill-creator/references/skill-builder/scripts/ingest.mjs +93 -0
- package/built-in-skills/skill-creator/scripts/aggregate_benchmark.py +3 -2
- package/built-in-skills/skill-creator/scripts/import-library.mjs +498 -0
- package/built-in-skills/skill-creator/scripts/improve_description.py +14 -16
- package/built-in-skills/skill-creator/scripts/package_skill.py +16 -9
- package/built-in-skills/skill-creator/scripts/quick_validate.py +22 -5
- package/built-in-skills/skill-creator/scripts/run_eval.py +63 -144
- package/built-in-skills/skill-creator/scripts/run_loop.py +24 -16
- package/built-in-skills/slack-gif-creator/SKILL.md +20 -0
- package/built-in-skills/slack-gif-creator/core/gif_builder.py +13 -2
- package/built-in-skills/slack-gif-creator/core/validators.py +17 -7
- package/built-in-skills/tasks/SKILL.md +39 -24
- package/built-in-skills/tdd/LICENSE +21 -0
- package/built-in-skills/tdd/SKILL.md +117 -0
- package/built-in-skills/tdd/mocking.md +59 -0
- package/built-in-skills/tdd/refactoring.md +10 -0
- package/built-in-skills/tdd/references/test-driven-development/GUIDE.md +356 -0
- package/built-in-skills/tdd/references/test-driven-development/LICENSE +21 -0
- package/built-in-skills/tdd/references/test-driven-development/LICENSE.superpowers +21 -0
- package/built-in-skills/tdd/references/test-driven-development/NOTICE.md +37 -0
- package/built-in-skills/tdd/tests.md +61 -0
- package/built-in-skills/team/SKILL.md +3 -2
- package/built-in-skills/web-artifacts-builder/SKILL.md +4 -3
- package/built-in-skills/web-artifacts-builder/scripts/bundle-artifact.sh +9 -7
- package/built-in-skills/web-artifacts-builder/scripts/init-artifact.sh +28 -55
- package/built-in-skills/webapp-qa/LICENSE +21 -0
- package/built-in-skills/webapp-qa/NOTICE.md +37 -0
- package/built-in-skills/webapp-qa/SKILL.md +41 -0
- package/built-in-skills/webapp-qa/references/dogfood/GUIDE.md +161 -0
- package/built-in-skills/webapp-qa/references/issue-taxonomy.md +109 -0
- package/built-in-skills/webapp-qa/templates/dogfood-report-template.md +86 -0
- package/built-in-skills/webapp-testing/SKILL.md +10 -2
- package/built-in-skills/webapp-testing/examples/console_logging.py +10 -4
- package/built-in-skills/webapp-testing/examples/element_discovery.py +11 -4
- package/built-in-skills/webapp-testing/examples/static_html_automation.py +14 -9
- package/built-in-skills/webapp-testing/scripts/with_server.py +34 -10
- package/built-in-skills/wechat-pay/SKILL.md +59 -0
- package/built-in-skills/weekly-review/LICENSE +21 -0
- package/built-in-skills/weekly-review/NOTICE.md +21 -0
- package/built-in-skills/weekly-review/SKILL.md +49 -0
- package/components/eaas-pi-components.manifest.json +37 -0
- package/dist/cli.cjs +75799 -20210
- package/dist/cli.js +75900 -20248
- package/dist/index.cjs +76159 -20082
- package/dist/index.d.cts +4766 -766
- package/dist/index.d.ts +4766 -766
- package/dist/index.js +76040 -19960
- package/package.json +42 -6
- package/plugins/memory/prismer/__init__.py +1215 -0
- package/plugins/memory/prismer/plugin.yaml +8 -0
- package/plugins/memory/prismer/tool-schemas.generated.json +257 -0
- package/plugins/tools/prismer-recall/__init__.py +282 -0
- package/plugins/tools/prismer-recall/plugin.yaml +15 -0
- package/built-in-skills/memory-curation/SKILL.md +0 -135
- package/built-in-skills/skill-authoring/SKILL.md +0 -124
- package/built-in-skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Hermes CLI Reference
|
|
2
|
+
|
|
3
|
+
> Maintainer reference only. Read-only diagnosis may use the deployed Hermes
|
|
4
|
+
> version; mutation, installation, provider credentials, cron, webhook, profile
|
|
5
|
+
> and lifecycle changes require a separate authorized Runtime maintenance task.
|
|
6
|
+
> These examples do not install tools or grant permissions in a tenant session.
|
|
7
|
+
> Do not copy literal secret placeholders into config; inject scoped credentials
|
|
8
|
+
> through the existing Runtime mechanism. Verify version-specific commands.
|
|
9
|
+
|
|
10
|
+
Live sources when anything looks stale: `hermes --help`, `hermes <command> --help`,
|
|
11
|
+
https://hermes-agent.nousresearch.com/docs/reference/cli-commands
|
|
12
|
+
|
|
13
|
+
### Global Flags
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
hermes [flags] [command] (no subcommand = interactive chat)
|
|
17
|
+
|
|
18
|
+
--version, -V Show version
|
|
19
|
+
-z, --oneshot PROMPT One-shot: print ONLY the final response (for scripts/pipes)
|
|
20
|
+
-m MODEL --provider P Model/provider override for this invocation
|
|
21
|
+
-t, --toolsets LIST Comma-separated toolsets for this invocation
|
|
22
|
+
--resume, -r SESSION Resume session by ID or title
|
|
23
|
+
--continue, -c [NAME] Resume by name, or most recent session
|
|
24
|
+
--worktree, -w Isolated git worktree mode (parallel agents)
|
|
25
|
+
--skills, -s SKILL Preload skills (comma-separate or repeat)
|
|
26
|
+
--profile, -p NAME Use a named profile
|
|
27
|
+
--yolo Skip dangerous command approval
|
|
28
|
+
--tui / --cli Force the Ink TUI / classic REPL
|
|
29
|
+
--ignore-rules Skip AGENTS.md/SOUL.md/memory/skill injection
|
|
30
|
+
--safe-mode Disable ALL customizations (troubleshooting)
|
|
31
|
+
--pass-session-id Include session ID in system prompt
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Chat
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
hermes chat [flags]
|
|
38
|
+
-q, --query TEXT Single query, non-interactive
|
|
39
|
+
--image PATH Attach a local image to a single query
|
|
40
|
+
-Q, --quiet Suppress banner, spinner, tool previews
|
|
41
|
+
--checkpoints Enable filesystem checkpoints (/rollback)
|
|
42
|
+
--max-turns N Cap tool-calling iterations
|
|
43
|
+
--source TAG Session source tag (default: cli)
|
|
44
|
+
```
|
|
45
|
+
(plus the global flags above)
|
|
46
|
+
|
|
47
|
+
### Configuration
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
hermes setup [section] Wizard (model|tts|terminal|gateway|tools|agent)
|
|
51
|
+
hermes model Interactive model/provider picker
|
|
52
|
+
hermes fallback [add|remove|list] Fallback provider chain
|
|
53
|
+
hermes config [show|edit|get|set|unset|path|env-path|check|migrate]
|
|
54
|
+
hermes login / logout OAuth sign-in / clear stored auth
|
|
55
|
+
hermes doctor [--fix] Check dependencies and config
|
|
56
|
+
hermes status [--all] Component status
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Tools & Skills
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
hermes tools [list|enable NAME|disable NAME] Per-platform toolsets (curses UI with no args)
|
|
63
|
+
|
|
64
|
+
hermes skills list|browse|search QUERY|inspect ID
|
|
65
|
+
hermes skills install ID Hub identifier OR a direct https://…/SKILL.md URL
|
|
66
|
+
hermes skills config Enable/disable skills per platform
|
|
67
|
+
hermes skills check|update|uninstall|publish PATH
|
|
68
|
+
hermes skills tap add REPO Add a GitHub repo as a skill source
|
|
69
|
+
hermes bundles Skill bundles (one /<name> alias loads several skills)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### MCP Servers
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
hermes mcp add NAME (--url or --command) | remove | list | test NAME
|
|
76
|
+
hermes mcp catalog | install NAME Curated catalog install
|
|
77
|
+
hermes mcp configure NAME Toggle tool selection
|
|
78
|
+
hermes mcp serve Run Hermes as an MCP server
|
|
79
|
+
```
|
|
80
|
+
Details (transport, tool discovery, catalog): `references/native-mcp.md`.
|
|
81
|
+
|
|
82
|
+
### Gateway (Messaging Platforms)
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
hermes gateway run|install|start|stop|restart|status|setup
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
20+ platforms: Telegram, Discord, Slack, WhatsApp (Baileys + Business Cloud API), iMessage (Photon — `hermes photon setup`), Signal, Email, SMS, Matrix, Mattermost, Teams, LINE, SimpleX, ntfy, Google Chat, Home Assistant, DingTalk, Feishu, WeCom, Weixin, API Server, Webhooks. Open WebUI connects via the API Server adapter. Most adapters ship under `plugins/platforms/`.
|
|
89
|
+
Docs: https://hermes-agent.nousresearch.com/docs/user-guide/messaging/
|
|
90
|
+
|
|
91
|
+
### Sessions
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
hermes sessions list|browse|rename ID TITLE|delete ID|export OUT|prune|stats
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Cron / Webhooks
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
hermes cron list|create SCHED|edit ID|pause|resume|run ID|remove|status
|
|
101
|
+
Schedules: '30m', 'every 2h', '0 9 * * *', ISO timestamp
|
|
102
|
+
hermes webhook subscribe NAME|list|remove NAME|test NAME
|
|
103
|
+
```
|
|
104
|
+
Webhook payloads/routes: `references/webhooks.md`.
|
|
105
|
+
|
|
106
|
+
### Profiles
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
hermes profile list|create NAME (--clone|--clone-all|--clone-from)|use|show|delete
|
|
110
|
+
hermes profile rename A B | alias NAME | export NAME | import FILE
|
|
111
|
+
hermes profile migrate-identity A B Retry a completed rename's session/routing identity migration
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Credentials & Pools
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
hermes auth Interactive credential manager
|
|
118
|
+
hermes auth add [PROVIDER] Add OAuth or API-key credential (nous, openai-codex, qwen-oauth, …)
|
|
119
|
+
hermes auth list|remove P IDX|reset PROVIDER|status
|
|
120
|
+
```
|
|
121
|
+
Multiple credentials per provider form a pool that rotates automatically and skips exhausted keys.
|
|
122
|
+
|
|
123
|
+
### Other
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
hermes desktop / gui Native desktop app
|
|
127
|
+
hermes dashboard Web admin panel + embedded chat (--stop / --status)
|
|
128
|
+
hermes proxy OpenAI-compatible local proxy backed by an OAuth provider
|
|
129
|
+
hermes portal Quick setup / sign in via Nous Portal
|
|
130
|
+
hermes kanban <verb> Multi-agent work-queue board
|
|
131
|
+
hermes project Named multi-folder workspaces
|
|
132
|
+
hermes skin list|use|set Switch/tweak skins (see references/themes.md)
|
|
133
|
+
hermes pets <verb> Pet mascots (see references/petdex.md)
|
|
134
|
+
hermes memory setup|status|off|reset Memory provider
|
|
135
|
+
hermes secrets bitwarden|onepassword External secret stores
|
|
136
|
+
hermes moa Mixture-of-Agents slots
|
|
137
|
+
hermes hooks / security / backup / import / checkpoints / console
|
|
138
|
+
hermes logs [-f] [errors] View agent/error logs
|
|
139
|
+
hermes send One-off message through a gateway platform
|
|
140
|
+
hermes pairing / plugins / insights / journey / computer-use
|
|
141
|
+
hermes acp ACP server (IDE integration)
|
|
142
|
+
hermes completion bash|zsh|fish
|
|
143
|
+
hermes update / uninstall / claw migrate
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Plugin- and provider-supplied subcommands (e.g. `hermes photon setup`) only appear once their plugin is installed/active.
|
|
147
|
+
|
|
148
|
+
### Where to Find Things
|
|
149
|
+
|
|
150
|
+
| Looking for... | Location |
|
|
151
|
+
|---|---|
|
|
152
|
+
| Config options | `hermes config edit` · [Configuration docs](https://hermes-agent.nousresearch.com/docs/user-guide/configuration) |
|
|
153
|
+
| Tools / toolsets | `hermes tools list` · [Tools reference](https://hermes-agent.nousresearch.com/docs/reference/tools-reference) |
|
|
154
|
+
| Skills catalog | `hermes skills browse` · [Skills catalog](https://hermes-agent.nousresearch.com/docs/reference/skills-catalog) |
|
|
155
|
+
| Provider setup | `hermes model` · [Providers guide](https://hermes-agent.nousresearch.com/docs/integrations/providers) |
|
|
156
|
+
| Env variables | `hermes config env-path` · [Env vars reference](https://hermes-agent.nousresearch.com/docs/reference/environment-variables) |
|
|
157
|
+
| Gateway logs | `~/.hermes/logs/gateway.log` (or `hermes logs`) |
|
|
158
|
+
| Sessions | `hermes sessions browse` (reads state.db) |
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Configuration, Toolsets & Voice
|
|
2
|
+
|
|
3
|
+
> Maintainer reference only. Read-only diagnosis may use the deployed Hermes
|
|
4
|
+
> version; mutation, installation, provider credentials, cron, webhook, profile
|
|
5
|
+
> and lifecycle changes require a separate authorized Runtime maintenance task.
|
|
6
|
+
> These examples do not install tools or grant permissions in a tenant session.
|
|
7
|
+
> Do not copy literal secret placeholders into config; inject scoped credentials
|
|
8
|
+
> through the existing Runtime mechanism. Verify version-specific commands.
|
|
9
|
+
|
|
10
|
+
Edit with `hermes config edit` or `hermes config set section.key value`.
|
|
11
|
+
Full reference: https://hermes-agent.nousresearch.com/docs/user-guide/configuration
|
|
12
|
+
|
|
13
|
+
### Config Sections (most-used keys)
|
|
14
|
+
|
|
15
|
+
| Section | Key options |
|
|
16
|
+
|---------|-------------|
|
|
17
|
+
| `model` | `default`, `provider`, `base_url`, `api_key`, `context_length`, `aliases` |
|
|
18
|
+
| `agent` | `max_turns` (90), `tool_use_enforcement`, `service_tier`, `verify_on_stop` |
|
|
19
|
+
| `terminal` | `backend` (local/docker/ssh/modal/daytona/singularity), `cwd`, `timeout` (180) |
|
|
20
|
+
| `compression` | `enabled`, `threshold` (0.50), `target_ratio` (0.20) |
|
|
21
|
+
| `display` | `skin`, `interface` (cli/tui), `language`, `show_reasoning`, `show_cost`, `pet` |
|
|
22
|
+
| `approvals` | `mode` (smart/manual/off), `timeout`, `cron_mode` |
|
|
23
|
+
| `stt` | `enabled`, `provider` (local/groq/openai/mistral/elevenlabs/deepinfra) |
|
|
24
|
+
| `tts` | `provider` (edge/elevenlabs/openai/minimax/mistral/neutts/gemini/piper/kittentts/deepinfra/xai) |
|
|
25
|
+
| `memory` | `memory_enabled`, `user_profile_enabled`, `provider`, `write_approval` |
|
|
26
|
+
| `security` | `redact_secrets`, `tirith_enabled`, `website_blocklist` |
|
|
27
|
+
| `delegation` | `model`, `provider`, `max_concurrent_children`, `max_iterations` (50), `max_spawn_depth` |
|
|
28
|
+
| `checkpoints` | `enabled`, `max_snapshots` (50) |
|
|
29
|
+
| `curator` | `enabled`, `consolidate` (false, opt-in aux-model consolidation), `interval_hours`, `stale_after_days` |
|
|
30
|
+
|
|
31
|
+
`hermes config check` reports sections missing from an older config.
|
|
32
|
+
|
|
33
|
+
### Toolsets
|
|
34
|
+
|
|
35
|
+
Enable/disable via `hermes tools` (interactive) or `hermes tools enable/disable NAME`.
|
|
36
|
+
Full enumeration: `TOOLSETS` dict in `toolsets.py` (`_HERMES_CORE_TOOLS` is the default bundle most platforms inherit).
|
|
37
|
+
|
|
38
|
+
| Toolset | What it provides |
|
|
39
|
+
|---------|-----------------|
|
|
40
|
+
| `web` / `search` | Web search + extraction / search-only subset |
|
|
41
|
+
| `browser` | Browser automation (Browserbase, Camofox, or local Chromium) |
|
|
42
|
+
| `terminal` | Shell commands and process management |
|
|
43
|
+
| `file` | File read/write/search/patch |
|
|
44
|
+
| `code_execution` | Sandboxed Python execution |
|
|
45
|
+
| `coding` | Code-editing helpers (LSP-backed) |
|
|
46
|
+
| `computer_use` | Desktop GUI control (cua-driver) |
|
|
47
|
+
| `vision` | Image analysis |
|
|
48
|
+
| `image_gen` | Image generation and image-to-image editing |
|
|
49
|
+
| `video` / `video_gen` | Video analysis / video generation |
|
|
50
|
+
| `x_search` | X (Twitter) search (X OAuth or API key) |
|
|
51
|
+
| `tts` | Text-to-speech |
|
|
52
|
+
| `skills` | Skill browsing and management |
|
|
53
|
+
| `memory` | Persistent cross-session memory |
|
|
54
|
+
| `session_search` | Search past conversations |
|
|
55
|
+
| `context_engine` | Pluggable context-engine hooks |
|
|
56
|
+
| `project` | Named multi-folder workspace tools |
|
|
57
|
+
| `delegation` | Subagent task delegation |
|
|
58
|
+
| `cronjob` | Scheduled task management |
|
|
59
|
+
| `clarify` | Ask user clarifying questions |
|
|
60
|
+
| `todo` | In-session task planning |
|
|
61
|
+
| `kanban` | Multi-agent work-queue tools (gated to workers) |
|
|
62
|
+
| `debugging` | Extra introspection tools (off by default) |
|
|
63
|
+
| `safe` | Minimal low-risk toolset for locked-down sessions |
|
|
64
|
+
| `spotify`, `homeassistant`, `discord`, `discord_admin`, `feishu_doc`, `feishu_drive`, `yuanbao` | Service integrations (gated on their credentials) |
|
|
65
|
+
|
|
66
|
+
Tool changes take effect on `/reset` (new session) — never mid-conversation, to preserve prompt caching.
|
|
67
|
+
|
|
68
|
+
## Voice
|
|
69
|
+
|
|
70
|
+
### STT (Voice → Text)
|
|
71
|
+
|
|
72
|
+
Voice messages from messaging platforms are auto-transcribed.
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
stt:
|
|
76
|
+
enabled: true
|
|
77
|
+
provider: local # local (faster-whisper, free) | groq | openai | mistral | elevenlabs | deepinfra
|
|
78
|
+
local:
|
|
79
|
+
model: base # tiny, base, small, medium, large-v3
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Auto-detect priority: local faster-whisper (`pip install faster-whisper`) → Groq (`GROQ_API_KEY`, free tier) → OpenAI (`VOICE_TOOLS_OPENAI_KEY`) → Mistral Voxtral (`MISTRAL_API_KEY`).
|
|
83
|
+
|
|
84
|
+
### TTS (Text → Voice)
|
|
85
|
+
|
|
86
|
+
| Provider | Env var | Free? |
|
|
87
|
+
|----------|---------|-------|
|
|
88
|
+
| Edge TTS (default) | None | Yes |
|
|
89
|
+
| ElevenLabs | `ELEVENLABS_API_KEY` | Free tier |
|
|
90
|
+
| OpenAI | `VOICE_TOOLS_OPENAI_KEY` | Paid |
|
|
91
|
+
| MiniMax | `MINIMAX_API_KEY` | Paid |
|
|
92
|
+
| Mistral | `MISTRAL_API_KEY` | Paid |
|
|
93
|
+
| Gemini | `GOOGLE_API_KEY` | Free tier |
|
|
94
|
+
| NeuTTS / Piper / KittenTTS (local) | None | Free |
|
|
95
|
+
|
|
96
|
+
Voice commands: `/voice on` (voice-to-voice), `/voice tts` (always voice), `/voice off`.
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Contributor Quick Reference
|
|
2
|
+
|
|
3
|
+
> Maintainer reference only. Read-only diagnosis may use the deployed Hermes
|
|
4
|
+
> version; mutation, installation, provider credentials, cron, webhook, profile
|
|
5
|
+
> and lifecycle changes require a separate authorized Runtime maintenance task.
|
|
6
|
+
> These examples do not install tools or grant permissions in a tenant session.
|
|
7
|
+
> Do not copy literal secret placeholders into config; inject scoped credentials
|
|
8
|
+
> through the existing Runtime mechanism. Verify version-specific commands.
|
|
9
|
+
|
|
10
|
+
For occasional contributors and PR authors. Full developer docs: https://hermes-agent.nousresearch.com/docs/developer-guide/
|
|
11
|
+
|
|
12
|
+
### Project Layout
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
hermes-agent/
|
|
16
|
+
├── run_agent.py # AIAgent — core conversation loop
|
|
17
|
+
├── model_tools.py # Tool discovery and dispatch
|
|
18
|
+
├── toolsets.py # Toolset definitions
|
|
19
|
+
├── cli.py # Interactive CLI (HermesCLI)
|
|
20
|
+
├── hermes_state.py # SQLite session store
|
|
21
|
+
├── agent/ # Prompt builder, context compression, memory, model routing, credential pooling, skill dispatch
|
|
22
|
+
├── hermes_cli/ # CLI subcommands, config, setup, commands
|
|
23
|
+
│ ├── commands.py # Slash command registry (CommandDef)
|
|
24
|
+
│ ├── config.py # DEFAULT_CONFIG, env var definitions
|
|
25
|
+
│ └── main.py # CLI entry point and argparse
|
|
26
|
+
├── tools/ # One file per tool
|
|
27
|
+
│ └── registry.py # Central tool registry
|
|
28
|
+
├── gateway/ # Messaging gateway
|
|
29
|
+
│ └── platforms/ # Platform adapters (telegram, discord, etc.)
|
|
30
|
+
├── cron/ # Job scheduler
|
|
31
|
+
├── tests/ # Extensive pytest suite (run via scripts/run_tests.sh)
|
|
32
|
+
└── website/ # Docusaurus docs site
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Config: `~/.hermes/config.yaml` (settings), `~/.hermes/.env` (API keys) — both under `$HERMES_HOME` when it is set.
|
|
36
|
+
|
|
37
|
+
### Adding a Tool
|
|
38
|
+
|
|
39
|
+
Two files. Auto-discovery imports any `tools/*.py` with a top-level
|
|
40
|
+
`registry.register()` call, but a tool is only *exposed* to an agent once
|
|
41
|
+
its name appears in a toolset.
|
|
42
|
+
|
|
43
|
+
**1. Create `tools/your_tool.py`:**
|
|
44
|
+
```python
|
|
45
|
+
import json, os
|
|
46
|
+
from tools.registry import registry
|
|
47
|
+
|
|
48
|
+
def check_requirements() -> bool:
|
|
49
|
+
return bool(os.getenv("EXAMPLE_API_KEY"))
|
|
50
|
+
|
|
51
|
+
def example_tool(param: str, task_id: str = None) -> str:
|
|
52
|
+
return json.dumps({"success": True, "data": "..."})
|
|
53
|
+
|
|
54
|
+
registry.register(
|
|
55
|
+
name="example_tool",
|
|
56
|
+
toolset="example",
|
|
57
|
+
schema={"name": "example_tool", "description": "...", "parameters": {...}},
|
|
58
|
+
handler=lambda args, **kw: example_tool(
|
|
59
|
+
param=args.get("param", ""), task_id=kw.get("task_id")),
|
|
60
|
+
check_fn=check_requirements,
|
|
61
|
+
requires_env=["EXAMPLE_API_KEY"],
|
|
62
|
+
)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**2. Wire it into a toolset in `toolsets.py`** — add the name to
|
|
66
|
+
`_HERMES_CORE_TOOLS` (every platform) or to a specific toolset.
|
|
67
|
+
|
|
68
|
+
All handlers must return JSON strings. Use `get_hermes_home()` for paths,
|
|
69
|
+
never hardcode `~/.hermes`. For custom/local-only tools, write a plugin in
|
|
70
|
+
`~/.hermes/plugins/` instead of editing core — see the developer docs.
|
|
71
|
+
|
|
72
|
+
### Adding a Slash Command
|
|
73
|
+
|
|
74
|
+
1. Add `CommandDef` to `COMMAND_REGISTRY` in `hermes_cli/commands.py`
|
|
75
|
+
2. Add handler in `cli.py` → `process_command()`
|
|
76
|
+
3. (Optional) Add gateway handler in `gateway/run.py`
|
|
77
|
+
|
|
78
|
+
All consumers (help text, autocomplete, Telegram menu, Slack mapping) derive from the central registry automatically.
|
|
79
|
+
|
|
80
|
+
### Agent Loop (High Level)
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
run_conversation():
|
|
84
|
+
1. Build system prompt
|
|
85
|
+
2. Loop while iterations < max:
|
|
86
|
+
a. Call LLM (OpenAI-format messages + tool schemas)
|
|
87
|
+
b. If tool_calls → dispatch each via handle_function_call() → append results → continue
|
|
88
|
+
c. If text response → return
|
|
89
|
+
3. Context compression triggers automatically near token limit
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Testing
|
|
93
|
+
|
|
94
|
+
Use the canonical runner — it enforces CI-parity (hermetic `env -i`, unset
|
|
95
|
+
credentials, TZ=UTC, per-file subprocess isolation via
|
|
96
|
+
`scripts/run_tests_parallel.py` — no xdist, worker count auto-scaled):
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
scripts/run_tests.sh # full suite
|
|
100
|
+
scripts/run_tests.sh tests/tools/ # one directory
|
|
101
|
+
scripts/run_tests.sh tests/tools/test_x.py # one file
|
|
102
|
+
scripts/run_tests.sh -v --tb=long # pass-through pytest flags
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
- Tests auto-redirect `HERMES_HOME` to temp dirs — never touch real `~/.hermes/`.
|
|
106
|
+
- The script probes `.venv`, then `venv`, then the shared worktree venv.
|
|
107
|
+
- **Windows:** the wrapper is POSIX-only; see `references/windows-quirks.md`
|
|
108
|
+
for the direct-pytest workaround.
|
|
109
|
+
|
|
110
|
+
**Cross-platform test guards:** tests using POSIX-only syscalls need a skip marker. Common ones already in the codebase:
|
|
111
|
+
- Symlink creation → `@pytest.mark.skipif(sys.platform == "win32", reason="Symlinks require elevated privileges on Windows")` (see `tests/cron/test_cron_script.py`)
|
|
112
|
+
- POSIX file modes (0o600, etc.) → `@pytest.mark.skipif(sys.platform.startswith("win"), reason="POSIX mode bits not enforced on Windows")` (see `tests/hermes_cli/test_auth_toctou_file_modes.py`)
|
|
113
|
+
- `signal.SIGALRM` → Unix-only (per-test timeouts no longer use it directly; see the win32 timeout-method shim in `tests/conftest.py::pytest_configure`)
|
|
114
|
+
- Live Winsock / Windows-specific regression tests → `@pytest.mark.skipif(sys.platform != "win32", reason="Windows-specific regression")`
|
|
115
|
+
|
|
116
|
+
**Monkeypatching `sys.platform` is not enough** when the code under test also calls `platform.system()` / `platform.release()` / `platform.mac_ver()`. Those functions re-read the real OS independently, so a test that sets `sys.platform = "linux"` on a Windows runner will still see `platform.system() == "Windows"` and route through the Windows branch. Patch all three together:
|
|
117
|
+
|
|
118
|
+
```python
|
|
119
|
+
monkeypatch.setattr(sys, "platform", "linux")
|
|
120
|
+
monkeypatch.setattr(platform, "system", lambda: "Linux")
|
|
121
|
+
monkeypatch.setattr(platform, "release", lambda: "6.8.0-generic")
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
See `tests/agent/test_prompt_builder.py::TestEnvironmentHints` for a worked example.
|
|
125
|
+
|
|
126
|
+
### System prompt's execution-environment block
|
|
127
|
+
|
|
128
|
+
Factual host/backend guidance (OS, `$HOME`, cwd, terminal backend, shell)
|
|
129
|
+
is emitted by `agent/prompt_builder.py::build_environment_hints()`. The key
|
|
130
|
+
invariant for prompt authors: with a **remote** terminal backend
|
|
131
|
+
(`docker, singularity, modal, daytona, ssh, managed_modal`), host info is
|
|
132
|
+
suppressed and *every* file tool runs inside the backend container — the
|
|
133
|
+
prompt must never describe the host the agent can't touch.
|
|
134
|
+
|
|
135
|
+
### Commit Conventions
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
type: concise subject line
|
|
139
|
+
|
|
140
|
+
Optional body.
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Types: `fix:`, `feat:`, `refactor:`, `docs:`, `chore:`
|
|
144
|
+
|
|
145
|
+
### Key Rules
|
|
146
|
+
|
|
147
|
+
- **Never break prompt caching** — don't change context, tools, or system prompt mid-conversation
|
|
148
|
+
- **Message role alternation** — never two assistant or two user messages in a row
|
|
149
|
+
- Use `get_hermes_home()` from `hermes_constants` for all paths (profile-safe)
|
|
150
|
+
- Config values go in `config.yaml`, secrets go in `.env`
|
|
151
|
+
- New tools need a `check_fn` so they only appear when requirements are met
|
package/built-in-skills/prismer-hermes-agent/references/delegate-task-concurrency-diagnosis.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Diagnosing delegation concurrency and total budgets
|
|
2
|
+
|
|
3
|
+
Use this as a maintainer diagnostic, not permission to spawn more workers or
|
|
4
|
+
edit a tenant's Runtime configuration. First identify the deployed Hermes
|
|
5
|
+
version and exact resolved settings. Defaults below describe the audited source
|
|
6
|
+
1a1f4a59e252e1dc0137e7b2e7bcc8b0381d19c4, not every installation.
|
|
7
|
+
|
|
8
|
+
## Distinct constraints
|
|
9
|
+
|
|
10
|
+
- delegation.max_concurrent_children: default 10 in tools/delegate_tool_config.py.
|
|
11
|
+
Configuration/env overrides and a floor of 1 apply.
|
|
12
|
+
- A batch larger than the allowed concurrent children can be rejected.
|
|
13
|
+
- Multiple delegate_task calls in one turn can be truncated by the parent.
|
|
14
|
+
- One-shot execution also has a TOTAL subagent budget (default 2 in the audited
|
|
15
|
+
code). A later call can exhaust that budget despite free concurrent slots.
|
|
16
|
+
- Nesting depth, leaf role, approval, provider failures and tool availability
|
|
17
|
+
can prevent delegation independently of these counts.
|
|
18
|
+
- A high-cost warning above 10 is emitted once; it is not itself a throttle.
|
|
19
|
+
|
|
20
|
+
## Diagnostic sequence
|
|
21
|
+
|
|
22
|
+
1. Read the task's actual model tool calls, returned errors and parent/child
|
|
23
|
+
lifecycle records. Redact prompts, credentials and tenant data.
|
|
24
|
+
2. Inspect effective config using the deployed version's read-only config
|
|
25
|
+
command; do not assume a value typed in a source file was loaded.
|
|
26
|
+
3. Compare batch length, current active workers, total children already spawned,
|
|
27
|
+
one-shot mode/budget, nesting role/depth and approvals.
|
|
28
|
+
4. Trace tools/delegate_tool_config.py, tools/delegate_tool.py and the parent
|
|
29
|
+
call limiter in the exact deployed checkout if necessary.
|
|
30
|
+
5. Search bounded logs for rejection/truncation AND one-shot budget errors.
|
|
31
|
+
Absence of a log line does not prove absence of a limiter or prove model
|
|
32
|
+
self-restraint; logging may differ by version or context.
|
|
33
|
+
6. Only attribute model-side under-dispatch when the actual emitted tool call
|
|
34
|
+
requests fewer tasks and the other constraints are verified, not from prose.
|
|
35
|
+
|
|
36
|
+
## Running the requested work
|
|
37
|
+
|
|
38
|
+
Use the exposed delegate_task tool directly when available and within all
|
|
39
|
+
budgets. It is not in the audited execute_code web/file/terminal allowlist;
|
|
40
|
+
never attempt to route it through code execution to evade a limit.
|
|
41
|
+
Queue bounded batches or perform lenses sequentially when workers are limited.
|
|
42
|
+
Do not increase concurrency, disable approval or change model automatically.
|
|
43
|
+
|
|
44
|
+
Concurrency is per-parent in the inspected code; account/provider/host-wide
|
|
45
|
+
limits can still apply. A background child is not evidence of a durable task.
|
|
46
|
+
If durable execution is required, use Prismer's task ownership and scheduler
|
|
47
|
+
contract, not a second Hermes control plane.
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Desktop App Plugins — UI Panes, Commands, Widgets
|
|
2
|
+
|
|
3
|
+
> Maintainer reference only. Read-only diagnosis may use the deployed Hermes
|
|
4
|
+
> version; mutation, installation, provider credentials, cron, webhook, profile
|
|
5
|
+
> and lifecycle changes require a separate authorized Runtime maintenance task.
|
|
6
|
+
> These examples do not install tools or grant permissions in a tenant session.
|
|
7
|
+
> Do not copy literal secret placeholders into config; inject scoped credentials
|
|
8
|
+
> through the existing Runtime mechanism. Verify version-specific commands.
|
|
9
|
+
|
|
10
|
+
Write plugins for the Hermes desktop app: statusbar items, layout panes,
|
|
11
|
+
command-palette commands, keybinds, routes, and themes. A plugin is a single
|
|
12
|
+
plain-JavaScript ESM file the app loads at runtime — no build step, no repo
|
|
13
|
+
changes. A plugin can also talk to its own Python backend namespace
|
|
14
|
+
(`ctx.rest`/`ctx.socket` → `/api/plugins/<id>`); the general Python plugin
|
|
15
|
+
system (`~/.hermes/plugins/`) is otherwise documented separately.
|
|
16
|
+
|
|
17
|
+
There are TWO on-disk doors, same contract and hot reload:
|
|
18
|
+
|
|
19
|
+
- `$HERMES_HOME/desktop-plugins/<id>/plugin.js` — standalone desktop plugin.
|
|
20
|
+
Loads enabled by default.
|
|
21
|
+
- `$HERMES_HOME/plugins/<id>/desktop/plugin.js` — the desktop HALF of a
|
|
22
|
+
unified agent-plugin package: the same folder that carries the Python
|
|
23
|
+
plugin (`plugin.yaml`) and its `dashboard/plugin_api.py` backend ships its
|
|
24
|
+
desktop UI beside them, so one feature installs/uninstalls as one folder.
|
|
25
|
+
The Electron shell copies that half into `desktop-plugins/<id>/` (with a
|
|
26
|
+
`.hermes-package.json` marker) — the ONLY root the renderer loads from — so
|
|
27
|
+
the pane is app-level and does not come and go with the selected profile.
|
|
28
|
+
This half is OPT-IN: it inventories in Capabilities → Plugins but stays off
|
|
29
|
+
until the user toggles it (matching the Python half's `plugins.enabled`
|
|
30
|
+
gate). Tell the user to flip it on after installing — don't debug a
|
|
31
|
+
"plugin not appearing" report before checking that toggle.
|
|
32
|
+
|
|
33
|
+
Full human reference (every export, area payloads, backend, security):
|
|
34
|
+
`website/docs/developer-guide/desktop-plugin-sdk.md`.
|
|
35
|
+
|
|
36
|
+
## When to Use
|
|
37
|
+
|
|
38
|
+
- The user asks for a new desktop UI element (a pane, a statusbar widget, a
|
|
39
|
+
dashboard, a command) without modifying the app itself.
|
|
40
|
+
- You want to surface data you compute (via gateway RPC) inside the app.
|
|
41
|
+
|
|
42
|
+
## Prerequisites
|
|
43
|
+
|
|
44
|
+
- The Hermes desktop app (it loads plugins; the CLI/gateway alone does not).
|
|
45
|
+
- Write access to `$HERMES_HOME/desktop-plugins/` (usually
|
|
46
|
+
`~/.hermes/desktop-plugins/`).
|
|
47
|
+
|
|
48
|
+
## How to Run
|
|
49
|
+
|
|
50
|
+
1. Create `$HERMES_HOME/desktop-plugins/<name>/plugin.js` from
|
|
51
|
+
`templates/plugin.js` (in this skill directory) — that's
|
|
52
|
+
`~/.hermes/...` by default, or `~/.hermes/profiles/<profile>/...` under a
|
|
53
|
+
named profile. Keep `<name>` equal to the plugin `id`.
|
|
54
|
+
2. The desktop app watches that directory: the plugin loads within a few
|
|
55
|
+
seconds of the file landing, and every later save hot-reloads it in
|
|
56
|
+
place. No reload step. (Fallback if it doesn't appear: ⌘K →
|
|
57
|
+
**Reload desktop plugins**.)
|
|
58
|
+
3. If loading fails the app shows a toast naming the error — fix the file
|
|
59
|
+
and save again.
|
|
60
|
+
|
|
61
|
+
## Quick Reference
|
|
62
|
+
|
|
63
|
+
The ONLY import surface is `@hermes/plugin-sdk` (plus `react` /
|
|
64
|
+
`react/jsx-runtime`, which resolve to the app's own React — write UI with
|
|
65
|
+
`jsx()` calls, not JSX syntax; the file is not compiled).
|
|
66
|
+
|
|
67
|
+
- `host.state.*` — readonly reactive atoms: `activeSessionId`, `busy`,
|
|
68
|
+
`awaitingResponse`, `busyBySession`, `cwd`, `gateway` (socket state, not
|
|
69
|
+
turn-busy), `model`, `profile`, `viewport`, plus the tile-aware focused
|
|
70
|
+
session atoms: `focusedSessionId` (runtime id — key for `session.*` RPC),
|
|
71
|
+
`focusedStoredSessionId` (durable id — navigation / list matching),
|
|
72
|
+
`focusedSessionProfile` (owner profile of the focused chat — prefer over
|
|
73
|
+
`profile` for per-bot/profile readouts; `profile` is the gateway socket's
|
|
74
|
+
home, which does not move with tab focus), and
|
|
75
|
+
`focusedUsage` (live streamed `UsageStats` of the focused session, no RPC
|
|
76
|
+
needed). `busy` is true while the focused chat is working after a send
|
|
77
|
+
(thinking and streaming). `awaitingResponse` is true until the first
|
|
78
|
+
assistant payload. `busyBySession` maps runtime session id → mid-turn,
|
|
79
|
+
for rosters that watch every session. Prefer the focused atoms for any
|
|
80
|
+
readout that should follow the user between tiles. Read with `.get()`
|
|
81
|
+
in handlers,
|
|
82
|
+
`useValue(atom)` in components.
|
|
83
|
+
- `host.request(method, params)` — gateway JSON-RPC (sessions, config,
|
|
84
|
+
skills, cron — everything the app uses).
|
|
85
|
+
- `host.onEvent(type, fn)` — live gateway events (`'*'` for all). Returns a
|
|
86
|
+
disposer.
|
|
87
|
+
- `host.notify({ kind, message })`, `host.navigate(path)`, `host.logs(...)`,
|
|
88
|
+
`host.status()`, `haptic('tap')`.
|
|
89
|
+
- `ctx.register({ id, area, order?, render?, data? })` — contribute UI.
|
|
90
|
+
Key areas: `'statusBar.right'`/`'statusBar.left'` (chips),
|
|
91
|
+
`'panes'` (layout zones — set `title` and
|
|
92
|
+
`data: { placement, dock?, width?, height? }`; the pane auto-joins a
|
|
93
|
+
matching zone), `PALETTE_AREA` (⌘K commands), `KEYBINDS_AREA` (rebindable
|
|
94
|
+
actions), `THEMES_AREA` (`data` is a full `DesktopTheme`).
|
|
95
|
+
- THEMES: registering one only lists it in the picker. Select it with
|
|
96
|
+
`useTheme().setTheme(name)` from a component, or `requestTheme(name)` from a
|
|
97
|
+
callback with no component around it (a gateway event, a socket handler).
|
|
98
|
+
`requestTheme` returns `false` for a name that doesn't resolve and leaves the
|
|
99
|
+
appearance alone, so use it as the availability check instead of coercing the
|
|
100
|
+
user back to the default skin.
|
|
101
|
+
- Pane placement: `placement: 'left'|'right'|'bottom'|'main'` is the
|
|
102
|
+
semantic role — the pane stacks (tabs) with existing panes of that role.
|
|
103
|
+
To land on a specific EDGE instead, add `dock: { pane, pos }` — the same
|
|
104
|
+
gesture as dragging onto a pane's drop chip. `pane` is any pane id
|
|
105
|
+
(`workspace` is the main thread; also `sessions`, `terminal`, `files`,
|
|
106
|
+
`review`, `logs`), `pos` is `'top'|'bottom'|'left'|'right'|'center'`.
|
|
107
|
+
E.g. "below the conversation" = `dock: { pane: 'workspace', pos: 'bottom' }`
|
|
108
|
+
— declare a `height` (e.g. `'200px'`) so it doesn't take half the zone.
|
|
109
|
+
- Full PAGES: register `area: ROUTES_AREA` with `data: { path: '/my-page' }`
|
|
110
|
+
and a `render` — the page mounts in the workspace (main) pane like any
|
|
111
|
+
built-in view. Make it reachable with a sidebar nav row:
|
|
112
|
+
`ctx.register({ id: 'nav', area: SIDEBAR_NAV_AREA, data: { path: '/my-page', label: 'My Page', codicon: 'project' } })`
|
|
113
|
+
(renders below Artifacts, lights up at the route) — and/or a
|
|
114
|
+
`PALETTE_AREA` command calling `host.navigate('/my-page')`.
|
|
115
|
+
- TRANSCRIPT directives: register `area: TRANSCRIPT_DIRECTIVE_AREA` with
|
|
116
|
+
`data: { name: 'task', render: ({ attrs, streaming }) => jsx(...) }` and
|
|
117
|
+
the assistant can render your component inline in a chat message by
|
|
118
|
+
emitting `::task{id="BB-12"}` alone on its own line. Attrs are untrusted
|
|
119
|
+
`key="value"` strings — validate them. Unclaimed/malformed directives fall
|
|
120
|
+
back to plain text; core's own `::preview{file="…"}` is the reference.
|
|
121
|
+
After registering one, TELL the model it exists (a bundled skill or the
|
|
122
|
+
user's instructions) — it won't discover the name on its own.
|
|
123
|
+
- `ctx.storage.get/set/remove` — persistence namespaced to your plugin.
|
|
124
|
+
- `ctx.os` — the curated OS door, attributed to your plugin:
|
|
125
|
+
`ctx.os.notify({ title, body?, silent?, icon?, activate?, onActivate?, actions? })`
|
|
126
|
+
posts a native OS notification. Fires only while the user is away from Hermes
|
|
127
|
+
(use `host.notify` for the in-app toast); gated by Settings ▸ Notifications ▸
|
|
128
|
+
"Plugin notifications" and throttled per plugin — reserve it for genuinely
|
|
129
|
+
notable events. `activate` accepts a plugin deep link
|
|
130
|
+
(`hermes://index-network/intent/1`), a hash path (`/index-network/intent/1`),
|
|
131
|
+
or `{ path, params }` — same resolver as OS deep links. Action buttons may
|
|
132
|
+
set their own `activate` or an `onAction`
|
|
133
|
+
callback (renderer-only; only the action id crosses IPC).
|
|
134
|
+
`ctx.os.openExternal(url)`, `ctx.os.revealPath(path)`, and
|
|
135
|
+
`ctx.os.writeClipboard(text)` resolve `false` (never throw) when the
|
|
136
|
+
capability isn't available.
|
|
137
|
+
- `ctx.i18n.register({ en, ja, ... })` — ship your OWN locale bundles, scoped
|
|
138
|
+
to your plugin (never edit core `en.ts`). Values are literal strings or
|
|
139
|
+
interpolator functions; nested trees are addressed by dot-path. Read them
|
|
140
|
+
reactively in components with `usePluginI18n(id)` returning `t('key', ...args)`
|
|
141
|
+
(re-renders on a locale switch), or via `ctx.i18n.t` in handlers/stores.
|
|
142
|
+
Resolution follows the app's active locale, then your `en`, then the raw key.
|
|
143
|
+
- Data: `useQuery`/`useMutation`/`useQueryClient`/`queryClient` (the app's ONE
|
|
144
|
+
React Query client — cache, dedupe, `refetchInterval`, invalidate like core;
|
|
145
|
+
never hand-roll a poll loop), plus `atom`/`computed` for plugin-local state.
|
|
146
|
+
- Backend: if the plugin ships a Python `plugin_api.py` (under
|
|
147
|
+
`~/.hermes/plugins/<id>/dashboard/`, manifest `"api": "plugin_api.py"`), reach
|
|
148
|
+
it with `ctx.rest('/path', { method?, body?, timeoutMs? })` and its live twin
|
|
149
|
+
`ctx.socket('/events', onMessage)` — both scoped to `/api/plugins/<id>` by
|
|
150
|
+
construction (traversal rejected). `ctx.socket` is a **no-op on OAuth
|
|
151
|
+
remotes**, so always keep a polling fallback. The Python backend is imported
|
|
152
|
+
only when the plugin is in `plugins.enabled` in `config.yaml` (separate from
|
|
153
|
+
the in-app enable toggle). For gateway-wide data use `host.request` /
|
|
154
|
+
`host.onEvent` instead.
|
|
155
|
+
- `Contribute` (mount-scoped): render `jsx(Contribute, { area, id, children })`
|
|
156
|
+
inside a component so page-owned chrome (e.g. a titlebar control in
|
|
157
|
+
`TITLEBAR_AREAS.center`) leaves when the page unmounts — `ctx.register` is for
|
|
158
|
+
permanent contributions.
|
|
159
|
+
- `defaultEnabled: false` on the default export ships an opt-in plugin: it
|
|
160
|
+
inventories in Settings → Plugins, off until the user flips it on.
|
|
161
|
+
- Users manage plugins in Settings → Plugins (enable/disable live, reveal
|
|
162
|
+
folder). A disabled plugin stays disabled across restarts — don't fight
|
|
163
|
+
it; the user turned you off.
|
|
164
|
+
- UI: the app's design language, importable directly — `Button`, `Input`,
|
|
165
|
+
`Textarea`, `Select*`, `Switch`, `Checkbox`, `SegmentedControl`, `Tabs*`,
|
|
166
|
+
`Dialog*`, `ConfirmDialog`, `DropdownMenu*`, `ContextMenu*`, `Popover*`,
|
|
167
|
+
`Tip`/`Tooltip*`, `Badge`, `Kbd`/`KbdGroup`, `SearchField`, `ScrollArea`,
|
|
168
|
+
`Separator`, `Skeleton`, `GlyphSpinner`, `EmptyState`, `ErrorState`,
|
|
169
|
+
`CopyButton`, `StatusDot`, `LogView`, `Codicon`, `DecodeText`, plus `cn`
|
|
170
|
+
and `icons.*`. Prefer these over hand-rolled elements so the plugin looks
|
|
171
|
+
native; style with theme vars, never hardcoded colors.
|
|
172
|
+
|
|
173
|
+
## Procedure
|
|
174
|
+
|
|
175
|
+
1. Pick a short kebab-case `id`; the folder name must match.
|
|
176
|
+
2. Start from `templates/plugin.js`; keep the default export shape
|
|
177
|
+
(`{ id, name, register(ctx) }`).
|
|
178
|
+
3. For a pane, register `area: 'panes'` with a `placement` hint and a
|
|
179
|
+
`render` returning your component — the app places it into a sensible
|
|
180
|
+
zone automatically; the user can drag it anywhere afterwards.
|
|
181
|
+
4. Fetch data with `host.request` and/or subscribe with `host.onEvent`;
|
|
182
|
+
never poll faster than a few seconds.
|
|
183
|
+
5. Write the file with your file tools, then ask the user to run
|
|
184
|
+
**Reload desktop plugins** from ⌘K.
|
|
185
|
+
|
|
186
|
+
## Pitfalls
|
|
187
|
+
|
|
188
|
+
- NEVER hardcode colors or backgrounds (`#000`, `black`, `rgb(...)`). Panes
|
|
189
|
+
already sit on the app's editor background — leave the background alone
|
|
190
|
+
and use theme variables for everything else: `var(--ui-text-secondary)`,
|
|
191
|
+
`var(--ui-text-quaternary)`, `var(--ui-stroke-secondary)`,
|
|
192
|
+
`var(--ui-accent)`. For canvas drawing, resolve them once with
|
|
193
|
+
`getComputedStyle(canvas).getPropertyValue('--ui-accent')`.
|
|
194
|
+
- Reference only what you imported — a component you forgot to import
|
|
195
|
+
(e.g. `StatusDot`) is a ReferenceError at render. Double-check every
|
|
196
|
+
identifier in your `jsx()` calls appears in the import line.
|
|
197
|
+
- Canvas panes MUST track their container with a `ResizeObserver` and
|
|
198
|
+
re-size the canvas (width/height attributes, not just CSS) — panes resize
|
|
199
|
+
constantly (sash drags, layout switches); a mount-time-only size leaves
|
|
200
|
+
blank space or blurry scaling.
|
|
201
|
+
- JSX syntax will not parse — the file loads uncompiled. Use
|
|
202
|
+
`jsx('div', { children: ... })` from `react/jsx-runtime`.
|
|
203
|
+
- Do not import anything except `@hermes/plugin-sdk`, `react`, and
|
|
204
|
+
`react/jsx-runtime`; other specifiers fail to resolve.
|
|
205
|
+
- Handlers must read state imperatively (`$atom.get()`), never from render
|
|
206
|
+
closures — rapid events will otherwise see stale values.
|
|
207
|
+
- Keep components small; subscribe (`useValue`) only in the leaf that
|
|
208
|
+
renders the value.
|
|
209
|
+
|
|
210
|
+
## Verification
|
|
211
|
+
|
|
212
|
+
- The plugin's UI appears after **Reload desktop plugins**.
|
|
213
|
+
- No error toast ("Plugin <name> failed to load") appears; if it does, the
|
|
214
|
+
message names the failure — fix and reload.
|
|
215
|
+
- For panes: the new zone is visible and draggable like any core pane.
|