Files
PaperClipAI/packages/skills-catalog/generated/catalog.json
DottaandPaperclip efe8b3b707 feat(skills-catalog): add optional /simplified-english skill (#10410)
## Thinking Path

> - Paperclip is the open source app people use to manage AI agents for
work
> - Agents draw writing behavior from installable skills in the shipped
skills catalog (`packages/skills-catalog`)
> - Agent-authored comments, plans, and documents are often wordy or
ambiguous, which slows human readers
> - A small, opt-in skill can set a clear house style for user-facing
prose without touching agent code
> - This pull request adds an optional `simplified-english` catalog
skill that tells agents to write user-facing comments, plans, and
documents in ASD-STE100 Simplified Technical English
> - The benefit is shorter, unambiguous, one-meaning-per-sentence
writing that readers understand on the first pass

## Linked Issues or Issue Description

<!-- Feature request (no public GitHub issue). Described inline per
CONTRIBUTING.md → "Link Issues or Describe Them In-PR". -->

**Problem or motivation**

Agent-authored user-facing text (issue comments, plans, documents) is
frequently long-winded, uses inconsistent vocabulary, and packs multiple
instructions into one sentence. Readers have to re-read it. There is no
shared, installable house style for clear technical writing.

**Proposed solution**

Add an optional content skill, `simplified-english`, to the shipped
catalog. It instructs agents to write user-facing comments, plans, and
documents using only ASD-STE100 Simplified Technical English (short
sentences, one instruction each, approved single-meaning words, active
voice, present tense). Orgs opt in by installing it.

**Alternatives considered**

Baking the guidance into every agent's base instructions (too broad, not
opt-in) or a bundled skill (would apply everywhere by default). An
optional skill keeps it opt-in per org.

**Roadmap alignment**

Additive, opt-in catalog content only; no core behavior change.

## What Changed

- Add
`packages/skills-catalog/catalog/optional/content/simplified-english/SKILL.md`
— a short optional skill instructing agents to write user-facing
comments, plans, and documents in ASD-STE100 Simplified Technical
English. Includes an "Approved words" section that identifies the
controlled vocabulary (the ASD-STE100 Dictionary) and gives concrete
house-choice substitutions.
- Regenerate `packages/skills-catalog/generated/catalog.json` via
`build:manifest` so the manifest includes the new skill.
- Pin the new catalog key in
`packages/skills-catalog/src/shipped-catalog.test.ts`.

## Verification

- `pnpm --filter @paperclipai/skills-catalog build:manifest` → wrote
manifest with the new skill.
- `pnpm --filter @paperclipai/skills-catalog validate` → "Catalog
manifest is valid".
- `pnpm --filter @paperclipai/skills-catalog test` → the catalog
set/count/key pinning tests pass with the new skill included.
- Confirmed the generated entry: key
`paperclipai/optional/content/simplified-english`, trustLevel
`markdown_only`, description within the 300-char budget cap.

## Risks

Low risk. Additive, markdown-only optional skill plus a regenerated
manifest and a pinning-test update. No runtime code, migrations, or
workflow changes. Not installed by default (`defaultInstall: false`).

## Model Used

Claude Opus 4.8 (1M context), extended thinking, with tool use / code
execution.

## 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
- [x] My branch name describes the change and contains no internal
Paperclip ticket id
- [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
- [ ] All Paperclip CI gates are green
- [ ] 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: Paperclip <noreply@paperclip.ing>
2026-07-30 15:28:07 -07:00

1119 lines
38 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"schemaVersion": 1,
"packageName": "@paperclipai/skills-catalog",
"packageVersion": "0.3.1",
"generatedAt": "2026-07-28T22:35:25.645Z",
"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:status-card-query",
"key": "paperclipai/bundled/paperclip-operations/status-card-query",
"kind": "bundled",
"category": "paperclip-operations",
"slug": "status-card-query",
"name": "status-card-query",
"description": "Create and maintain agent-authored Paperclip status cards, or compile a prose interest prompt into bounded CompanySearchQuery objects and write the first summary from the assigned Summarizer run.",
"path": "catalog/bundled/paperclip-operations/status-card-query",
"entrypoint": "SKILL.md",
"trustLevel": "markdown_only",
"compatibility": "compatible",
"defaultInstall": false,
"recommendedForRoles": [
"general",
"manager"
],
"requires": [],
"tags": [
"paperclip",
"status",
"search",
"reporting",
"operations"
],
"files": [
{
"path": "SKILL.md",
"kind": "skill",
"sizeBytes": 6368,
"sha256": "0c6140f51d503cbadc98723ce54c0def48e7e31ea159b0935b8ad6369291498a"
}
],
"contentHash": "sha256:2b6e53bf8491f027afdbd6961ad84f677cfd385a0a6a73616ea84111ca8886ed"
},
{
"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:content:simplified-english",
"key": "paperclipai/optional/content/simplified-english",
"kind": "optional",
"category": "content",
"slug": "simplified-english",
"name": "simplified-english",
"description": "Write user-facing comments, plans, and documents in ASD-STE100 Simplified Technical English — short, unambiguous sentences with approved words and one meaning each — so readers understand them the first time.",
"path": "catalog/optional/content/simplified-english",
"entrypoint": "SKILL.md",
"trustLevel": "markdown_only",
"compatibility": "compatible",
"defaultInstall": false,
"recommendedForRoles": [
"engineer",
"product",
"writer",
"devrel"
],
"requires": [],
"tags": [
"writing",
"communication",
"clarity",
"style"
],
"files": [
{
"path": "SKILL.md",
"kind": "skill",
"sizeBytes": 1578,
"sha256": "a0f7385599873910e2fabf400346016a07dacbc7ece27c0e3616ae8fd94ebfbb"
}
],
"contentHash": "sha256:642321f40d51e0125df05c6fbace49aeb07ec30392058756909c259c9c5eac6a"
},
{
"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"
}
}
]
}