@mseep/open-computer-use 1.0.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/.coderabbit.yaml +25 -0
- package/.dockerignore +95 -0
- package/.env.example +137 -0
- package/.githooks/pre-commit +68 -0
- package/.github/CODEOWNERS +125 -0
- package/.github/ISSUE_TEMPLATE/adr-proposal.md +41 -0
- package/.github/ISSUE_TEMPLATE/bug-report.md +49 -0
- package/.github/ISSUE_TEMPLATE/component-proposal.md +38 -0
- package/.github/ISSUE_TEMPLATE/config.yml +15 -0
- package/.github/ISSUE_TEMPLATE/dependency-proposal.md +59 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +15 -0
- package/.github/ISSUE_TEMPLATE/nfr-proposal.md +44 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +15 -0
- package/.github/codeql/codeql-config.yml +11 -0
- package/.github/codeql/extensions/security-models/python-sanitizers.model.yml +17 -0
- package/.github/codeql/extensions/security-models/qlpack.yml +7 -0
- package/.github/dependabot.yml +23 -0
- package/.github/security-exceptions.yml +23 -0
- package/.github/workflows/build.yml +420 -0
- package/.github/workflows/codeql.yml +33 -0
- package/.github/workflows/contracts-lint.yml +90 -0
- package/.github/workflows/docs-lint.yml +151 -0
- package/.github/workflows/helm.yml +131 -0
- package/.github/workflows/identity-lint.yml +30 -0
- package/.github/workflows/release-chart.yml +177 -0
- package/.github/workflows/release.yml +95 -0
- package/.github/workflows/security.yml +332 -0
- package/.github/workflows/stale.yml +31 -0
- package/.github/workflows/supply-chain.yml +242 -0
- package/.gitleaks.toml +53 -0
- package/.markdownlint.yaml +51 -0
- package/.semgrepignore +85 -0
- package/.vale/styles/Architecture/ap13-data-class-substrate.yml +12 -0
- package/.vale/styles/Architecture/banned-phrases.yml +23 -0
- package/.vale/styles/Architecture/banned-vocab.yml +23 -0
- package/.vale/styles/Architecture/marketing-tone.yml +19 -0
- package/.vale.ini +18 -0
- package/CHANGELOG.md +411 -0
- package/CLAUDE.md +218 -0
- package/CONTRIBUTING.md +82 -0
- package/Dockerfile +676 -0
- package/LICENSE +98 -0
- package/LICENSE-APACHE +202 -0
- package/LICENSE-MIT +21 -0
- package/NOTICE +36 -0
- package/README.md +516 -0
- package/SECURITY.md +45 -0
- package/THIRD-PARTY-LICENSES.md +14 -0
- package/apt-packages.txt +108 -0
- package/computer-use-server/.dockerignore +13 -0
- package/computer-use-server/Dockerfile +44 -0
- package/computer-use-server/README.md +84 -0
- package/computer-use-server/app.py +1544 -0
- package/computer-use-server/bin/list-subagent-models +449 -0
- package/computer-use-server/cli-defaults/README.md +31 -0
- package/computer-use-server/cli-defaults/codex.json +7 -0
- package/computer-use-server/cli-defaults/opencode.json +18 -0
- package/computer-use-server/cli_adapters/__init__.py +46 -0
- package/computer-use-server/cli_adapters/claude.py +163 -0
- package/computer-use-server/cli_adapters/codex.py +163 -0
- package/computer-use-server/cli_adapters/opencode.py +169 -0
- package/computer-use-server/cli_adapters/result.py +34 -0
- package/computer-use-server/cli_runtime.py +316 -0
- package/computer-use-server/context_vars.py +24 -0
- package/computer-use-server/docker_manager.py +1100 -0
- package/computer-use-server/docs_html.py +12 -0
- package/computer-use-server/mcp_resources.py +170 -0
- package/computer-use-server/mcp_tools.py +1430 -0
- package/computer-use-server/requirements.txt +17 -0
- package/computer-use-server/security.py +50 -0
- package/computer-use-server/skill_manager.py +664 -0
- package/computer-use-server/static/browser-viewer.js +445 -0
- package/computer-use-server/static/chart.umd.js +14 -0
- package/computer-use-server/static/docs.html +203 -0
- package/computer-use-server/static/github-dark.min.css +10 -0
- package/computer-use-server/static/github.min.css +10 -0
- package/computer-use-server/static/highlight.min.js +1213 -0
- package/computer-use-server/static/highlightjs-line-numbers.min.js +1 -0
- package/computer-use-server/static/icons.js +74 -0
- package/computer-use-server/static/jszip.min.js +13 -0
- package/computer-use-server/static/katex/auto-render.min.js +1 -0
- package/computer-use-server/static/katex/fonts/KaTeX_AMS-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_AMS-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Bold.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Bold.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Bold.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-BoldItalic.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Italic.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Italic.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-BoldItalic.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-Italic.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-Italic.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Bold.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Italic.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Script-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Script-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size1-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size1-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size2-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size2-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size3-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size3-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size4-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size4-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Typewriter-Regular.woff +0 -0
- package/computer-use-server/static/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/computer-use-server/static/katex/katex.min.css +1 -0
- package/computer-use-server/static/katex/katex.min.js +1 -0
- package/computer-use-server/static/locale.js +242 -0
- package/computer-use-server/static/mammoth.browser.min.js +21 -0
- package/computer-use-server/static/marked.min.js +6 -0
- package/computer-use-server/static/mermaid.min.js +2811 -0
- package/computer-use-server/static/pdf.min.js +22 -0
- package/computer-use-server/static/pdf.worker.min.js +22 -0
- package/computer-use-server/static/pptxviewjs.min.js +1 -0
- package/computer-use-server/static/preact-htm.min.js +1 -0
- package/computer-use-server/static/preview.css +1030 -0
- package/computer-use-server/static/preview.js +1522 -0
- package/computer-use-server/static/xlsx.full.min.js +22 -0
- package/computer-use-server/static/xterm-addon-fit.min.js +2 -0
- package/computer-use-server/static/xterm-addon-web-links.min.js +2 -0
- package/computer-use-server/static/xterm.css +218 -0
- package/computer-use-server/static/xterm.min.js +2 -0
- package/computer-use-server/system_prompt.py +761 -0
- package/computer-use-server/uploads.py +82 -0
- package/contracts/README.md +53 -0
- package/contracts/audit/audit-fanin.asyncapi.yaml +407 -0
- package/contracts/exec/exec-channel.schema.json +240 -0
- package/contracts/mcp/2025-06-18/ocu-constraints.schema.json +178 -0
- package/contracts/storage/file-artifact-api.schema.json +390 -0
- package/contracts/storage/file-ops.schema.json +217 -0
- package/contracts/storage/mount-config.schema.json +197 -0
- package/cron/Dockerfile +15 -0
- package/cron/cleanup-quick.sh +21 -0
- package/cron/cleanup.sh +127 -0
- package/data/outputs/.gitkeep +0 -0
- package/data/uploads/.gitkeep +0 -0
- package/docker-compose.test.yml +54 -0
- package/docker-compose.webui.yml +77 -0
- package/docker-compose.yml +96 -0
- package/docs/CLOUD.md +29 -0
- package/docs/COMPARISON.md +128 -0
- package/docs/DOCKER.md +469 -0
- package/docs/DYNAMIC-SKILLS.md +77 -0
- package/docs/FEATURES.md +100 -0
- package/docs/INSTALL.md +111 -0
- package/docs/KNOWN-BUGS.md +86 -0
- package/docs/MCP.md +320 -0
- package/docs/SCREENSHOTS.md +39 -0
- package/docs/SKILLS-USER-GUIDE.md +86 -0
- package/docs/SKILLS.md +483 -0
- package/docs/TERMINAL-TAB.md +56 -0
- package/docs/architecture/02-trust-boundaries.md +224 -0
- package/docs/architecture/03-c4-context.md +61 -0
- package/docs/architecture/04-bounded-contexts.md +119 -0
- package/docs/architecture/05-c4-container.md +88 -0
- package/docs/architecture/06-threat-model.md +172 -0
- package/docs/architecture/08-contracts.md +105 -0
- package/docs/architecture/MANIFESTO.md +38 -0
- package/docs/architecture/PROCESS.md +64 -0
- package/docs/architecture/README.md +37 -0
- package/docs/architecture/adr/0000-template.md +65 -0
- package/docs/architecture/adr/0001-layer-0-gate-legacy-exclusion.md +75 -0
- package/docs/architecture/adr/0002-session-view-descriptor.md +57 -0
- package/docs/architecture/adr/0003-sandbox-runtime-tier-ladder.md +63 -0
- package/docs/architecture/adr/0004-operator-authentication-substrate.md +63 -0
- package/docs/architecture/adr/0005-egress-credential-delivery-envoy-sds.md +62 -0
- package/docs/architecture/adr/0006-egress-forward-proxy-substrate.md +65 -0
- package/docs/architecture/adr/0007-egress-auth-mechanism.md +72 -0
- package/docs/architecture/adr/0008-session-egress-attribution.md +59 -0
- package/docs/architecture/adr/0009-audit-pipeline-pluggable-by-contract.md +76 -0
- package/docs/architecture/adr/0010-storage-backend-pluggable-adapter.md +60 -0
- package/docs/architecture/adr/0011-storage-egress-lane.md +67 -0
- package/docs/architecture/adr/0012-implementation-language.md +67 -0
- package/docs/architecture/adr/0020-sandbox-image-provisioning.md +82 -0
- package/docs/architecture/adr/README.md +53 -0
- package/docs/architecture/compliance/.gitkeep +0 -0
- package/docs/architecture/components/00-overview.md +42 -0
- package/docs/architecture/components/0000-template.md +50 -0
- package/docs/architecture/components/01-mcp-gateway.md +80 -0
- package/docs/architecture/components/02-control-operator-api.md +80 -0
- package/docs/architecture/components/04-storage-broker.md +104 -0
- package/docs/architecture/components/05-session-sandbox.md +93 -0
- package/docs/architecture/components/06-egress-trust-edge.md +95 -0
- package/docs/architecture/components/07-audit-pipeline.md +110 -0
- package/docs/architecture/diagrams/.gitkeep +0 -0
- package/docs/architecture/diagrams/02-trust-boundaries.mmd +111 -0
- package/docs/architecture/diagrams/06-threat-model.mmd +41 -0
- package/docs/architecture/diagrams/08-contracts.mmd +47 -0
- package/docs/architecture/diagrams/c4-container.mmd +59 -0
- package/docs/architecture/diagrams/c4-context.mmd +46 -0
- package/docs/architecture/glossary.md +172 -0
- package/docs/architecture/manifesto/.gitkeep +0 -0
- package/docs/architecture/manifesto/01-audience-and-buyer.md +57 -0
- package/docs/architecture/manifesto/02-nfrs.md +325 -0
- package/docs/architecture/manifesto/03-non-negotiables.md +35 -0
- package/docs/architecture/manifesto/04-non-goals.md +23 -0
- package/docs/architecture/manifesto/05-licensing-posture.md +61 -0
- package/docs/architecture/manifesto/06-starter-mode-policy.md +49 -0
- package/docs/architecture/manifesto/07-governance.md +60 -0
- package/docs/architecture/primitives-backlog.md +51 -0
- package/docs/architecture.svg +117 -0
- package/docs/claude-code-gateway.md +173 -0
- package/docs/cli-config-templates.md +240 -0
- package/docs/data-flow.svg +72 -0
- package/docs/demo-landing-page.gif +0 -0
- package/docs/demo-qwen-trending.gif +0 -0
- package/docs/dynamic-skills.svg +77 -0
- package/docs/file-flow.svg +126 -0
- package/docs/future-architecture/README.md +152 -0
- package/docs/future-architecture/adr/0001-control-plane-language-go.md +80 -0
- package/docs/future-architecture/adr/0002-guest-agent-language-go.md +84 -0
- package/docs/future-architecture/adr/0003-docker-poc-first-then-k8s.md +37 -0
- package/docs/future-architecture/adr/0004-pluggable-runtime-via-runtimeclass.md +34 -0
- package/docs/future-architecture/adr/0005-mcp-as-control-plane-gateway.md +34 -0
- package/docs/future-architecture/adr/0006-no-agpl-no-bsl-dependencies.md +41 -0
- package/docs/future-architecture/adr/0007-superseded-by-future-architecture.md +37 -0
- package/docs/future-architecture/adr/0008-internal-grpc-external-rest-mcp.md +106 -0
- package/docs/future-architecture/adr/0009-external-protocol-dialects.md +94 -0
- package/docs/future-architecture/adr/0010-lambda-as-inspiration-not-runtime.md +86 -0
- package/docs/future-architecture/adr/0011-kata-as-first-class-dind-runtime.md +84 -0
- package/docs/future-architecture/antipatterns.md +552 -0
- package/docs/future-architecture/architecture/01-layers.md +109 -0
- package/docs/future-architecture/architecture/02-layer4-control-plane.md +122 -0
- package/docs/future-architecture/architecture/03-layer3-providers.md +174 -0
- package/docs/future-architecture/architecture/04-layer2-runtimes.md +114 -0
- package/docs/future-architecture/architecture/04b-credential-broker.md +153 -0
- package/docs/future-architecture/architecture/05-layer1-guest-agent.md +138 -0
- package/docs/future-architecture/architecture/06-storage.md +134 -0
- package/docs/future-architecture/architecture/07-security.md +194 -0
- package/docs/future-architecture/architecture/08-networking.md +149 -0
- package/docs/future-architecture/architecture/09-templates.md +122 -0
- package/docs/future-architecture/architecture/10-observability.md +121 -0
- package/docs/future-architecture/design-notes.md +72 -0
- package/docs/future-architecture/gaps.md +281 -0
- package/docs/future-architecture/phase-template.md +123 -0
- package/docs/future-architecture/references.md +225 -0
- package/docs/future-architecture/research/01-kata-containers.md +100 -0
- package/docs/future-architecture/research/02-e2b-infra.md +133 -0
- package/docs/future-architecture/research/03-coder.md +115 -0
- package/docs/future-architecture/research/04-cloud-hypervisor.md +99 -0
- package/docs/future-architecture/research/05-firecracker.md +114 -0
- package/docs/future-architecture/research/06-agent-sandbox.md +142 -0
- package/docs/future-architecture/research/07-chromedp.md +78 -0
- package/docs/future-architecture/research/08-microsandbox.md +78 -0
- package/docs/future-architecture/research/09-agentbox.md +135 -0
- package/docs/future-architecture/research/10-sysbox.md +100 -0
- package/docs/future-architecture/research/11-firecracker-containerd.md +93 -0
- package/docs/future-architecture/research/12-docker-socket-proxy.md +59 -0
- package/docs/future-architecture/research/14-e2b-desktop-and-surf.md +107 -0
- package/docs/future-architecture/research/18-open-webui-terminals-observed.md +135 -0
- package/docs/future-architecture/research/bank-buyer.md +96 -0
- package/docs/future-architecture/research/enthusiast-audience.md +106 -0
- package/docs/future-architecture/research/proof-uipath-anthropic-2026-05.md +76 -0
- package/docs/future-architecture/research/widemoat-thesis-advisor.md +124 -0
- package/docs/future-architecture/roadmap.md +438 -0
- package/docs/kata-runtime.md +267 -0
- package/docs/kubernetes.md +86 -0
- package/docs/logo.png +0 -0
- package/docs/multi-cli.md +161 -0
- package/docs/openwebui-filter.md +134 -0
- package/docs/roadmap/implementation-roadmap.md +104 -0
- package/docs/sandbox-contents.svg +229 -0
- package/docs/screenshots/01-create-document.png +0 -0
- package/docs/screenshots/02-file-preview.png +0 -0
- package/docs/screenshots/03-browser-viewer.png +0 -0
- package/docs/screenshots/04-sub-agent-terminal.png +0 -0
- package/docs/screenshots/05-chat-overview.png +0 -0
- package/docs/screenshots/06-sub-agent-dashboard.png +0 -0
- package/docs/screenshots/07-frontend-design-skill.png +0 -0
- package/docs/screenshots/08-pptx-skill.png +0 -0
- package/docs/screenshots/09-skill-creator.png +0 -0
- package/docs/screenshots/10-data-chart.png +0 -0
- package/docs/shared-browser.svg +102 -0
- package/docs/system-prompt.md +113 -0
- package/docs/terminal-flow.svg +69 -0
- package/examples/helm/README.md +20 -0
- package/examples/helm/standalone/values.yaml +49 -0
- package/examples/helm/with-open-webui/README.md +99 -0
- package/examples/helm/with-open-webui/values-computer-use.yaml +32 -0
- package/examples/helm/with-open-webui/values-open-webui.yaml +67 -0
- package/fonts/NotoEmoji-Regular.ttf +0 -0
- package/helm/computer-use-server/.helmignore +17 -0
- package/helm/computer-use-server/Chart.yaml +32 -0
- package/helm/computer-use-server/README.md +211 -0
- package/helm/computer-use-server/templates/NOTES.txt +66 -0
- package/helm/computer-use-server/templates/_helpers.tpl +115 -0
- package/helm/computer-use-server/templates/configmap-dind-init.yaml +82 -0
- package/helm/computer-use-server/templates/configmap.yaml +18 -0
- package/helm/computer-use-server/templates/deployment.yaml +248 -0
- package/helm/computer-use-server/templates/ingress.yaml +38 -0
- package/helm/computer-use-server/templates/networkpolicy.yaml +50 -0
- package/helm/computer-use-server/templates/pdb.yaml +16 -0
- package/helm/computer-use-server/templates/pvc-data.yaml +20 -0
- package/helm/computer-use-server/templates/pvc-skills-cache.yaml +20 -0
- package/helm/computer-use-server/templates/pvc-user-data.yaml +20 -0
- package/helm/computer-use-server/templates/pvc-var-lib-docker.yaml +27 -0
- package/helm/computer-use-server/templates/secret.yaml +23 -0
- package/helm/computer-use-server/templates/service.yaml +22 -0
- package/helm/computer-use-server/templates/serviceaccount.yaml +15 -0
- package/helm/computer-use-server/templates/tests/test-health.yaml +23 -0
- package/helm/computer-use-server/values.schema.json +183 -0
- package/helm/computer-use-server/values.yaml +297 -0
- package/lychee.toml +36 -0
- package/openwebui/Dockerfile +52 -0
- package/openwebui/README.md +38 -0
- package/openwebui/functions/README.md +48 -0
- package/openwebui/functions/computer_link_filter.py +487 -0
- package/openwebui/init.sh +305 -0
- package/openwebui/patches/README.md +44 -0
- package/openwebui/patches/fix_artifacts_auto_show.py +441 -0
- package/openwebui/patches/fix_attached_files_position.py +87 -0
- package/openwebui/patches/fix_large_tool_args.py +156 -0
- package/openwebui/patches/fix_large_tool_results.py +289 -0
- package/openwebui/patches/fix_preview_url_detection.py +230 -0
- package/openwebui/patches/fix_skip_embedding_chat_files.py +229 -0
- package/openwebui/patches/fix_skip_rag_files_native_fc.py +100 -0
- package/openwebui/patches/fix_tool_loop_errors.py +510 -0
- package/package.json +39 -0
- package/requirements.txt +112 -0
- package/scripts/check-config.sh +141 -0
- package/scripts/docs-lint/ai-slop-detector.sh +202 -0
- package/scripts/docs-lint/architecture-tree-whitelist.sh +131 -0
- package/scripts/docs-lint/ascii-diagram-detector.sh +58 -0
- package/scripts/docs-lint/front-matter-validator.sh +97 -0
- package/scripts/docs-lint/gitignored-ref-detector.sh +122 -0
- package/scripts/docs-lint/identity-email-detector.sh +48 -0
- package/scripts/docs-lint/test-linters.sh +354 -0
- package/scripts/docs-lint/wc-budget.sh +61 -0
- package/scripts/githooks/pre-push +75 -0
- package/server.json +13 -0
- package/settings-wrapper/Dockerfile +9 -0
- package/settings-wrapper/README.md +119 -0
- package/settings-wrapper/app.py +113 -0
- package/settings-wrapper/requirements.txt +2 -0
- package/settings-wrapper/skills.json +25 -0
- package/skills/README.md +46 -0
- package/skills/examples/algorithmic-art/SKILL.md +405 -0
- package/skills/examples/algorithmic-art/templates/generator_template.js +223 -0
- package/skills/examples/algorithmic-art/templates/viewer.html +601 -0
- package/skills/examples/artifacts-builder/SKILL.md +74 -0
- package/skills/examples/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/examples/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/examples/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/examples/canvas-design/LICENSE.txt +202 -0
- package/skills/examples/canvas-design/SKILL.md +130 -0
- package/skills/examples/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/examples/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/examples/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/examples/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/examples/copy-editing/SKILL.md +447 -0
- package/skills/examples/copy-editing/evals/evals.json +89 -0
- package/skills/examples/copy-editing/references/plain-english-alternatives.md +394 -0
- package/skills/examples/internal-comms/LICENSE.txt +202 -0
- package/skills/examples/internal-comms/SKILL.md +32 -0
- package/skills/examples/internal-comms/examples/3p-updates.md +47 -0
- package/skills/examples/internal-comms/examples/company-newsletter.md +65 -0
- package/skills/examples/internal-comms/examples/faq-answers.md +30 -0
- package/skills/examples/internal-comms/examples/general-comms.md +16 -0
- package/skills/examples/mcp-builder/SKILL.md +328 -0
- package/skills/examples/mcp-builder/reference/evaluation.md +602 -0
- package/skills/examples/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/skills/examples/mcp-builder/reference/node_mcp_server.md +916 -0
- package/skills/examples/mcp-builder/reference/python_mcp_server.md +752 -0
- package/skills/examples/mcp-builder/scripts/connections.py +151 -0
- package/skills/examples/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/examples/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/examples/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/examples/product-marketing-context/SKILL.md +241 -0
- package/skills/examples/product-marketing-context/evals/evals.json +85 -0
- package/skills/examples/single-cell-rna-qc/SKILL.md +175 -0
- package/skills/examples/single-cell-rna-qc/references/scverse_qc_guidelines.md +186 -0
- package/skills/examples/single-cell-rna-qc/scripts/qc_analysis.py +232 -0
- package/skills/examples/single-cell-rna-qc/scripts/qc_core.py +233 -0
- package/skills/examples/single-cell-rna-qc/scripts/qc_plotting.py +235 -0
- package/skills/examples/skill-creator/SKILL.md +355 -0
- package/skills/examples/skill-creator/references/output-patterns.md +82 -0
- package/skills/examples/skill-creator/references/workflows.md +28 -0
- package/skills/examples/skill-creator/scripts/init_skill.py +303 -0
- package/skills/examples/skill-creator/scripts/package_skill.py +110 -0
- package/skills/examples/skill-creator/scripts/quick_validate.py +95 -0
- package/skills/examples/slack-gif-creator/SKILL.md +254 -0
- package/skills/examples/slack-gif-creator/core/easing.py +234 -0
- package/skills/examples/slack-gif-creator/core/frame_composer.py +176 -0
- package/skills/examples/slack-gif-creator/core/gif_builder.py +269 -0
- package/skills/examples/slack-gif-creator/core/validators.py +136 -0
- package/skills/examples/slack-gif-creator/requirements.txt +4 -0
- package/skills/examples/social-content/SKILL.md +278 -0
- package/skills/examples/social-content/evals/evals.json +92 -0
- package/skills/examples/social-content/references/platforms.md +170 -0
- package/skills/examples/social-content/references/post-templates.md +177 -0
- package/skills/examples/social-content/references/reverse-engineering.md +195 -0
- package/skills/examples/theme-factory/SKILL.md +59 -0
- package/skills/examples/theme-factory/theme-showcase.pdf +0 -0
- package/skills/examples/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/examples/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/examples/theme-factory/themes/desert-rose.md +19 -0
- package/skills/examples/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/examples/theme-factory/themes/golden-hour.md +19 -0
- package/skills/examples/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/examples/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/examples/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/examples/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/examples/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/examples/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/examples/web-artifacts-builder/SKILL.md +74 -0
- package/skills/examples/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/examples/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/examples/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/examples/writing-skills/SKILL.md +655 -0
- package/skills/examples/writing-skills/anthropic-best-practices.md +1150 -0
- package/skills/examples/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
- package/skills/examples/writing-skills/graphviz-conventions.dot +172 -0
- package/skills/examples/writing-skills/persuasion-principles.md +187 -0
- package/skills/examples/writing-skills/render-graphs.js +168 -0
- package/skills/examples/writing-skills/testing-skills-with-subagents.md +384 -0
- package/skills/public/describe-image/SKILL.md +105 -0
- package/skills/public/describe-image/scripts/describe.py +389 -0
- package/skills/public/doc-coauthoring/SKILL.md +375 -0
- package/skills/public/docx/LICENSE.txt +30 -0
- package/skills/public/docx/SKILL.md +199 -0
- package/skills/public/docx/docx-js.md +350 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/public/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/public/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/public/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/public/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/public/docx/ooxml/scripts/pack.py +159 -0
- package/skills/public/docx/ooxml/scripts/unpack.py +29 -0
- package/skills/public/docx/ooxml/scripts/validate.py +69 -0
- package/skills/public/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/public/docx/ooxml/scripts/validation/base.py +951 -0
- package/skills/public/docx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/public/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/public/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/public/docx/ooxml.md +632 -0
- package/skills/public/docx/scripts/__init__.py +1 -0
- package/skills/public/docx/scripts/document.py +1292 -0
- package/skills/public/docx/scripts/templates/comments.xml +3 -0
- package/skills/public/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/public/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/public/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/public/docx/scripts/templates/people.xml +3 -0
- package/skills/public/docx/scripts/utilities.py +374 -0
- package/skills/public/file-reading/LICENSE.txt +30 -0
- package/skills/public/file-reading/SKILL.md +350 -0
- package/skills/public/frontend-design/LICENSE.txt +177 -0
- package/skills/public/frontend-design/SKILL.md +42 -0
- package/skills/public/gitlab-explorer/SKILL.md +174 -0
- package/skills/public/gitlab-explorer/references/git-commands.md +323 -0
- package/skills/public/gitlab-explorer/references/glab-commands.md +282 -0
- package/skills/public/gitlab-explorer/scripts/check_gitlab_auth.sh +109 -0
- package/skills/public/pdf/FORMS.md +205 -0
- package/skills/public/pdf/REFERENCE.md +612 -0
- package/skills/public/pdf/SKILL.md +364 -0
- package/skills/public/pdf/scripts/check_bounding_boxes.py +70 -0
- package/skills/public/pdf/scripts/check_bounding_boxes_test.py +226 -0
- package/skills/public/pdf/scripts/check_fillable_fields.py +12 -0
- package/skills/public/pdf/scripts/convert_pdf_to_images.py +35 -0
- package/skills/public/pdf/scripts/create_validation_image.py +41 -0
- package/skills/public/pdf/scripts/extract_form_field_info.py +152 -0
- package/skills/public/pdf/scripts/fill_fillable_fields.py +114 -0
- package/skills/public/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/skills/public/pdf-reading/LICENSE.txt +30 -0
- package/skills/public/pdf-reading/REFERENCE.md +196 -0
- package/skills/public/pdf-reading/SKILL.md +305 -0
- package/skills/public/playwright-cli/SKILL.md +278 -0
- package/skills/public/playwright-cli/references/request-mocking.md +87 -0
- package/skills/public/playwright-cli/references/running-code.md +232 -0
- package/skills/public/playwright-cli/references/session-management.md +169 -0
- package/skills/public/playwright-cli/references/storage-state.md +275 -0
- package/skills/public/playwright-cli/references/test-generation.md +88 -0
- package/skills/public/playwright-cli/references/tracing.md +139 -0
- package/skills/public/playwright-cli/references/video-recording.md +43 -0
- package/skills/public/pptx/LICENSE.txt +30 -0
- package/skills/public/pptx/SKILL.md +484 -0
- package/skills/public/pptx/css.md +335 -0
- package/skills/public/pptx/html2pptx.md +893 -0
- package/skills/public/pptx/html2pptx.tgz +0 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/public/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/public/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/public/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/public/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/public/pptx/ooxml/scripts/pack.py +159 -0
- package/skills/public/pptx/ooxml/scripts/unpack.py +29 -0
- package/skills/public/pptx/ooxml/scripts/validate.py +69 -0
- package/skills/public/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/skills/public/pptx/ooxml/scripts/validation/base.py +951 -0
- package/skills/public/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/skills/public/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/skills/public/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/skills/public/pptx/ooxml.md +427 -0
- package/skills/public/pptx/scripts/inventory.py +1020 -0
- package/skills/public/pptx/scripts/rearrange.py +231 -0
- package/skills/public/pptx/scripts/replace.py +385 -0
- package/skills/public/pptx/scripts/thumbnail.py +450 -0
- package/skills/public/skill-creator/SKILL.md +356 -0
- package/skills/public/skill-creator/references/output-patterns.md +82 -0
- package/skills/public/skill-creator/references/workflows.md +28 -0
- package/skills/public/skill-creator/scripts/init_skill.py +303 -0
- package/skills/public/skill-creator/scripts/package_skill.py +110 -0
- package/skills/public/skill-creator/scripts/quick_validate.py +95 -0
- package/skills/public/sub-agent/SKILL.md +186 -0
- package/skills/public/sub-agent/references/security-review.md +153 -0
- package/skills/public/sub-agent/references/usage.md +207 -0
- package/skills/public/sub-agent/scripts/list_subagent_models.sh +22 -0
- package/skills/public/test-driven-development/SKILL.md +371 -0
- package/skills/public/test-driven-development/testing-anti-patterns.md +299 -0
- package/skills/public/webapp-testing/LICENSE.txt +202 -0
- package/skills/public/webapp-testing/SKILL.md +96 -0
- package/skills/public/webapp-testing/examples/console_logging.py +35 -0
- package/skills/public/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/public/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/public/webapp-testing/scripts/with_server.py +106 -0
- package/skills/public/xlsx/LICENSE.txt +30 -0
- package/skills/public/xlsx/SKILL.md +316 -0
- package/skills/public/xlsx/preview_data.py +93 -0
- package/skills/public/xlsx/recalc.py +178 -0
- package/tests/README.md +42 -0
- package/tests/fixtures/cli/claude_v0.9.2.0_argv.json +46 -0
- package/tests/fixtures/cli/claude_v0.9.2.0_stdout.json +32 -0
- package/tests/fixtures/cli/codex_run.jsonl +4 -0
- package/tests/fixtures/cli/opencode_run.jsonl +6 -0
- package/tests/integration/README.md +56 -0
- package/tests/integration/conftest.py +280 -0
- package/tests/integration/pytest.ini +13 -0
- package/tests/integration/test_mcp_auth.py +85 -0
- package/tests/integration/test_mcp_tools.py +101 -0
- package/tests/integration/test_workspace_lifecycle.py +125 -0
- package/tests/orchestrator/mock_llm_server.py +343 -0
- package/tests/orchestrator/test_cli_adapters.py +566 -0
- package/tests/orchestrator/test_cli_adapters_live.py +527 -0
- package/tests/orchestrator/test_cli_runtime.py +451 -0
- package/tests/orchestrator/test_docker_manager.py +302 -0
- package/tests/orchestrator/test_dynamic_instructions.py +69 -0
- package/tests/orchestrator/test_mcp_resources.py +140 -0
- package/tests/orchestrator/test_mcp_tools.py +224 -0
- package/tests/orchestrator/test_passthrough_isolation.py +201 -0
- package/tests/orchestrator/test_readme_in_container.py +76 -0
- package/tests/orchestrator/test_render_cache.py +84 -0
- package/tests/orchestrator/test_runtime_cli_endpoint.py +108 -0
- package/tests/orchestrator/test_single_user_mode.py +212 -0
- package/tests/orchestrator/test_startup_warnings.py +123 -0
- package/tests/orchestrator/test_sub_agent_dispatch.py +327 -0
- package/tests/orchestrator/test_subagent_claude_compat.py +367 -0
- package/tests/orchestrator/test_system_prompt_endpoint.py +191 -0
- package/tests/orchestrator/test_tool_descriptions.py +52 -0
- package/tests/orchestrator/test_view_image.py +201 -0
- package/tests/patches/conftest.py +30 -0
- package/tests/patches/fixtures/__init__.py +10 -0
- package/tests/patches/fixtures/middleware_v0.9.1.py +5057 -0
- package/tests/patches/fixtures/middleware_v0.9.2.py +5120 -0
- package/tests/patches/fixtures/retrieval_v0.9.1.py +2684 -0
- package/tests/patches/fixtures/retrieval_v0.9.2.py +2700 -0
- package/tests/patches/test_fix_attached_files_position.py +118 -0
- package/tests/patches/test_fix_large_tool_args.py +130 -0
- package/tests/patches/test_fix_large_tool_results.py +531 -0
- package/tests/patches/test_fix_skip_embedding_chat_files.py +160 -0
- package/tests/patches/test_fix_skip_rag_files_native_fc.py +120 -0
- package/tests/patches/test_fix_tool_loop_errors.py +128 -0
- package/tests/security/test_path_traversal_app.py +132 -0
- package/tests/security/test_path_traversal_docker.py +36 -0
- package/tests/security/test_path_traversal_settings.py +87 -0
- package/tests/security/test_safe_path_util.py +166 -0
- package/tests/security/test_xss_preview.py +46 -0
- package/tests/test-default-model-resolution.py +136 -0
- package/tests/test-docker-image.sh +358 -0
- package/tests/test-list-subagent-models.sh +421 -0
- package/tests/test-mcp-endpoint-live.sh +92 -0
- package/tests/test-mcp-native-surface.sh +213 -0
- package/tests/test-no-cyrillic.sh +135 -0
- package/tests/test-opencode-error-mapping.py +130 -0
- package/tests/test-pr88-skills.sh +305 -0
- package/tests/test-project-structure.sh +202 -0
- package/tests/test-single-user-mode.sh +269 -0
- package/tests/test-skill-no-hardcoded-models.sh +65 -0
- package/tests/test-subagent-cli-surface.py +137 -0
- package/tests/test-subagent-runtime.sh +109 -0
- package/tests/test_codex_toml_converter.py +204 -0
- package/tests/test_default_resolver_no_legacy_global.py +159 -0
- package/tests/test_filter.py +648 -0
- package/tests/test_init_sh_unchanged.sh +49 -0
- package/tests/test_opencode_alias_map_drop.py +144 -0
- package/tests/test_requirements.py +91 -0
- package/tests/test_subagent_docstring.py +193 -0
- package/tests/test_tools.py +34 -0
- package/vendor/extract-text/README.md +46 -0
- package/vendor/extract-text/extract-text +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: product-marketing-context
|
|
3
|
+
description: "When the user wants to create or update their product marketing context document. Also use when the user mentions 'product context,' 'marketing context,' 'set up context,' 'positioning,' 'who is my target audience,' 'describe my product,' 'ICP,' 'ideal customer profile,' or wants to avoid repeating foundational information across marketing tasks. Use this at the start of any new project before using other marketing skills — it creates `.agents/product-marketing-context.md` that all other skills reference for product, audience, and positioning context."
|
|
4
|
+
metadata:
|
|
5
|
+
version: 1.1.0
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Product Marketing Context
|
|
9
|
+
|
|
10
|
+
You help users create and maintain a product marketing context document. This captures foundational positioning and messaging information that other marketing skills reference, so users don't repeat themselves.
|
|
11
|
+
|
|
12
|
+
The document is stored at `.agents/product-marketing-context.md`.
|
|
13
|
+
|
|
14
|
+
## Workflow
|
|
15
|
+
|
|
16
|
+
### Step 1: Check for Existing Context
|
|
17
|
+
|
|
18
|
+
First, check if `.agents/product-marketing-context.md` already exists. Also check `.claude/product-marketing-context.md` for older setups — if found there but not in `.agents/`, offer to move it.
|
|
19
|
+
|
|
20
|
+
**If it exists:**
|
|
21
|
+
- Read it and summarize what's captured
|
|
22
|
+
- Ask which sections they want to update
|
|
23
|
+
- Only gather info for those sections
|
|
24
|
+
|
|
25
|
+
**If it doesn't exist, offer two options:**
|
|
26
|
+
|
|
27
|
+
1. **Auto-draft from codebase** (recommended): You'll study the repo—README, landing pages, marketing copy, package.json, etc.—and draft a V1 of the context document. The user then reviews, corrects, and fills gaps. This is faster than starting from scratch.
|
|
28
|
+
|
|
29
|
+
2. **Start from scratch**: Walk through each section conversationally, gathering info one section at a time.
|
|
30
|
+
|
|
31
|
+
Most users prefer option 1. After presenting the draft, ask: "What needs correcting? What's missing?"
|
|
32
|
+
|
|
33
|
+
### Step 2: Gather Information
|
|
34
|
+
|
|
35
|
+
**If auto-drafting:**
|
|
36
|
+
1. Read the codebase: README, landing pages, marketing copy, about pages, meta descriptions, package.json, any existing docs
|
|
37
|
+
2. Draft all sections based on what you find
|
|
38
|
+
3. Present the draft and ask what needs correcting or is missing
|
|
39
|
+
4. Iterate until the user is satisfied
|
|
40
|
+
|
|
41
|
+
**If starting from scratch:**
|
|
42
|
+
Walk through each section below conversationally, one at a time. Don't dump all questions at once.
|
|
43
|
+
|
|
44
|
+
For each section:
|
|
45
|
+
1. Briefly explain what you're capturing
|
|
46
|
+
2. Ask relevant questions
|
|
47
|
+
3. Confirm accuracy
|
|
48
|
+
4. Move to the next
|
|
49
|
+
|
|
50
|
+
Push for verbatim customer language — exact phrases are more valuable than polished descriptions because they reflect how customers actually think and speak, which makes copy more resonant.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Sections to Capture
|
|
55
|
+
|
|
56
|
+
### 1. Product Overview
|
|
57
|
+
- One-line description
|
|
58
|
+
- What it does (2-3 sentences)
|
|
59
|
+
- Product category (what "shelf" you sit on—how customers search for you)
|
|
60
|
+
- Product type (SaaS, marketplace, e-commerce, service, etc.)
|
|
61
|
+
- Business model and pricing
|
|
62
|
+
|
|
63
|
+
### 2. Target Audience
|
|
64
|
+
- Target company type (industry, size, stage)
|
|
65
|
+
- Target decision-makers (roles, departments)
|
|
66
|
+
- Primary use case (the main problem you solve)
|
|
67
|
+
- Jobs to be done (2-3 things customers "hire" you for)
|
|
68
|
+
- Specific use cases or scenarios
|
|
69
|
+
|
|
70
|
+
### 3. Personas (B2B only)
|
|
71
|
+
If multiple stakeholders are involved in buying, capture for each:
|
|
72
|
+
- User, Champion, Decision Maker, Financial Buyer, Technical Influencer
|
|
73
|
+
- What each cares about, their challenge, and the value you promise them
|
|
74
|
+
|
|
75
|
+
### 4. Problems & Pain Points
|
|
76
|
+
- Core challenge customers face before finding you
|
|
77
|
+
- Why current solutions fall short
|
|
78
|
+
- What it costs them (time, money, opportunities)
|
|
79
|
+
- Emotional tension (stress, fear, doubt)
|
|
80
|
+
|
|
81
|
+
### 5. Competitive Landscape
|
|
82
|
+
- **Direct competitors**: Same solution, same problem (e.g., Calendly vs SavvyCal)
|
|
83
|
+
- **Secondary competitors**: Different solution, same problem (e.g., Calendly vs Superhuman scheduling)
|
|
84
|
+
- **Indirect competitors**: Conflicting approach (e.g., Calendly vs personal assistant)
|
|
85
|
+
- How each falls short for customers
|
|
86
|
+
|
|
87
|
+
### 6. Differentiation
|
|
88
|
+
- Key differentiators (capabilities alternatives lack)
|
|
89
|
+
- How you solve it differently
|
|
90
|
+
- Why that's better (benefits)
|
|
91
|
+
- Why customers choose you over alternatives
|
|
92
|
+
|
|
93
|
+
### 7. Objections & Anti-Personas
|
|
94
|
+
- Top 3 objections heard in sales and how to address them
|
|
95
|
+
- Who is NOT a good fit (anti-persona)
|
|
96
|
+
|
|
97
|
+
### 8. Switching Dynamics
|
|
98
|
+
The JTBD Four Forces:
|
|
99
|
+
- **Push**: What frustrations drive them away from current solution
|
|
100
|
+
- **Pull**: What attracts them to you
|
|
101
|
+
- **Habit**: What keeps them stuck with current approach
|
|
102
|
+
- **Anxiety**: What worries them about switching
|
|
103
|
+
|
|
104
|
+
### 9. Customer Language
|
|
105
|
+
- How customers describe the problem (verbatim)
|
|
106
|
+
- How they describe your solution (verbatim)
|
|
107
|
+
- Words/phrases to use
|
|
108
|
+
- Words/phrases to avoid
|
|
109
|
+
- Glossary of product-specific terms
|
|
110
|
+
|
|
111
|
+
### 10. Brand Voice
|
|
112
|
+
- Tone (professional, casual, playful, etc.)
|
|
113
|
+
- Communication style (direct, conversational, technical)
|
|
114
|
+
- Brand personality (3-5 adjectives)
|
|
115
|
+
|
|
116
|
+
### 11. Proof Points
|
|
117
|
+
- Key metrics or results to cite
|
|
118
|
+
- Notable customers/logos
|
|
119
|
+
- Testimonial snippets
|
|
120
|
+
- Main value themes and supporting evidence
|
|
121
|
+
|
|
122
|
+
### 12. Goals
|
|
123
|
+
- Primary business goal
|
|
124
|
+
- Key conversion action (what you want people to do)
|
|
125
|
+
- Current metrics (if known)
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Step 3: Create the Document
|
|
130
|
+
|
|
131
|
+
After gathering information, create `.agents/product-marketing-context.md` with this structure:
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
# Product Marketing Context
|
|
135
|
+
|
|
136
|
+
*Last updated: [date]*
|
|
137
|
+
|
|
138
|
+
## Product Overview
|
|
139
|
+
**One-liner:**
|
|
140
|
+
**What it does:**
|
|
141
|
+
**Product category:**
|
|
142
|
+
**Product type:**
|
|
143
|
+
**Business model:**
|
|
144
|
+
|
|
145
|
+
## Target Audience
|
|
146
|
+
**Target companies:**
|
|
147
|
+
**Decision-makers:**
|
|
148
|
+
**Primary use case:**
|
|
149
|
+
**Jobs to be done:**
|
|
150
|
+
-
|
|
151
|
+
**Use cases:**
|
|
152
|
+
-
|
|
153
|
+
|
|
154
|
+
## Personas
|
|
155
|
+
| Persona | Cares about | Challenge | Value we promise |
|
|
156
|
+
|---------|-------------|-----------|------------------|
|
|
157
|
+
| | | | |
|
|
158
|
+
|
|
159
|
+
## Problems & Pain Points
|
|
160
|
+
**Core problem:**
|
|
161
|
+
**Why alternatives fall short:**
|
|
162
|
+
-
|
|
163
|
+
**What it costs them:**
|
|
164
|
+
**Emotional tension:**
|
|
165
|
+
|
|
166
|
+
## Competitive Landscape
|
|
167
|
+
**Direct:** [Competitor] — falls short because...
|
|
168
|
+
**Secondary:** [Approach] — falls short because...
|
|
169
|
+
**Indirect:** [Alternative] — falls short because...
|
|
170
|
+
|
|
171
|
+
## Differentiation
|
|
172
|
+
**Key differentiators:**
|
|
173
|
+
-
|
|
174
|
+
**How we do it differently:**
|
|
175
|
+
**Why that's better:**
|
|
176
|
+
**Why customers choose us:**
|
|
177
|
+
|
|
178
|
+
## Objections
|
|
179
|
+
| Objection | Response |
|
|
180
|
+
|-----------|----------|
|
|
181
|
+
| | |
|
|
182
|
+
|
|
183
|
+
**Anti-persona:**
|
|
184
|
+
|
|
185
|
+
## Switching Dynamics
|
|
186
|
+
**Push:**
|
|
187
|
+
**Pull:**
|
|
188
|
+
**Habit:**
|
|
189
|
+
**Anxiety:**
|
|
190
|
+
|
|
191
|
+
## Customer Language
|
|
192
|
+
**How they describe the problem:**
|
|
193
|
+
- "[verbatim]"
|
|
194
|
+
**How they describe us:**
|
|
195
|
+
- "[verbatim]"
|
|
196
|
+
**Words to use:**
|
|
197
|
+
**Words to avoid:**
|
|
198
|
+
**Glossary:**
|
|
199
|
+
| Term | Meaning |
|
|
200
|
+
|------|---------|
|
|
201
|
+
| | |
|
|
202
|
+
|
|
203
|
+
## Brand Voice
|
|
204
|
+
**Tone:**
|
|
205
|
+
**Style:**
|
|
206
|
+
**Personality:**
|
|
207
|
+
|
|
208
|
+
## Proof Points
|
|
209
|
+
**Metrics:**
|
|
210
|
+
**Customers:**
|
|
211
|
+
**Testimonials:**
|
|
212
|
+
> "[quote]" — [who]
|
|
213
|
+
**Value themes:**
|
|
214
|
+
| Theme | Proof |
|
|
215
|
+
|-------|-------|
|
|
216
|
+
| | |
|
|
217
|
+
|
|
218
|
+
## Goals
|
|
219
|
+
**Business goal:**
|
|
220
|
+
**Conversion action:**
|
|
221
|
+
**Current metrics:**
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Step 4: Confirm and Save
|
|
227
|
+
|
|
228
|
+
- Show the completed document
|
|
229
|
+
- Ask if anything needs adjustment
|
|
230
|
+
- Save to `.agents/product-marketing-context.md`
|
|
231
|
+
- Tell them: "Other marketing skills will now use this context automatically. Run `/product-marketing-context` anytime to update it."
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Tips
|
|
236
|
+
|
|
237
|
+
- **Be specific**: Ask "What's the #1 frustration that brings them to you?" not "What problem do they solve?"
|
|
238
|
+
- **Capture exact words**: Customer language beats polished descriptions
|
|
239
|
+
- **Ask for examples**: "Can you give me an example?" unlocks better answers
|
|
240
|
+
- **Validate as you go**: Summarize each section and confirm before moving on
|
|
241
|
+
- **Skip what doesn't apply**: Not every product needs all sections (e.g., Personas for B2C)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "product-marketing-context",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "I want to set up my product marketing context. We're a B2B SaaS company that sells a customer feedback platform to product teams.",
|
|
7
|
+
"expected_output": "Should check if .agents/product-marketing-context.md already exists. If not, should offer two options: (1) Auto-draft from codebase (recommended) or (2) Start from scratch. If user chooses start from scratch, should walk through sections conversationally one at a time. Should cover all applicable sections: Product Overview, Target Audience, Personas, Problems You Solve, Competitive Landscape, Differentiation, Objections, Switching Dynamics, Customer Language, Brand Voice, Proof Points, and Goals. Should create the file at .agents/product-marketing-context.md when complete.",
|
|
8
|
+
"assertions": [
|
|
9
|
+
"Checks for existing product-marketing-context.md",
|
|
10
|
+
"Offers two options: auto-draft or start from scratch",
|
|
11
|
+
"Covers applicable sections",
|
|
12
|
+
"Walks through sections conversationally one at a time",
|
|
13
|
+
"Creates file at .agents/product-marketing-context.md"
|
|
14
|
+
],
|
|
15
|
+
"files": []
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": 2,
|
|
19
|
+
"prompt": "Update our product marketing context. We just added a new enterprise tier and our target audience has expanded to include VP of Engineering, not just Product Managers.",
|
|
20
|
+
"expected_output": "Should check for existing .agents/product-marketing-context.md and read it. Should identify which sections need updating based on the changes: Target Audience (add VP of Engineering), Personas (add new persona), Product Overview (new enterprise tier, including pricing updates within that section), Objections (enterprise-specific), and Competitive Landscape (enterprise competitors). Should update only the relevant sections, preserving existing content that hasn't changed.",
|
|
21
|
+
"assertions": [
|
|
22
|
+
"Reads existing product-marketing-context.md",
|
|
23
|
+
"Identifies sections that need updating",
|
|
24
|
+
"Updates Target Audience with VP of Engineering",
|
|
25
|
+
"Adds new persona for the expanded audience",
|
|
26
|
+
"Updates Product Overview for enterprise tier",
|
|
27
|
+
"Preserves unchanged sections"
|
|
28
|
+
],
|
|
29
|
+
"files": []
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": 3,
|
|
33
|
+
"prompt": "create a product context doc for my app. it's a mobile app that helps people find hiking trails. we're just getting started.",
|
|
34
|
+
"expected_output": "Should trigger on casual phrasing. Should check for existing context doc. Should offer auto-draft or start-from-scratch options. Should adapt questions for an early-stage B2C mobile app (outdoor/fitness niche). Should note that some sections may be sparse for an early-stage product and that's okay — they can be filled in as the business matures. Should skip non-applicable sections (e.g., Personas section is B2B-focused) rather than forcing all 12. Should accept lighter answers for sections like Proof Points or Competitive Landscape if the company is new.",
|
|
35
|
+
"assertions": [
|
|
36
|
+
"Triggers on casual phrasing",
|
|
37
|
+
"Checks for existing context doc",
|
|
38
|
+
"Offers auto-draft or start-from-scratch options",
|
|
39
|
+
"Adapts questions for early-stage B2C mobile app",
|
|
40
|
+
"Notes some sections may be sparse early on",
|
|
41
|
+
"Skips non-applicable sections rather than forcing all 12",
|
|
42
|
+
"Creates file at .agents/product-marketing-context.md"
|
|
43
|
+
],
|
|
44
|
+
"files": []
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"id": 4,
|
|
48
|
+
"prompt": "Can you auto-draft our product marketing context from our existing codebase and marketing materials?",
|
|
49
|
+
"expected_output": "Should activate the auto-draft workflow mode. Should scan the codebase for existing marketing context: README, landing page copy, pricing page, about page, meta descriptions, any existing documentation. Should draft the product-marketing-context.md from what it finds, filling in sections where information is available and flagging sections that need manual input. Should present the draft for review before saving.",
|
|
50
|
+
"assertions": [
|
|
51
|
+
"Activates auto-draft workflow mode",
|
|
52
|
+
"Scans codebase for existing marketing materials",
|
|
53
|
+
"Drafts context from found information",
|
|
54
|
+
"Flags sections needing manual input",
|
|
55
|
+
"Presents draft for review before saving"
|
|
56
|
+
],
|
|
57
|
+
"files": []
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"id": 5,
|
|
61
|
+
"prompt": "Do we have a product marketing context set up? I want to make sure the other marketing skills have context about our product.",
|
|
62
|
+
"expected_output": "Should check for .agents/product-marketing-context.md (and the older .claude/product-marketing-context.md location). Should report whether it exists and summarize its contents if found. If it doesn't exist, should offer to create one and explain why it's valuable (other skills like copywriting, page-cro, seo-audit check for it first). Should explain how other skills use this context document.",
|
|
63
|
+
"assertions": [
|
|
64
|
+
"Checks both file locations",
|
|
65
|
+
"Reports whether context doc exists",
|
|
66
|
+
"Summarizes contents if found",
|
|
67
|
+
"Offers to create if missing",
|
|
68
|
+
"Explains how other skills use it"
|
|
69
|
+
],
|
|
70
|
+
"files": []
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": 6,
|
|
74
|
+
"prompt": "Write homepage copy for our SaaS product.",
|
|
75
|
+
"expected_output": "Should recognize this is a copywriting task, not a product marketing context task. Should check for product-marketing-context.md (as other skills do), and if it doesn't exist, may suggest creating one first. But should defer to the copywriting skill for actually writing the homepage copy.",
|
|
76
|
+
"assertions": [
|
|
77
|
+
"Recognizes this as a copywriting task",
|
|
78
|
+
"May check for or suggest creating product-marketing-context.md",
|
|
79
|
+
"References or defers to copywriting skill for the actual copy",
|
|
80
|
+
"Does not attempt to write homepage copy using context creation patterns"
|
|
81
|
+
],
|
|
82
|
+
"files": []
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: single-cell-rna-qc
|
|
3
|
+
description: Performs quality control on single-cell RNA-seq data (.h5ad or .h5 files) using scverse best practices with MAD-based filtering and comprehensive visualizations. Use when users request QC analysis, filtering low-quality cells, assessing data quality, or following scverse/scanpy best practices for single-cell analysis.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Single-Cell RNA-seq Quality Control
|
|
7
|
+
|
|
8
|
+
Automated QC workflow for single-cell RNA-seq data following scverse best practices.
|
|
9
|
+
|
|
10
|
+
## When to Use This Skill
|
|
11
|
+
|
|
12
|
+
Use when users:
|
|
13
|
+
- Request quality control or QC on single-cell RNA-seq data
|
|
14
|
+
- Want to filter low-quality cells or assess data quality
|
|
15
|
+
- Need QC visualizations or metrics
|
|
16
|
+
- Ask to follow scverse/scanpy best practices
|
|
17
|
+
- Request MAD-based filtering or outlier detection
|
|
18
|
+
|
|
19
|
+
**Supported input formats:**
|
|
20
|
+
- `.h5ad` files (AnnData format from scanpy/Python workflows)
|
|
21
|
+
- `.h5` files (10X Genomics Cell Ranger output)
|
|
22
|
+
|
|
23
|
+
**Default recommendation**: Use Approach 1 (complete pipeline) unless the user has specific custom requirements or explicitly requests non-standard filtering logic.
|
|
24
|
+
|
|
25
|
+
## Approach 1: Complete QC Pipeline (Recommended for Standard Workflows)
|
|
26
|
+
|
|
27
|
+
For standard QC following scverse best practices, use the convenience script `scripts/qc_analysis.py`:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
python3 scripts/qc_analysis.py input.h5ad
|
|
31
|
+
# or for 10X Genomics .h5 files:
|
|
32
|
+
python3 scripts/qc_analysis.py raw_feature_bc_matrix.h5
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The script automatically detects the file format and loads it appropriately.
|
|
36
|
+
|
|
37
|
+
**When to use this approach:**
|
|
38
|
+
- Standard QC workflow with adjustable thresholds (all cells filtered the same way)
|
|
39
|
+
- Batch processing multiple datasets
|
|
40
|
+
- Quick exploratory analysis
|
|
41
|
+
- User wants the "just works" solution
|
|
42
|
+
|
|
43
|
+
**Requirements:** anndata, scanpy, scipy, matplotlib, seaborn, numpy
|
|
44
|
+
|
|
45
|
+
**Parameters:**
|
|
46
|
+
|
|
47
|
+
Customize filtering thresholds and gene patterns using command-line parameters:
|
|
48
|
+
- `--output-dir` - Output directory
|
|
49
|
+
- `--mad-counts`, `--mad-genes`, `--mad-mt` - MAD thresholds for counts/genes/MT%
|
|
50
|
+
- `--mt-threshold` - Hard mitochondrial % cutoff
|
|
51
|
+
- `--min-cells` - Gene filtering threshold
|
|
52
|
+
- `--mt-pattern`, `--ribo-pattern`, `--hb-pattern` - Gene name patterns for different species
|
|
53
|
+
|
|
54
|
+
Use `--help` to see current default values.
|
|
55
|
+
|
|
56
|
+
**Outputs:**
|
|
57
|
+
|
|
58
|
+
All files are saved to `<input_basename>_qc_results/` directory by default (or to the directory specified by `--output-dir`):
|
|
59
|
+
- `qc_metrics_before_filtering.png` - Pre-filtering visualizations
|
|
60
|
+
- `qc_filtering_thresholds.png` - MAD-based threshold overlays
|
|
61
|
+
- `qc_metrics_after_filtering.png` - Post-filtering quality metrics
|
|
62
|
+
- `<input_basename>_filtered.h5ad` - Clean, filtered dataset ready for downstream analysis
|
|
63
|
+
- `<input_basename>_with_qc.h5ad` - Original data with QC annotations preserved
|
|
64
|
+
|
|
65
|
+
If copying outputs to `/mnt/user-data/outputs/` for user access, copy individual files (not the entire directory) so users can preview them directly as Assistant.ai artifacts.
|
|
66
|
+
|
|
67
|
+
### Workflow Steps
|
|
68
|
+
|
|
69
|
+
The script performs the following steps:
|
|
70
|
+
|
|
71
|
+
1. **Calculate QC metrics** - Count depth, gene detection, mitochondrial/ribosomal/hemoglobin content
|
|
72
|
+
2. **Apply MAD-based filtering** - Permissive outlier detection using MAD thresholds for counts/genes/MT%
|
|
73
|
+
3. **Filter genes** - Remove genes detected in few cells
|
|
74
|
+
4. **Generate visualizations** - Comprehensive before/after plots with threshold overlays
|
|
75
|
+
|
|
76
|
+
## Approach 2: Modular Building Blocks (For Custom Workflows)
|
|
77
|
+
|
|
78
|
+
For custom analysis workflows or non-standard requirements, use the modular utility functions from `scripts/qc_core.py` and `scripts/qc_plotting.py`:
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
# Run from scripts/ directory, or add scripts/ to sys.path if needed
|
|
82
|
+
import anndata as ad
|
|
83
|
+
from qc_core import calculate_qc_metrics, detect_outliers_mad, filter_cells
|
|
84
|
+
from qc_plotting import plot_qc_distributions # Only if visualization needed
|
|
85
|
+
|
|
86
|
+
adata = ad.read_h5ad('input.h5ad')
|
|
87
|
+
calculate_qc_metrics(adata, inplace=True)
|
|
88
|
+
# ... custom analysis logic here
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**When to use this approach:**
|
|
92
|
+
- Different workflow needed (skip steps, change order, apply different thresholds to subsets)
|
|
93
|
+
- Conditional logic (e.g., filter neurons differently than other cells)
|
|
94
|
+
- Partial execution (only metrics/visualization, no filtering)
|
|
95
|
+
- Integration with other analysis steps in a larger pipeline
|
|
96
|
+
- Custom filtering criteria beyond what command-line params support
|
|
97
|
+
|
|
98
|
+
**Available utility functions:**
|
|
99
|
+
|
|
100
|
+
From `qc_core.py` (core QC operations):
|
|
101
|
+
- `calculate_qc_metrics(adata, mt_pattern, ribo_pattern, hb_pattern, inplace=True)` - Calculate QC metrics and annotate adata
|
|
102
|
+
- `detect_outliers_mad(adata, metric, n_mads, verbose=True)` - MAD-based outlier detection, returns boolean mask
|
|
103
|
+
- `apply_hard_threshold(adata, metric, threshold, operator='>', verbose=True)` - Apply hard cutoffs, returns boolean mask
|
|
104
|
+
- `filter_cells(adata, mask, inplace=False)` - Apply boolean mask to filter cells
|
|
105
|
+
- `filter_genes(adata, min_cells=20, min_counts=None, inplace=True)` - Filter genes by detection
|
|
106
|
+
- `print_qc_summary(adata, label='')` - Print summary statistics
|
|
107
|
+
|
|
108
|
+
From `qc_plotting.py` (visualization):
|
|
109
|
+
- `plot_qc_distributions(adata, output_path, title)` - Generate comprehensive QC plots
|
|
110
|
+
- `plot_filtering_thresholds(adata, outlier_masks, thresholds, output_path)` - Visualize filtering thresholds
|
|
111
|
+
- `plot_qc_after_filtering(adata, output_path)` - Generate post-filtering plots
|
|
112
|
+
|
|
113
|
+
**Example custom workflows:**
|
|
114
|
+
|
|
115
|
+
**Example 1: Only calculate metrics and visualize, don't filter yet**
|
|
116
|
+
```python
|
|
117
|
+
adata = ad.read_h5ad('input.h5ad')
|
|
118
|
+
calculate_qc_metrics(adata, inplace=True)
|
|
119
|
+
plot_qc_distributions(adata, 'qc_before.png', title='Initial QC')
|
|
120
|
+
print_qc_summary(adata, label='Before filtering')
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**Example 2: Apply only MT% filtering, keep other metrics permissive**
|
|
124
|
+
```python
|
|
125
|
+
adata = ad.read_h5ad('input.h5ad')
|
|
126
|
+
calculate_qc_metrics(adata, inplace=True)
|
|
127
|
+
|
|
128
|
+
# Only filter high MT% cells
|
|
129
|
+
high_mt = apply_hard_threshold(adata, 'pct_counts_mt', 10, operator='>')
|
|
130
|
+
adata_filtered = filter_cells(adata, ~high_mt)
|
|
131
|
+
adata_filtered.write('filtered.h5ad')
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Example 3: Different thresholds for different subsets**
|
|
135
|
+
```python
|
|
136
|
+
adata = ad.read_h5ad('input.h5ad')
|
|
137
|
+
calculate_qc_metrics(adata, inplace=True)
|
|
138
|
+
|
|
139
|
+
# Apply type-specific QC (assumes cell_type metadata exists)
|
|
140
|
+
neurons = adata.obs['cell_type'] == 'neuron'
|
|
141
|
+
other_cells = ~neurons
|
|
142
|
+
|
|
143
|
+
# Neurons tolerate higher MT%, other cells use stricter threshold
|
|
144
|
+
neuron_qc = apply_hard_threshold(adata[neurons], 'pct_counts_mt', 15, operator='>')
|
|
145
|
+
other_qc = apply_hard_threshold(adata[other_cells], 'pct_counts_mt', 8, operator='>')
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Best Practices
|
|
149
|
+
|
|
150
|
+
1. **Be permissive with filtering** - Default thresholds intentionally retain most cells to avoid losing rare populations
|
|
151
|
+
2. **Inspect visualizations** - Always review before/after plots to ensure filtering makes biological sense
|
|
152
|
+
3. **Consider dataset-specific factors** - Some tissues naturally have higher mitochondrial content (e.g., neurons, cardiomyocytes)
|
|
153
|
+
4. **Check gene annotations** - Mitochondrial gene prefixes vary by species (mt- for mouse, MT- for human)
|
|
154
|
+
5. **Iterate if needed** - QC parameters may need adjustment based on the specific experiment or tissue type
|
|
155
|
+
|
|
156
|
+
## Reference Materials
|
|
157
|
+
|
|
158
|
+
For detailed QC methodology, parameter rationale, and troubleshooting guidance, see `references/scverse_qc_guidelines.md`. This reference provides:
|
|
159
|
+
- Detailed explanations of each QC metric and why it matters
|
|
160
|
+
- Rationale for MAD-based thresholds and why they're better than fixed cutoffs
|
|
161
|
+
- Guidelines for interpreting QC visualizations (histograms, violin plots, scatter plots)
|
|
162
|
+
- Species-specific considerations for gene annotations
|
|
163
|
+
- When and how to adjust filtering parameters
|
|
164
|
+
- Advanced QC considerations (ambient RNA correction, doublet detection)
|
|
165
|
+
|
|
166
|
+
Load this reference when users need deeper understanding of the methodology or when troubleshooting QC issues.
|
|
167
|
+
|
|
168
|
+
## Next Steps After QC
|
|
169
|
+
|
|
170
|
+
Typical downstream analysis steps:
|
|
171
|
+
- Ambient RNA correction (SoupX, CellBender)
|
|
172
|
+
- Doublet detection (scDblFinder)
|
|
173
|
+
- Normalization (log-normalize, scran)
|
|
174
|
+
- Feature selection and dimensionality reduction
|
|
175
|
+
- Clustering and cell type annotation
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# scverse Quality Control Guidelines
|
|
2
|
+
|
|
3
|
+
This document provides detailed information about quality control best practices for single-cell RNA-seq data, following the scverse ecosystem recommendations.
|
|
4
|
+
|
|
5
|
+
## Quality Control Metrics
|
|
6
|
+
|
|
7
|
+
### Count Depth (Total Counts)
|
|
8
|
+
- **What it measures**: Total number of UMI/reads per cell
|
|
9
|
+
- **Why it matters**: Low count cells may be empty droplets, debris, or poorly captured cells
|
|
10
|
+
- **Typical range**: 500-50,000 counts per cell (varies by protocol)
|
|
11
|
+
- **Red flags**: Bimodal distributions may indicate mixing of high and low-quality cells
|
|
12
|
+
|
|
13
|
+
### Gene Detection (Genes per Cell)
|
|
14
|
+
- **What it measures**: Number of genes with at least 1 count
|
|
15
|
+
- **Why it matters**: Strongly correlates with count depth; low values indicate poor capture
|
|
16
|
+
- **Typical range**: 200-5,000 genes per cell
|
|
17
|
+
- **Red flags**: Very low values (<200) suggest technical failures
|
|
18
|
+
|
|
19
|
+
### Mitochondrial Content
|
|
20
|
+
- **What it measures**: Percentage of counts from mitochondrial genes
|
|
21
|
+
- **Why it matters**: High MT% indicates cell stress, apoptosis, or lysed cells
|
|
22
|
+
- **Typical range**: <5% for most tissues, up to 10-15% for metabolically active cells
|
|
23
|
+
- **Species-specific patterns**:
|
|
24
|
+
- Mouse: Genes start with 'mt-' (e.g., mt-Nd1, mt-Co1)
|
|
25
|
+
- Human: Genes start with 'MT-' (e.g., MT-ND1, MT-CO1)
|
|
26
|
+
- **Context matters**: Some cell types (cardiomyocytes, neurons) naturally have higher MT content
|
|
27
|
+
|
|
28
|
+
### Ribosomal Content
|
|
29
|
+
- **What it measures**: Percentage of counts from ribosomal protein genes
|
|
30
|
+
- **Why it matters**: Can indicate cell state or contamination
|
|
31
|
+
- **Patterns**: Genes start with 'Rpl'/'RPL' (large subunit) or 'Rps'/'RPS' (small subunit)
|
|
32
|
+
- **Note**: High ribosomal content isn't always bad - metabolically active cells have more ribosomes
|
|
33
|
+
|
|
34
|
+
### Hemoglobin Content
|
|
35
|
+
- **What it measures**: Percentage of counts from hemoglobin genes
|
|
36
|
+
- **Why it matters**: Indicates blood contamination in non-blood tissues
|
|
37
|
+
- **Patterns**: Genes matching '^Hb[^(p)]' or '^HB[^(P)]' (excludes Hbp1/HBP1)
|
|
38
|
+
- **When to use**: Particularly important for tissue samples (brain, liver, etc.)
|
|
39
|
+
|
|
40
|
+
## MAD-Based Filtering Rationale
|
|
41
|
+
|
|
42
|
+
### Why MAD Instead of Fixed Thresholds?
|
|
43
|
+
|
|
44
|
+
Fixed thresholds (e.g., "remove cells with <500 genes") fail because:
|
|
45
|
+
- Different protocols yield different ranges
|
|
46
|
+
- Different tissues have different characteristics
|
|
47
|
+
- Different species have different gene counts
|
|
48
|
+
- Fixed thresholds are arbitrary and not data-driven
|
|
49
|
+
|
|
50
|
+
MAD (Median Absolute Deviation) is robust to outliers and adapts to your dataset:
|
|
51
|
+
```
|
|
52
|
+
MAD = median(|X - median(X)|)
|
|
53
|
+
Outlier bounds = median ± n_MADs × MAD
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Recommended MAD Thresholds
|
|
57
|
+
|
|
58
|
+
Following scverse best practices (deliberately permissive):
|
|
59
|
+
|
|
60
|
+
**5 MADs for count depth (log-transformed)**
|
|
61
|
+
- Very permissive to retain rare cell populations
|
|
62
|
+
- Catches extreme outliers (empty droplets, debris)
|
|
63
|
+
- Log transformation handles the typical right-skewed distribution
|
|
64
|
+
|
|
65
|
+
**5 MADs for gene counts (log-transformed)**
|
|
66
|
+
- Parallels count depth filtering
|
|
67
|
+
- Most informative when combined with count filtering
|
|
68
|
+
- Log transformation normalizes the distribution
|
|
69
|
+
|
|
70
|
+
**3 MADs for mitochondrial percentage**
|
|
71
|
+
- More stringent because high MT% strongly indicates dying cells
|
|
72
|
+
- Uses raw percentages (not log-transformed)
|
|
73
|
+
- Combined with hard threshold for extra stringency
|
|
74
|
+
|
|
75
|
+
**Hard threshold: 8% mitochondrial content**
|
|
76
|
+
- Additional filter beyond MAD-based detection
|
|
77
|
+
- Conservative cutoff that works across most tissues
|
|
78
|
+
- Adjust higher (10-15%) for metabolically active cell types
|
|
79
|
+
|
|
80
|
+
### Why Be Permissive?
|
|
81
|
+
|
|
82
|
+
The default thresholds intentionally err on the side of keeping cells because:
|
|
83
|
+
1. **Rare populations**: Stringent filtering may remove rare but viable cell types
|
|
84
|
+
2. **Biological variation**: Some healthy cells naturally have extreme values
|
|
85
|
+
3. **Reversibility**: Easier to filter more later than to recover lost cells
|
|
86
|
+
4. **Downstream robustness**: Modern normalization methods handle moderate quality variation
|
|
87
|
+
|
|
88
|
+
## Interpreting QC Visualizations
|
|
89
|
+
|
|
90
|
+
### Histograms
|
|
91
|
+
- **Bimodal distributions**: May indicate mixing of cell types or quality issues
|
|
92
|
+
- **Long tails**: Common for count depth; MAD filtering handles this
|
|
93
|
+
- **Sharp cutoffs**: May indicate prior filtering or technical artifacts
|
|
94
|
+
|
|
95
|
+
### Violin Plots
|
|
96
|
+
- Shows distribution shape and density
|
|
97
|
+
- Median (line) and mean (diamond) should be similar for symmetric distributions
|
|
98
|
+
- Wide distributions suggest high heterogeneity
|
|
99
|
+
|
|
100
|
+
### Scatter Plots
|
|
101
|
+
|
|
102
|
+
**Counts vs Genes (colored by MT%)**
|
|
103
|
+
- Should show strong positive correlation (R² > 0.8 typical)
|
|
104
|
+
- Points deviating from trend may be outliers
|
|
105
|
+
- High MT% cells often cluster at low counts/genes
|
|
106
|
+
|
|
107
|
+
**Counts vs MT%**
|
|
108
|
+
- Negative correlation expected (dying cells have fewer counts)
|
|
109
|
+
- Vertical stratification may indicate batch effects
|
|
110
|
+
- Cells with high counts + high MT% are suspicious
|
|
111
|
+
|
|
112
|
+
**Genes vs MT%**
|
|
113
|
+
- Similar to counts vs MT%, but often weaker correlation
|
|
114
|
+
- Useful for identifying cells with gene detection issues
|
|
115
|
+
|
|
116
|
+
## Gene Filtering
|
|
117
|
+
|
|
118
|
+
After filtering cells, remove genes detected in fewer than 20 cells:
|
|
119
|
+
- **Why 20?**: Balances noise reduction with information retention
|
|
120
|
+
- **Benefits**: Reduces dataset size, speeds up computation, removes noisy genes
|
|
121
|
+
- **Trade-offs**: May lose very rare markers; adjust to 10 if studying rare populations
|
|
122
|
+
|
|
123
|
+
## Species-Specific Considerations
|
|
124
|
+
|
|
125
|
+
### Mouse (Mus musculus)
|
|
126
|
+
- Mitochondrial genes: mt-* (lowercase)
|
|
127
|
+
- Ribosomal genes: Rpl*, Rps* (capitalized first letter)
|
|
128
|
+
- Hemoglobin genes: Hb* (but not Hbp1)
|
|
129
|
+
|
|
130
|
+
### Human (Homo sapiens)
|
|
131
|
+
- Mitochondrial genes: MT-* (uppercase)
|
|
132
|
+
- Ribosomal genes: RPL*, RPS* (all uppercase)
|
|
133
|
+
- Hemoglobin genes: HB* (but not HBP1)
|
|
134
|
+
|
|
135
|
+
### Other Species
|
|
136
|
+
Adjust gene name patterns in the script to match your organism's gene nomenclature. Consult Ensembl or your reference annotation for correct prefixes.
|
|
137
|
+
|
|
138
|
+
## When to Adjust Parameters
|
|
139
|
+
|
|
140
|
+
Consider adjusting filtering thresholds when:
|
|
141
|
+
|
|
142
|
+
**More stringent (lower MADs)**
|
|
143
|
+
- High ambient RNA contamination suspected
|
|
144
|
+
- Many low-quality cells observed in visualizations
|
|
145
|
+
- Downstream analysis shows quality-driven clustering
|
|
146
|
+
|
|
147
|
+
**More permissive (higher MADs)**
|
|
148
|
+
- Studying rare cell populations
|
|
149
|
+
- Dataset has high technical quality
|
|
150
|
+
- Cell types naturally have extreme values (e.g., neurons with high MT%)
|
|
151
|
+
|
|
152
|
+
**Tissue-specific adjustments**
|
|
153
|
+
- Brain/neurons: May need higher MT% threshold (10-15%)
|
|
154
|
+
- Blood: Can be more stringent with MT% (5-8%)
|
|
155
|
+
- Tumor samples: Often need more permissive thresholds due to biological variation
|
|
156
|
+
|
|
157
|
+
## Advanced QC Considerations
|
|
158
|
+
|
|
159
|
+
### Not Included in This Workflow
|
|
160
|
+
|
|
161
|
+
**Ambient RNA correction**
|
|
162
|
+
- Tool: SoupX, CellBender, DecontX
|
|
163
|
+
- When: High background RNA in droplet-based data
|
|
164
|
+
- Effect: Removes contamination from lysed cells
|
|
165
|
+
|
|
166
|
+
**Doublet detection**
|
|
167
|
+
- Tool: scDblFinder, scrublet, DoubletFinder
|
|
168
|
+
- When: Always recommended for droplet-based data
|
|
169
|
+
- Effect: Identifies and removes multiplets (2+ cells in one droplet)
|
|
170
|
+
|
|
171
|
+
**Cell cycle scoring**
|
|
172
|
+
- Tool: scanpy's score_genes_cell_cycle
|
|
173
|
+
- When: Cell cycle effects confound biological signal
|
|
174
|
+
- Effect: Allows regressing out or accounting for cell cycle phase
|
|
175
|
+
|
|
176
|
+
**Batch correction**
|
|
177
|
+
- Tool: Harmony, scVI, ComBat
|
|
178
|
+
- When: Integrating data from multiple batches/experiments
|
|
179
|
+
- Effect: Removes technical batch effects while preserving biology
|
|
180
|
+
|
|
181
|
+
## References
|
|
182
|
+
|
|
183
|
+
- scverse Best Practices: https://www.sc-best-practices.org/preprocessing_visualization/quality_control.html
|
|
184
|
+
- Luecken & Theis (2019): Current best practices in single-cell RNA-seq analysis
|
|
185
|
+
- Osorio & Cai (2021): Systematic determination of the mitochondrial proportion in human and mouse genomes
|
|
186
|
+
- Germain et al. (2020): Doublet identification in single-cell sequencing data using scDblFinder
|