mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-26 10:26:26 +01:00
## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work > - Its built-in Summarizer keeps status slots useful for people overseeing issue trees > - Those summaries need to tell the reader what they must do now to unblock progress > - The existing skill instead imposed rigid Decide:/Review:/Recent work: sections, cost commentary, and restrictive issue-fetch guidance > - This pull request rewrites the summarize-status instructions to lead with 1–3 specific, concrete unblock actions while letting the model use its judgment for the remaining context > - The benefit is a shorter, clearer summary that is immediately actionable without changing slot writes or the streaming status protocol ## Linked Issues or Issue Description Refs #9713 The built-in summarizer currently prioritizes a fixed reporting template over the reader's immediate unblock actions. Summaries should instead open with the 1–3 specific actions the reader needs to take right now, then provide only the context needed to act. This prompt-only update preserves all summary-slot mechanics and protocols. ## What Changed - Rewrote the bundled `summarize-status` skill to open with 1–3 specific, concrete, actionable items needed right now to unblock the work. - Removed the rigid Decide:/Review:/Recent work: template, the Cost discipline section, and the restrictions against fetching issue detail. - Kept slot-write mechanics and the streaming `STATUS`/sentinel protocol unchanged. - Updated all materialized copies and tests for the same skill text: the `SKILL.md` source, regenerated catalog manifest hashes, compiled fallback string, summarizer built-in `AGENTS.md` and routine, summary generation-issue instructions, and the two tests pinning those strings. - Although the diff touches eight files, every file is either the same skill text in another materialized form or a test asserting it. No behavior outside the summarizer's prompt text changes. ## Verification - `pnpm --filter @paperclipai/skills-catalog test` — 20/20 tests pass. - `pnpm exec vitest run server/src/__tests__/summary-slots.test.ts server/src/__tests__/built-in-agents.test.ts` — 46/46 tests pass. - `git diff --check origin/master...HEAD` — clean. - `pnpm exec vitest run server/src/__tests__/summary-slots.test.ts` — 16/16 tests pass after the Greptile consistency fix. - Latest-head GitHub checks — 25 terminal checks, all successful, neutral, or skipped. ## Risks - Low risk: this intentionally changes generated summary wording and prioritization, but does not change APIs, persistence, slot-write behavior, or the streaming protocol. - The branch name contains an internal task identifier because it was pre-created and pre-pushed for this assigned change; the PR title and body do not expose the internal ticket. > For core feature work, check [`ROADMAP.md`](ROADMAP.md) first and discuss it in `#dev` before opening the PR. Feature PRs that overlap with planned core work may need to be redirected — check the roadmap first. See `CONTRIBUTING.md`. ## Model Used - OpenAI Codex using `gpt-5.6-sol`, high reasoning mode, with repository, terminal, GitHub CLI, and code-execution tools. ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have searched GitHub for duplicate or related PRs and linked them above - [x] I have either (a) linked existing issues with `Fixes: #` / `Closes #` / `Refs #` OR (b) described the issue in-PR following the relevant issue template - [x] I have not referenced internal/instance-local Paperclip issues or links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip` URLs) - [ ] My branch name describes the change (e.g. `docs/...`, `fix/...`) and contains no internal Paperclip ticket id or instance-derived details - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [x] All Paperclip CI gates are green - [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups - [x] I will address all Greptile and reviewer comments before requesting merge --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Paperclip <noreply@paperclip.ing>
1048 lines
36 KiB
JSON
1048 lines
36 KiB
JSON
{
|
||
"schemaVersion": 1,
|
||
"packageName": "@paperclipai/skills-catalog",
|
||
"packageVersion": "0.3.1",
|
||
"generatedAt": "2026-07-23T19:56:45.849Z",
|
||
"skills": [
|
||
{
|
||
"id": "paperclipai:bundled:docs:doc-maintenance",
|
||
"key": "paperclipai/bundled/docs/doc-maintenance",
|
||
"kind": "bundled",
|
||
"category": "docs",
|
||
"slug": "doc-maintenance",
|
||
"name": "doc-maintenance",
|
||
"description": "Keep project docs aligned with recent code and feature changes — detect drift, update affected pages, and add release-relevant notes without rewriting unchanged sections.",
|
||
"path": "catalog/bundled/docs/doc-maintenance",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"engineer",
|
||
"product",
|
||
"devrel"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"docs",
|
||
"documentation",
|
||
"release-notes"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 4478,
|
||
"sha256": "fb0353386c5e5e5e13bcbb3233f044e3dccecf371f429d6328f26c26d7cb6169"
|
||
}
|
||
],
|
||
"contentHash": "sha256:2e02299210fd17c1fe1867b4ee8c144a11b6fe1fe481f83b8268cfbaaf10f9aa"
|
||
},
|
||
{
|
||
"id": "paperclipai:bundled:paperclip-operations:issue-triage",
|
||
"key": "paperclipai/bundled/paperclip-operations/issue-triage",
|
||
"kind": "bundled",
|
||
"category": "paperclip-operations",
|
||
"slug": "issue-triage",
|
||
"name": "issue-triage",
|
||
"description": "Triage Paperclip inbox issues that are stale, blocked, in-review, or assigned-but-not-progressing, and decide a single next action per issue (resume, reassign, unblock, escalate, or close).",
|
||
"path": "catalog/bundled/paperclip-operations/issue-triage",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"manager",
|
||
"ceo",
|
||
"engineer"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"paperclip",
|
||
"triage",
|
||
"inbox",
|
||
"workflow"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 4042,
|
||
"sha256": "df5bdc8bf5e017b7ba5f70a4b5323fad51d0c323278f386580f26cf43ad09160"
|
||
}
|
||
],
|
||
"contentHash": "sha256:88dc13560371fb364963782cb4f6eeb4090fcde92ee3774479428ed6b90e11c1"
|
||
},
|
||
{
|
||
"id": "paperclipai:bundled:paperclip-operations:reflection-coach",
|
||
"key": "paperclipai/bundled/paperclip-operations/reflection-coach",
|
||
"kind": "bundled",
|
||
"category": "paperclip-operations",
|
||
"slug": "reflection-coach",
|
||
"name": "reflection-coach",
|
||
"description": "Reflect on another agent's recent execution record and propose the smallest durable instruction, skill, or tool-description change. Use for evidence-backed coaching proposals, never hot-swaps.",
|
||
"path": "catalog/bundled/paperclip-operations/reflection-coach",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"manager",
|
||
"general"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"paperclip",
|
||
"reflection",
|
||
"coaching",
|
||
"agents",
|
||
"skills"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 11837,
|
||
"sha256": "86d6e382c32c626213b46c010cc7fc1ec460821a8c777cfa5b8e86fa9d6a86b2"
|
||
}
|
||
],
|
||
"contentHash": "sha256:1c7a82cd9638a1d845b238032da3ff4ad80c5b6a87dca46082f501fa4583db55"
|
||
},
|
||
{
|
||
"id": "paperclipai:bundled:paperclip-operations:summarize-status",
|
||
"key": "paperclipai/bundled/paperclip-operations/summarize-status",
|
||
"kind": "bundled",
|
||
"category": "paperclip-operations",
|
||
"slug": "summarize-status",
|
||
"name": "summarize-status",
|
||
"description": "Write a short, colloquial summary for a Paperclip summary slot: open with the 1–3 specific, concrete actions the reader needs to take right now to unblock the work, then a brief plain-language status, streaming progress as it works.",
|
||
"path": "catalog/bundled/paperclip-operations/summarize-status",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"general",
|
||
"manager"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"paperclip",
|
||
"summary",
|
||
"status",
|
||
"reporting",
|
||
"operations"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 8682,
|
||
"sha256": "c5f459ced4e97e6ae33c3ffbe7b3fb7d4c1fe7bfb0121187f0c2f9000a670b37"
|
||
}
|
||
],
|
||
"contentHash": "sha256:32d2f231a35fc3a658b244f13dd726b2f2bc642db6d3512559fdf9a2b680838d"
|
||
},
|
||
{
|
||
"id": "paperclipai:bundled:paperclip-operations:task-planning",
|
||
"key": "paperclipai/bundled/paperclip-operations/task-planning",
|
||
"kind": "bundled",
|
||
"category": "paperclip-operations",
|
||
"slug": "task-planning",
|
||
"name": "task-planning",
|
||
"description": "Turn a Paperclip issue or request into a structured implementation plan with child task graph, blockers, owners, and acceptance criteria, then save it as the issue `plan` document.",
|
||
"path": "catalog/bundled/paperclip-operations/task-planning",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"manager",
|
||
"engineer",
|
||
"product"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"paperclip",
|
||
"planning",
|
||
"issues",
|
||
"delegation"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 4938,
|
||
"sha256": "9c52a44a30ec8d306119da51bf298e9e3e6c382a9a9559ffd3054bf5e0c75f36"
|
||
}
|
||
],
|
||
"contentHash": "sha256:487c3116eead89fef4f71c984329c41836bd69951b7ef9ed8736c69435e02438"
|
||
},
|
||
{
|
||
"id": "paperclipai:bundled:product:paperclip-capsules",
|
||
"key": "paperclipai/bundled/product/paperclip-capsules",
|
||
"kind": "bundled",
|
||
"category": "product",
|
||
"slug": "paperclip-capsules",
|
||
"name": "paperclip-capsules",
|
||
"description": "Generate, implement, or review Paperclip capsule visuals. Use for capsule art, agent capsules, heartbeat status capsules, identicons, capsule banks, or brand-usage validation.",
|
||
"path": "catalog/bundled/product/paperclip-capsules",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"designer",
|
||
"product",
|
||
"engineer",
|
||
"marketing"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"paperclip",
|
||
"brand",
|
||
"capsules",
|
||
"agents",
|
||
"visual-design",
|
||
"hyperframes"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 5831,
|
||
"sha256": "dd659ccb46e105336eb00fbe689b1d5531347fc69493c3156390d40ee413c93e"
|
||
},
|
||
{
|
||
"path": "references/generator-workflows.md",
|
||
"kind": "reference",
|
||
"sizeBytes": 4356,
|
||
"sha256": "b5f72e5b6683e8f93f2d852e84c2cc19e6ab438b250bf777dfb2480dd4f6e1b6"
|
||
},
|
||
{
|
||
"path": "references/hero-capsule-bank.md",
|
||
"kind": "reference",
|
||
"sizeBytes": 5981,
|
||
"sha256": "ec3d34113aa7bb527560d1eb4d8ab7667c73e18284c85a2019122743a767525a"
|
||
},
|
||
{
|
||
"path": "references/identicon-prototyper.md",
|
||
"kind": "reference",
|
||
"sizeBytes": 6669,
|
||
"sha256": "0b19419efa1396a402097decabe24ea9ae649678569449c8ce855e0678df6bfe"
|
||
},
|
||
{
|
||
"path": "references/individual-status-capsules.md",
|
||
"kind": "reference",
|
||
"sizeBytes": 5031,
|
||
"sha256": "be1f2eccf96b4d2deefe45b3bc1dd0a3597278472c2ffedadc43c57161e9103d"
|
||
}
|
||
],
|
||
"contentHash": "sha256:a2b26cf6895affeeb70c85567a061094450a59bd3c4fdcf28ee65858599ac12c"
|
||
},
|
||
{
|
||
"id": "paperclipai:bundled:product:wireframe",
|
||
"key": "paperclipai/bundled/product/wireframe",
|
||
"kind": "bundled",
|
||
"category": "product",
|
||
"slug": "wireframe",
|
||
"name": "wireframe",
|
||
"description": "Produce low-fidelity black-and-white UI wireframes as SVGs or viewer pages. Use when asked to wireframe, sketch a screen, draft a layout, make a low-fi mockup, or publish wireframes.",
|
||
"path": "catalog/bundled/product/wireframe",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "assets",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"designer",
|
||
"product",
|
||
"engineer"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"design",
|
||
"wireframe",
|
||
"ux",
|
||
"prototyping",
|
||
"svg"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 11509,
|
||
"sha256": "6992047cc97b67211cc8c1183718ab9aa26b8afc34c70d54d20558c215daaf48"
|
||
},
|
||
{
|
||
"path": "assets/site-template.html",
|
||
"kind": "asset",
|
||
"sizeBytes": 14791,
|
||
"sha256": "8886ad77c386c17b0457f11624aab136c33db7f28dcd6f10fc18e9d833d0950f"
|
||
},
|
||
{
|
||
"path": "assets/template-mobile.svg",
|
||
"kind": "asset",
|
||
"sizeBytes": 925,
|
||
"sha256": "dc32af257df1f986b87a7b30a6104de825057dc4d6f12b381f5a28308f0002f0"
|
||
},
|
||
{
|
||
"path": "assets/template.svg",
|
||
"kind": "asset",
|
||
"sizeBytes": 1262,
|
||
"sha256": "63f8adb8eb4b21dea6fd442b9e9312704c419535eb577d4ef0bfb54410fd576b"
|
||
},
|
||
{
|
||
"path": "references/components.md",
|
||
"kind": "reference",
|
||
"sizeBytes": 14806,
|
||
"sha256": "4ce18f418d78b13cdfa6fe8070173044a631576cd2b999571e6703f58894496c"
|
||
},
|
||
{
|
||
"path": "references/examples.md",
|
||
"kind": "reference",
|
||
"sizeBytes": 16108,
|
||
"sha256": "18f486e95a578a50cf6c9f93394b82534392771320692e4876edf17054bfae55"
|
||
},
|
||
{
|
||
"path": "references/grid-system.md",
|
||
"kind": "reference",
|
||
"sizeBytes": 4581,
|
||
"sha256": "017260d2216859d57e5fa869e0efc6b88c7ed4d8a8a4f5af04fe89a3ef2445bd"
|
||
}
|
||
],
|
||
"contentHash": "sha256:7106d84fc9db2053090f692706e41cfc586e7dd85a44f568e3319c4eefbdde46"
|
||
},
|
||
{
|
||
"id": "paperclipai:bundled:quality:qa-acceptance",
|
||
"key": "paperclipai/bundled/quality/qa-acceptance",
|
||
"kind": "bundled",
|
||
"category": "quality",
|
||
"slug": "qa-acceptance",
|
||
"name": "qa-acceptance",
|
||
"description": "Produce QA acceptance criteria and a manual validation plan for a feature change — golden path, edge cases, error states, performance limits, and explicit pass/fail evidence.",
|
||
"path": "catalog/bundled/quality/qa-acceptance",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"qa",
|
||
"engineer",
|
||
"product"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"qa",
|
||
"acceptance",
|
||
"validation",
|
||
"testing"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 3861,
|
||
"sha256": "c631b437ab26d104af6cdb963d8f679a9341439041b3cb3ec8835f4ff551b378"
|
||
}
|
||
],
|
||
"contentHash": "sha256:32372dacaf62e93454b9855968c4eec96456ba78b509f450b3dfaa48e31ef356"
|
||
},
|
||
{
|
||
"id": "paperclipai:bundled:software-development:github-pr-workflow",
|
||
"key": "paperclipai/bundled/software-development/github-pr-workflow",
|
||
"kind": "bundled",
|
||
"category": "software-development",
|
||
"slug": "github-pr-workflow",
|
||
"name": "github-pr-workflow",
|
||
"description": "Prepare a GitHub pull request from a feature branch — branch hygiene, commit shape, title/body, verification notes, screenshots for UI work, and replies to review comments.",
|
||
"path": "catalog/bundled/software-development/github-pr-workflow",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"engineer"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"github",
|
||
"pull-requests",
|
||
"code-review",
|
||
"release"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 3970,
|
||
"sha256": "f498ec4ebb1779dea37adeb1db8a8b22316282798e35ee02e2fc5ff627d7e261"
|
||
}
|
||
],
|
||
"contentHash": "sha256:90f278c89aa0711be150c1cd2456ca25620d02f36995b113ca9837d756a37f6c"
|
||
},
|
||
{
|
||
"id": "paperclipai:optional:browser:agent-browser",
|
||
"key": "paperclipai/optional/browser/agent-browser",
|
||
"kind": "optional",
|
||
"category": "browser",
|
||
"slug": "agent-browser",
|
||
"name": "agent-browser",
|
||
"description": "Drive a real browser to inspect or interact with a web page or app — navigate, take screenshots, read console and network, fill simple forms — for verification tasks, not unattended automation.",
|
||
"path": "catalog/optional/browser/agent-browser",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"qa",
|
||
"engineer",
|
||
"researcher"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"browser",
|
||
"puppeteer",
|
||
"playwright",
|
||
"verification"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 5133,
|
||
"sha256": "362f7b9d02297782bc6f0c093f495b8a0304a75bcf4b42e5c280a42b1f757b7d"
|
||
}
|
||
],
|
||
"contentHash": "sha256:eabb2c9f7b5e1a27ebb1e05a711d61433a266478154cd671a685e99e67aadea2"
|
||
},
|
||
{
|
||
"id": "paperclipai:optional:content:release-announcement",
|
||
"key": "paperclipai/optional/content/release-announcement",
|
||
"kind": "optional",
|
||
"category": "content",
|
||
"slug": "release-announcement",
|
||
"name": "release-announcement",
|
||
"description": "Write a release announcement — changelog, blog post, in-app note, or social post — that leads with user impact, names the audience, and includes upgrade/migration steps without filler.",
|
||
"path": "catalog/optional/content/release-announcement",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"devrel",
|
||
"product",
|
||
"writer"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"release",
|
||
"changelog",
|
||
"announcement",
|
||
"communication"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 6945,
|
||
"sha256": "d745cca96350518fabae14f5c407d779e1df2c5d091b5b4a5c55bb888b569e5f"
|
||
}
|
||
],
|
||
"contentHash": "sha256:efe8ea89b552df95222609867c9c75f1b40e16f457d34e7e4a124f54daa33efa"
|
||
},
|
||
{
|
||
"id": "paperclipai:optional:finance:ramp",
|
||
"key": "paperclipai/optional/finance/ramp",
|
||
"kind": "optional",
|
||
"category": "finance",
|
||
"slug": "ramp",
|
||
"name": "ramp",
|
||
"description": "Fetch and follow Ramp's published agent playbooks inside Paperclip, with mandatory approval gates for spend, incorporation, cards, account setup, and other financial actions.",
|
||
"path": "catalog/optional/finance/ramp",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"finance",
|
||
"operations",
|
||
"founder",
|
||
"engineer"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"ramp",
|
||
"finance",
|
||
"spend",
|
||
"approvals",
|
||
"agent-cards"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 7016,
|
||
"sha256": "698cd69ebf2f2481ed83c8e9477b56ae78288cc4c751d7d35f649ff2483802a3"
|
||
}
|
||
],
|
||
"contentHash": "sha256:276d85e98a4732f278204e26438aa95fde158dd2d15c1e427c4c7c7d492e769d"
|
||
},
|
||
{
|
||
"id": "paperclipai:optional:product:design-critique",
|
||
"key": "paperclipai/optional/product/design-critique",
|
||
"kind": "optional",
|
||
"category": "product",
|
||
"slug": "design-critique",
|
||
"name": "design-critique",
|
||
"description": "Give a structured product design critique — user job clarity, hierarchy, affordance, error states, accessibility, and consistency — focused on what to change, in what order, and why.",
|
||
"path": "catalog/optional/product/design-critique",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "markdown_only",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"designer",
|
||
"product",
|
||
"engineer"
|
||
],
|
||
"requires": [],
|
||
"tags": [
|
||
"design",
|
||
"product",
|
||
"ux",
|
||
"review"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 4851,
|
||
"sha256": "022e619baf6cc25725946279cb8052d22af090dd6cd6dc8c20f17867f71a5d8e"
|
||
}
|
||
],
|
||
"contentHash": "sha256:429f94df398a0697042b5bbe4755b1ff1a230aa5f41d99118ad37493ac65d21c"
|
||
},
|
||
{
|
||
"id": "paperclipai:optional:research:last30days",
|
||
"key": "paperclipai/optional/research/last30days",
|
||
"kind": "optional",
|
||
"category": "research",
|
||
"slug": "last30days",
|
||
"name": "last30days",
|
||
"description": "Research what people actually say about any topic in the last 30 days. Pulls posts and engagement from Reddit, X, YouTube, TikTok, Hacker News, Polymarket, GitHub, and the web.",
|
||
"path": "catalog/optional/research/last30days",
|
||
"entrypoint": "SKILL.md",
|
||
"trustLevel": "scripts_executables",
|
||
"compatibility": "compatible",
|
||
"defaultInstall": false,
|
||
"recommendedForRoles": [
|
||
"researcher",
|
||
"marketer",
|
||
"product-manager",
|
||
"analyst"
|
||
],
|
||
"requires": [
|
||
"node",
|
||
"python3"
|
||
],
|
||
"tags": [
|
||
"research",
|
||
"last-30-days",
|
||
"social-media",
|
||
"trends",
|
||
"citations",
|
||
"reddit",
|
||
"x",
|
||
"youtube"
|
||
],
|
||
"files": [
|
||
{
|
||
"path": "SKILL.md",
|
||
"kind": "skill",
|
||
"sizeBytes": 130813,
|
||
"sha256": "534f0347f304ec51254a7d3a210e07c86cc252175cc6a588e97d32ce94f0f745"
|
||
},
|
||
{
|
||
"path": "agents/openai.yaml",
|
||
"kind": "other",
|
||
"sizeBytes": 448,
|
||
"sha256": "f46e7f09d3118dee7324ac165391ccb7ffe55323d1d75304e34062017913939c"
|
||
},
|
||
{
|
||
"path": "references/save-html-brief.md",
|
||
"kind": "reference",
|
||
"sizeBytes": 5940,
|
||
"sha256": "ca15e03bf63a3af1cfa0347df36b0aee999c6c6c631f31b4171a5df09e765d43"
|
||
},
|
||
{
|
||
"path": "scripts/briefing.py",
|
||
"kind": "script",
|
||
"sizeBytes": 8342,
|
||
"sha256": "d4881d16493f5504c5a947f31ced861d674e2423e5fc668305beaf5e849420b7"
|
||
},
|
||
{
|
||
"path": "scripts/compare.sh",
|
||
"kind": "script",
|
||
"sizeBytes": 2291,
|
||
"sha256": "cdb2538522a60c803aeebc3336673c8702380a902604ad85770206382996a6f5"
|
||
},
|
||
{
|
||
"path": "scripts/last30days.py",
|
||
"kind": "script",
|
||
"sizeBytes": 44282,
|
||
"sha256": "818d6b839eb04417a5d0acf3bee24258fbc70543df968619fd3573597dc88e8e"
|
||
},
|
||
{
|
||
"path": "scripts/lib/__init__.py",
|
||
"kind": "script",
|
||
"sizeBytes": 29,
|
||
"sha256": "3fb925405f898201188f9b5eea04e214ea8c8a64643397fd727f08ffeea234d9"
|
||
},
|
||
{
|
||
"path": "scripts/lib/bird_x.py",
|
||
"kind": "script",
|
||
"sizeBytes": 17960,
|
||
"sha256": "c7cbd33a5b4c317b07eeca7c7e3c1aa57369487cd4cd3602abbe9b6acb019e6a"
|
||
},
|
||
{
|
||
"path": "scripts/lib/bluesky.py",
|
||
"kind": "script",
|
||
"sizeBytes": 12343,
|
||
"sha256": "af7bbaa68f6944a50089447992b95881e15c085de829426360f50740a35cba89"
|
||
},
|
||
{
|
||
"path": "scripts/lib/categories.py",
|
||
"kind": "script",
|
||
"sizeBytes": 7635,
|
||
"sha256": "e4ab8435e09c371f2475751fdc1c58150799b3746afcc7e38d5dad30adb210d5"
|
||
},
|
||
{
|
||
"path": "scripts/lib/chrome_cookies.py",
|
||
"kind": "script",
|
||
"sizeBytes": 10911,
|
||
"sha256": "eeb8f99b92cfc9aa65b20b6dbedfcfd321166f3fa771a95299ffb0b950b1cedc"
|
||
},
|
||
{
|
||
"path": "scripts/lib/cluster.py",
|
||
"kind": "script",
|
||
"sizeBytes": 11018,
|
||
"sha256": "fa9fb8905552e7bb5a2a2854f8b3c620a464054238a008d74ba89d0c247a776e"
|
||
},
|
||
{
|
||
"path": "scripts/lib/competitors.py",
|
||
"kind": "script",
|
||
"sizeBytes": 7332,
|
||
"sha256": "a76c5d679b7f3c93a07e389811f79526f11e1e03411cecd4d9569e3aca32a77d"
|
||
},
|
||
{
|
||
"path": "scripts/lib/cookie_extract.py",
|
||
"kind": "script",
|
||
"sizeBytes": 14450,
|
||
"sha256": "9d34ea3a8565eae8b67f72e8b625c22a29d41274c3b8d6c8b6aa171c18ebad5b"
|
||
},
|
||
{
|
||
"path": "scripts/lib/dates.py",
|
||
"kind": "script",
|
||
"sizeBytes": 3201,
|
||
"sha256": "ae4ec6455021c82ef3321ef5dde6f7ba41e6b91a3e6ff601174ac9aa20e5c8f9"
|
||
},
|
||
{
|
||
"path": "scripts/lib/dedupe.py",
|
||
"kind": "script",
|
||
"sizeBytes": 3315,
|
||
"sha256": "b9acabf496e0743189fbeed43d447280fee17e10a40931f9083d2a1f2894d863"
|
||
},
|
||
{
|
||
"path": "scripts/lib/digg.py",
|
||
"kind": "script",
|
||
"sizeBytes": 13305,
|
||
"sha256": "95a2845d4751efb5738d2a69c7246f8269447395a7da324e0d6ae0feefd7c9d8"
|
||
},
|
||
{
|
||
"path": "scripts/lib/entity_extract.py",
|
||
"kind": "script",
|
||
"sizeBytes": 4211,
|
||
"sha256": "b04103103981915557fd410305f3a8031d5e71d687491ca89976be25d9bc84a4"
|
||
},
|
||
{
|
||
"path": "scripts/lib/env.py",
|
||
"kind": "script",
|
||
"sizeBytes": 25940,
|
||
"sha256": "9ca2e2341565a6c933d51800a510d07b84707825d19234d991eb472454b46933"
|
||
},
|
||
{
|
||
"path": "scripts/lib/fanout.py",
|
||
"kind": "script",
|
||
"sizeBytes": 3155,
|
||
"sha256": "43f21244f9bd1bf143d2f4c478cc2fcc9ffc4e403539e8c08e86e106ed5f0b83"
|
||
},
|
||
{
|
||
"path": "scripts/lib/fusion.py",
|
||
"kind": "script",
|
||
"sizeBytes": 8553,
|
||
"sha256": "c764709a7d4576121c193ae75ded057dd177b6bea512ca57dd72680d74030b41"
|
||
},
|
||
{
|
||
"path": "scripts/lib/github.py",
|
||
"kind": "script",
|
||
"sizeBytes": 34879,
|
||
"sha256": "0f8eb97c20463b975b3bb752d0e3afec98ef853430e495f21fc06f01c27d2baf"
|
||
},
|
||
{
|
||
"path": "scripts/lib/grounding.py",
|
||
"kind": "script",
|
||
"sizeBytes": 11723,
|
||
"sha256": "440386c32afb3c01678fe5dfab197449a9a910018a40cbbc1e9e10ecb9d4843a"
|
||
},
|
||
{
|
||
"path": "scripts/lib/hackernews.py",
|
||
"kind": "script",
|
||
"sizeBytes": 11619,
|
||
"sha256": "95db30a3bf441ee73fb49a04fa8974440e381e56c7d70e87b48e3b69ae0cdfa5"
|
||
},
|
||
{
|
||
"path": "scripts/lib/html_render.py",
|
||
"kind": "script",
|
||
"sizeBytes": 17791,
|
||
"sha256": "5070f6a58d6fcae44a20ecd9108fd204b042bea1d47f8a67efce6d3831aa87ad"
|
||
},
|
||
{
|
||
"path": "scripts/lib/http.py",
|
||
"kind": "script",
|
||
"sizeBytes": 10191,
|
||
"sha256": "760308aa8b8e3abbaa3273a4ca4df5b0bc8cc71ba8864b5740aaac545972731e"
|
||
},
|
||
{
|
||
"path": "scripts/lib/instagram.py",
|
||
"kind": "script",
|
||
"sizeBytes": 18874,
|
||
"sha256": "cda8c8558e6cdc9b4bf3f7bb470c2e223db927acc6a77f139a83ec7987488bb1"
|
||
},
|
||
{
|
||
"path": "scripts/lib/log.py",
|
||
"kind": "script",
|
||
"sizeBytes": 831,
|
||
"sha256": "11c4d61cdb5b1ff91919dcd28ec62ce88e555def30eed62a8071973b5ffe8317"
|
||
},
|
||
{
|
||
"path": "scripts/lib/normalize.py",
|
||
"kind": "script",
|
||
"sizeBytes": 19870,
|
||
"sha256": "e79e294e4ff8ebfa34f7561c63e0846af0380b8be299d484cc8a2f490e82b474"
|
||
},
|
||
{
|
||
"path": "scripts/lib/perplexity.py",
|
||
"kind": "script",
|
||
"sizeBytes": 4789,
|
||
"sha256": "70859e7296035936ae0da441119edfe381158d5d0de06afee87a3504007f91c7"
|
||
},
|
||
{
|
||
"path": "scripts/lib/pinterest.py",
|
||
"kind": "script",
|
||
"sizeBytes": 5366,
|
||
"sha256": "a6ac5085c900072b84930fafab8c81c9e5a792a718c21801d3fa0bd293d279f6"
|
||
},
|
||
{
|
||
"path": "scripts/lib/pipeline.py",
|
||
"kind": "script",
|
||
"sizeBytes": 45491,
|
||
"sha256": "9641f56faff2d685b0c5c483b2113721d151174a2eef265afe644e131c554454"
|
||
},
|
||
{
|
||
"path": "scripts/lib/planner.py",
|
||
"kind": "script",
|
||
"sizeBytes": 30490,
|
||
"sha256": "c0953abea402454a88c2573aa0c97bb6bba4c87e529d9f157a881e15c4123154"
|
||
},
|
||
{
|
||
"path": "scripts/lib/polymarket.py",
|
||
"kind": "script",
|
||
"sizeBytes": 30318,
|
||
"sha256": "cbd54a66988b4ebc4aebf2db6c637d4e516065518c333cd0495332458c2d9080"
|
||
},
|
||
{
|
||
"path": "scripts/lib/preflight.py",
|
||
"kind": "script",
|
||
"sizeBytes": 4541,
|
||
"sha256": "0fafa53bc63a44ad4525d99d6bb37080b0693e2d45265ce36af09b4a0e9b2c9b"
|
||
},
|
||
{
|
||
"path": "scripts/lib/providers.py",
|
||
"kind": "script",
|
||
"sizeBytes": 15817,
|
||
"sha256": "7460004a2e8df0f8c94d764c0eb01f8d782bb160ce2e157105fadd0dd2953a5d"
|
||
},
|
||
{
|
||
"path": "scripts/lib/quality_nudge.py",
|
||
"kind": "script",
|
||
"sizeBytes": 13438,
|
||
"sha256": "69b6d58abea8171c895f105ee62b2db6f7ea35cebbe08d7e6e8884d810891fef"
|
||
},
|
||
{
|
||
"path": "scripts/lib/query.py",
|
||
"kind": "script",
|
||
"sizeBytes": 4018,
|
||
"sha256": "6bc2e0649034cdb28471346a66e2448ba58762cb7774c4fce45c055ab160912a"
|
||
},
|
||
{
|
||
"path": "scripts/lib/reddit_enrich.py",
|
||
"kind": "script",
|
||
"sizeBytes": 9535,
|
||
"sha256": "652a9c5abecf22f3c26ff6d6b732a43703113a559ce31acab7af012eb25d4e7a"
|
||
},
|
||
{
|
||
"path": "scripts/lib/reddit_public.py",
|
||
"kind": "script",
|
||
"sizeBytes": 13066,
|
||
"sha256": "ea25034726aa895c123216e356c03856a8116efedd29620bb2ebc0d01ff4c420"
|
||
},
|
||
{
|
||
"path": "scripts/lib/reddit.py",
|
||
"kind": "script",
|
||
"sizeBytes": 24701,
|
||
"sha256": "dba1019f67f677c869f14a1f892b1562dd10b6f96bffc75ffad37eb4d3bc9877"
|
||
},
|
||
{
|
||
"path": "scripts/lib/relevance.py",
|
||
"kind": "script",
|
||
"sizeBytes": 5941,
|
||
"sha256": "b9f776f9f8e5d4fbf1fcc86f6604bc0c391c988153d3264b8dc431ff34783382"
|
||
},
|
||
{
|
||
"path": "scripts/lib/render.py",
|
||
"kind": "script",
|
||
"sizeBytes": 71577,
|
||
"sha256": "189ffa786428515a3b02f680e71069b7907eaa24c7aadd315e9abaecb0a6a9fc"
|
||
},
|
||
{
|
||
"path": "scripts/lib/rerank.py",
|
||
"kind": "script",
|
||
"sizeBytes": 17106,
|
||
"sha256": "419c52fc08144c41e08f7574093c5b6cd21271900b51680b6393e61441ffea3c"
|
||
},
|
||
{
|
||
"path": "scripts/lib/resolve.py",
|
||
"kind": "script",
|
||
"sizeBytes": 12448,
|
||
"sha256": "b23f3dd54d6ede0986219aacdda81ece72f1a0a629d72a9ec56b24bc645ccb7c"
|
||
},
|
||
{
|
||
"path": "scripts/lib/safari_cookies.py",
|
||
"kind": "script",
|
||
"sizeBytes": 5698,
|
||
"sha256": "4d66c27cbf5725cc7cb815ca42191e70261c52196c2823bab9c6050ca32ccf71"
|
||
},
|
||
{
|
||
"path": "scripts/lib/schema.py",
|
||
"kind": "script",
|
||
"sizeBytes": 11206,
|
||
"sha256": "8d815d3daee8d469e504bb1264fc174af4abc179dd7d1fa87d7313ed01d914c6"
|
||
},
|
||
{
|
||
"path": "scripts/lib/setup_wizard.py",
|
||
"kind": "script",
|
||
"sizeBytes": 18688,
|
||
"sha256": "be0f867e96d15f7458faac2194c444dc0ec9ec4f3c9fe4d74459e083b80c1a73"
|
||
},
|
||
{
|
||
"path": "scripts/lib/signals.py",
|
||
"kind": "script",
|
||
"sizeBytes": 9715,
|
||
"sha256": "4071cf5fa4c99b0ee51d949ca69ec4594d7e1986ec6a8019b55bb877e219d49a"
|
||
},
|
||
{
|
||
"path": "scripts/lib/skill_meta.py",
|
||
"kind": "script",
|
||
"sizeBytes": 1207,
|
||
"sha256": "e922e6ecdb19fa3daf9c6673acb13a9b23f97362eac1cb11211c998dea0fdbd1"
|
||
},
|
||
{
|
||
"path": "scripts/lib/snippet.py",
|
||
"kind": "script",
|
||
"sizeBytes": 1560,
|
||
"sha256": "6bd2143a4264fe11d5be1b805742336ab82397ae0293c13e8b5b3084bfa2612d"
|
||
},
|
||
{
|
||
"path": "scripts/lib/subproc.py",
|
||
"kind": "script",
|
||
"sizeBytes": 2807,
|
||
"sha256": "cf7bf3dcaf79375c5bd014718a8eb5f6565275294eeaa0059fef93d8e4b6452d"
|
||
},
|
||
{
|
||
"path": "scripts/lib/threads.py",
|
||
"kind": "script",
|
||
"sizeBytes": 6728,
|
||
"sha256": "7508629028c3b4a187699797ab0d9e7b179cbae3c53b9fabdaf9d905b1fc2c1d"
|
||
},
|
||
{
|
||
"path": "scripts/lib/tiktok.py",
|
||
"kind": "script",
|
||
"sizeBytes": 20993,
|
||
"sha256": "f0074737c4bbf176118382ad4c0c9e8c8d6f4544bd9fc42d224f7c1da13a8d73"
|
||
},
|
||
{
|
||
"path": "scripts/lib/truthsocial.py",
|
||
"kind": "script",
|
||
"sizeBytes": 5196,
|
||
"sha256": "fd745d0a61b1c69bea813832f3e2c5923b08d476766a378c07f0963b0be2f330"
|
||
},
|
||
{
|
||
"path": "scripts/lib/ui.py",
|
||
"kind": "script",
|
||
"sizeBytes": 25907,
|
||
"sha256": "cdc0ea376fc4ee017449f2aa87a7513add3fa5306f27d4663fb6f7203f12974e"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/bird-search.mjs",
|
||
"kind": "script",
|
||
"sizeBytes": 3998,
|
||
"sha256": "584482e894c38bbde7a915013f741974fa8ea722ac34c56704dccf184f7c3d56"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/cookies.js",
|
||
"kind": "script",
|
||
"sizeBytes": 8153,
|
||
"sha256": "66044440cef3d3b3e3136091b6e224051e8ff97fb1d156f40ccf2d4f3cf203ae"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/features.json",
|
||
"kind": "script",
|
||
"sizeBytes": 523,
|
||
"sha256": "36361f4cae0040255f84709459ebb1f0131566a567269ed7b99d073cad930f66"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/paginate-cursor.js",
|
||
"kind": "script",
|
||
"sizeBytes": 1225,
|
||
"sha256": "5f20227de1d68250ad59b7ad593db4bfb1d0f1a21694963eab3ed413c2d0d5c0"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/query-ids.json",
|
||
"kind": "script",
|
||
"sizeBytes": 815,
|
||
"sha256": "eba47a9d26f87d0b4eb8a4f554833ed8d11b3d8728e363deeae702d09f87fc02"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/runtime-features.js",
|
||
"kind": "script",
|
||
"sizeBytes": 5036,
|
||
"sha256": "f41614d62b6c91dfc85fc4af389e6f49435324bf26460b715a991486609579d8"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/runtime-query-ids.js",
|
||
"kind": "script",
|
||
"sizeBytes": 9424,
|
||
"sha256": "0f5c61dbaad3de7fb44a14c57ed005228e51f9fc361472eff59bff4cb2a1199e"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/twitter-client-base.js",
|
||
"kind": "script",
|
||
"sizeBytes": 4853,
|
||
"sha256": "ea972b7894458e78edd1927d102a052ae45726a7c967b376ac7f5544f5b65499"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/twitter-client-constants.js",
|
||
"kind": "script",
|
||
"sizeBytes": 2535,
|
||
"sha256": "27bd1416ff1f5d4f4516d784a8fb9ee08a87413f07b375752821a32e5b0cd6e3"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/twitter-client-features.js",
|
||
"kind": "script",
|
||
"sizeBytes": 18400,
|
||
"sha256": "4b4f2048069f751a821777cb2084f3b9126d99a958494fef71f0699d8145c4dd"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/twitter-client-search.js",
|
||
"kind": "script",
|
||
"sizeBytes": 7310,
|
||
"sha256": "3dfbe18ea54215d9a6393ff0884d9977dd9ddf0884a06486bdaee8a4e30d4616"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/twitter-client-types.js",
|
||
"kind": "script",
|
||
"sizeBytes": 59,
|
||
"sha256": "6450f74c664db958d703e09288184ef1ca5f622782f9e11a5a9bfa3d3c78c534"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/lib/twitter-client-utils.js",
|
||
"kind": "script",
|
||
"sizeBytes": 19169,
|
||
"sha256": "b230db5583760ccd0b5b5fb1592f449a7d0bc92f6184808e8ffb6f8968df20e9"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/LICENSE",
|
||
"kind": "script",
|
||
"sizeBytes": 1074,
|
||
"sha256": "62316704df7426e5a79d2827ff8aca36e9abb3a73b8e68557030749ebefec667"
|
||
},
|
||
{
|
||
"path": "scripts/lib/vendor/bird-search/package.json",
|
||
"kind": "script",
|
||
"sizeBytes": 331,
|
||
"sha256": "96b65305969a179ee7a7735f1b475599d6035f32fda1fd030ea57ee09380cdb5"
|
||
},
|
||
{
|
||
"path": "scripts/lib/xai_x.py",
|
||
"kind": "script",
|
||
"sizeBytes": 7509,
|
||
"sha256": "6cc244293ed6ea3b0f78a6515b583ff36da96ad30acf1d5457278ab020f1bd47"
|
||
},
|
||
{
|
||
"path": "scripts/lib/xiaohongshu_api.py",
|
||
"kind": "script",
|
||
"sizeBytes": 5321,
|
||
"sha256": "c7a29dfa03f871993dc13a8ad528beed8a648102404b658242ca57878077ef60"
|
||
},
|
||
{
|
||
"path": "scripts/lib/xquik.py",
|
||
"kind": "script",
|
||
"sizeBytes": 6839,
|
||
"sha256": "7c487cb2ba543ff12e38ec6466a2de6ff6762ccd415c1f07093620b49137681a"
|
||
},
|
||
{
|
||
"path": "scripts/lib/xurl_x.py",
|
||
"kind": "script",
|
||
"sizeBytes": 5302,
|
||
"sha256": "8cf6bb235cfc7f39386b282a922487816089fa6ebf4fa49a4d562d95f9686e78"
|
||
},
|
||
{
|
||
"path": "scripts/lib/youtube_yt.py",
|
||
"kind": "script",
|
||
"sizeBytes": 37339,
|
||
"sha256": "787908d06a845ad70654c4939ebabc856311a95b34444f0987ff7ee3db4c0a49"
|
||
},
|
||
{
|
||
"path": "scripts/setup-keychain.sh",
|
||
"kind": "script",
|
||
"sizeBytes": 3229,
|
||
"sha256": "5d2a6b678c905eefe537fbcb98063db3e471c22b7ab4b06d51615d99b14556db"
|
||
},
|
||
{
|
||
"path": "scripts/store.py",
|
||
"kind": "script",
|
||
"sizeBytes": 28534,
|
||
"sha256": "c1e95a00132768e6c38170bee85161a59b5bce3feaa6297a85f1a49d1bfc9fd3"
|
||
},
|
||
{
|
||
"path": "scripts/watchlist.py",
|
||
"kind": "script",
|
||
"sizeBytes": 8929,
|
||
"sha256": "c06378f70f9145f3bd957170dec2549a31463a41b400bbf1ce722911aa2150a1"
|
||
}
|
||
],
|
||
"contentHash": "sha256:9e11e9d2ed3d2062273d131a826cdeedea39bdd269063e2f73ca7f218770c769",
|
||
"source": {
|
||
"type": "github",
|
||
"hostname": "github.com",
|
||
"owner": "mvanhorn",
|
||
"repo": "last30days-skill",
|
||
"ref": "v3.3.0",
|
||
"commit": "daca71f89eb71d0d56d01a43ed7627aa919dba4f",
|
||
"path": "skills/last30days",
|
||
"url": "https://github.com/mvanhorn/last30days-skill/tree/v3.3.0/skills/last30days"
|
||
}
|
||
}
|
||
]
|
||
}
|