From 32b074b266770df66fd1093887ae149df0f925fc Mon Sep 17 00:00:00 2001 From: "ci[bot]" Date: Sun, 5 Jul 2026 16:02:46 +0000 Subject: [PATCH] :package: deps(thirdparty): update snapshots --- .../.claude-plugin/plugin.json | 2 +- antigravity-awesome-skills/CATALOG.md | 9 +- antigravity-awesome-skills/README.md | 27 ++-- antigravity-awesome-skills/SOURCE.md | 4 +- .../apps/web-app/public/sitemap.xml | 122 ++++++++-------- .../apps/web-app/public/skills.json.backup | 66 +++++++++ .../assets/star-history.png | Bin 50932 -> 50777 bytes antigravity-awesome-skills/data/bundles.json | 4 + antigravity-awesome-skills/data/catalog.json | 87 ++++++++++- .../data/plugin-compatibility.json | 63 +++++++- .../data/skills_index.json | 66 +++++++++ .../docs/integrations/jetski-cortex.md | 6 +- .../jetski-gemini-loader/README.md | 2 +- .../docs/maintainers/repo-growth-seo.md | 6 +- .../docs/maintainers/skills-update-guide.md | 2 +- .../docs/users/bundles.md | 2 +- .../docs/users/claude-code-skills.md | 2 +- .../docs/users/gemini-cli-skills.md | 2 +- .../docs/users/kiro-integration.md | 2 +- .../docs/users/usage.md | 8 +- .../docs/users/visual-guide.md | 8 +- antigravity-awesome-skills/package.json | 2 +- .../.claude-plugin/plugin.json | 2 +- .../skills/time-ledger/SKILL.md | 118 +++++++++++++++ .../skills/trading-ledger/SKILL.md | 121 ++++++++++++++++ .../skills/wgm/SKILL.md | 137 ++++++++++++++++++ .../.codex-plugin/plugin.json | 2 +- .../skills/time-ledger/SKILL.md | 118 +++++++++++++++ .../skills/trading-ledger/SKILL.md | 121 ++++++++++++++++ .../skills/wgm/SKILL.md | 137 ++++++++++++++++++ .../skills/time-ledger/SKILL.md | 118 +++++++++++++++ .../skills/trading-ledger/SKILL.md | 121 ++++++++++++++++ .../skills/wgm/SKILL.md | 137 ++++++++++++++++++ antigravity-awesome-skills/skills_index.json | 66 +++++++++ 34 files changed, 1584 insertions(+), 106 deletions(-) create mode 100644 antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/time-ledger/SKILL.md create mode 100644 antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/trading-ledger/SKILL.md create mode 100644 antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/wgm/SKILL.md create mode 100644 antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/time-ledger/SKILL.md create mode 100644 antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/trading-ledger/SKILL.md create mode 100644 antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/wgm/SKILL.md create mode 100644 antigravity-awesome-skills/skills/time-ledger/SKILL.md create mode 100644 antigravity-awesome-skills/skills/trading-ledger/SKILL.md create mode 100644 antigravity-awesome-skills/skills/wgm/SKILL.md diff --git a/antigravity-awesome-skills/.claude-plugin/plugin.json b/antigravity-awesome-skills/.claude-plugin/plugin.json index c7928114..9d8d0dce 100644 --- a/antigravity-awesome-skills/.claude-plugin/plugin.json +++ b/antigravity-awesome-skills/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "antigravity-awesome-skills", "version": "13.10.0", - "description": "Plugin-safe Claude Code distribution of Antigravity Awesome Skills with 1,850 supported skills.", + "description": "Plugin-safe Claude Code distribution of Antigravity Awesome Skills with 1,853 supported skills.", "author": { "name": "sickn33 and contributors", "url": "https://github.com/sickn33/antigravity-awesome-skills" diff --git a/antigravity-awesome-skills/CATALOG.md b/antigravity-awesome-skills/CATALOG.md index 0005757b..46049a83 100644 --- a/antigravity-awesome-skills/CATALOG.md +++ b/antigravity-awesome-skills/CATALOG.md @@ -2,7 +2,7 @@ Generated at: 2026-07-04T15:00:26.000Z -Total skills: 1898 +Total skills: 1901 ## architecture (113) @@ -230,7 +230,7 @@ Total skills: 1898 | `xiaohongshu-content-strategist` | Create viral Xiaohongshu (小红书) content with platform-native strategy, save-rate optimization, trending formats, and search SEO for China's #1 lifestyle platf... | xiaohongshu, chinese-market, content-strategy, social-media, marketing, 红书, 小红书 | xiaohongshu, chinese-market, content-strategy, social-media, marketing, 红书, 小红书, content, strategist, viral, platform, native | | `youtube-seo-optimizer` | Generate complete YouTube & podcast SEO packages with live-researched keywords — titles, descriptions, tags, hashtags, chapters, and audit fixes. Use for new... | youtube, seo, optimizer | youtube, seo, optimizer, generate, complete, podcast, packages, live, researched, keywords, titles, descriptions | -## data-ai (345) +## data-ai (347) | Skill | Description | Tags | Triggers | | --- | --- | --- | --- | @@ -546,6 +546,8 @@ Total skills: 1898 | `telegram-bot-builder` | Expert in building Telegram bots that solve real problems - from simple automation to complex AI-powered bots. Covers bot architecture, the Telegram Bot API,... | telegram, bot, builder | telegram, bot, builder, building, bots, solve, real, problems, simple, automation, complex, ai | | `testng-skill` | Generates TestNG tests in Java with groups, data providers, parallel execution, XML suite configuration, and listeners. Use when user mentions "TestNG", "@Da... | testng, skill | testng, skill, generates, tests, java, groups, data, providers, parallel, execution, xml, suite | | `the-honoured-one` | Forces the AI to fully load context and read relevant files before performing complex, multi-file tasks, architectural changes, or debugging. Prevents acting... | the, honoured, one | the, honoured, one, forces, ai, fully, load, context, read, relevant, files, before | +| `time-ledger` | Natural-language time tracking: parse what the user says they did into Activity/Minutes/Date rows in their own Notion database — asking instead of guessing w... | time-tracking, notion, quantified-self, productivity, journaling | time-tracking, notion, quantified-self, productivity, journaling, time, ledger, natural, language, tracking, parse, what | +| `trading-ledger` | A trading journal that captures the decision, not just the fill: thesis, plan, and emotion at the moment of entry, written to the user's own Notion database;... | trading-journal, notion, journaling, market-wizards, decision-making | trading-journal, notion, journaling, market-wizards, decision-making, trading, ledger, journal, captures, decision, just, fill | | `train-sentence-transformers` | Train or fine-tune sentence-transformers models across `SentenceTransformer` (bi-encoder; dense or static embedding model; for retrieval, similarity, cluster... | train, sentence, transformers | train, sentence, transformers, fine, tune, models, sentencetransformer, bi, encoder, dense, static, embedding | | `travel-health-analyzer` | 分析旅行健康数据、评估目的地健康风险、提供疫苗接种建议、生成多语言紧急医疗信息卡片。支持WHO/CDC数据集成的专业级旅行健康风险评估。 | travel, health, analyzer | travel, health, analyzer, who, cdc | | `trigger-dev` | Trigger.dev expert for background jobs, AI workflows, and reliable async execution with excellent developer experience and TypeScript-first design. | trigger, dev | trigger, dev, background, jobs, ai, reliable, async, execution, excellent, developer, experience, typescript | @@ -869,7 +871,7 @@ Total skills: 1898 | `yann-lecun-filosofia` | Sub-skill filosófica e pedagógica de Yann LeCun. | persona, ai-philosophy, open-source, education | persona, ai-philosophy, open-source, education, yann, lecun, filosofia, sub, skill, filos, fica, pedag | | `youtube-notetaker` | Turn YouTube talks into local study notes with slides, transcripts, editable annotations, and a markdown-backed viewer. | dair-academy, ai, workflow | dair-academy, ai, workflow, youtube, notetaker, turn, talks, local, study, notes, slides, transcripts | -## general (511) +## general (512) | Skill | Description | Tags | Triggers | | --- | --- | --- | --- | @@ -1368,6 +1370,7 @@ Total skills: 1898 | `web-media-getter` | One query across free image / video / GIF APIs (stock + historical/archival + GIF engines), returning normalized, license-tagged results with optional top-K ... | media, images, video, gif, stock, archival, attribution | media, images, video, gif, stock, archival, attribution, web, getter, one, query, free | | `web-performance-optimization` | Optimize website and web application performance including loading speed, Core Web Vitals, bundle size, caching strategies, and runtime performance | web, performance, optimization | web, performance, optimization, optimize, website, application, including, loading, speed, core, vitals, bundle | | `weightloss-analyzer` | 分析减肥数据、计算代谢率、追踪能量缺口、管理减肥阶段 | weightloss, analyzer | weightloss, analyzer | +| `wgm` | Turns a rough request into working software via a governed build loop: align first, plan, then iterate one task at a time with deterministic backpressure and... | build-loop, spec-driven, ralph-loop, self-improving, agentic-development, methodology | build-loop, spec-driven, ralph-loop, self-improving, agentic-development, methodology, wgm, turns, rough, request, working, software | | `wiki-architect` | You are a documentation architect that produces structured wiki catalogues and onboarding guides from codebases. | wiki | wiki, architect, documentation, produces, structured, catalogues, onboarding, guides, codebases | | `wiki-changelog` | Generate structured changelogs from git history. Use when user asks "what changed recently", "generate a changelog", "summarize commits" or user wants to und... | wiki, changelog | wiki, changelog, generate, structured, changelogs, git, history, user, asks, what, changed, recently | | `wiki-onboarding` | Generate two complementary onboarding documents that together give any engineer — from newcomer to principal — a complete understanding of a codebase. Use wh... | wiki, onboarding | wiki, onboarding, generate, two, complementary, documents, together, give, any, engineer, newcomer, principal | diff --git a/antigravity-awesome-skills/README.md b/antigravity-awesome-skills/README.md index 29283a51..6d11ca0d 100644 --- a/antigravity-awesome-skills/README.md +++ b/antigravity-awesome-skills/README.md @@ -1,9 +1,9 @@ - + [![Antigravity Awesome Skills hero](assets/aas-readme-hero.jpeg)](https://github.com/sickn33/antigravity-awesome-skills) -# 🌌 Antigravity Awesome Skills: 1,898+ Agentic Skills for Claude Code, Gemini CLI, Cursor, Autohand Code, Copilot & More +# 🌌 Antigravity Awesome Skills: 1,901+ Agentic Skills for Claude Code, Gemini CLI, Cursor, Autohand Code, Copilot & More -> **Installable GitHub library of 1,898+ agentic skills for Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and other AI coding assistants.** +> **Installable GitHub library of 1,901+ agentic skills for Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, and other AI coding assistants.** Antigravity Awesome Skills is an installable GitHub library and npm installer for reusable `SKILL.md` playbooks. It is designed for Claude Code, Cursor, Codex CLI, Autohand Code, Gemini CLI, Antigravity, Kiro, OpenCode, GitHub Copilot, and other AI coding assistants that benefit from structured operating instructions. Instead of collecting one-off prompt snippets, this repository gives you a searchable, installable catalog of skills, bundles, workflows, plugin-safe distributions, and practical docs that help agents perform recurring tasks with better context, stronger constraints, and clearer outputs. @@ -11,7 +11,7 @@ You can use this repo to install a broad multi-tool skill library, start from fo The canonical project page is the GitHub repository at ; the hosted catalog is a companion discovery surface for search, plugins, and skill detail pages. -**Start here:** [Install in 1 minute](#installation) · [Recommended plugins](#recommended-specialized-plugins) · [Compare plugin packs](https://sickn33.github.io/antigravity-awesome-skills/plugins) · [Choose your tool](#choose-your-tool) · [📚 Browse 1,898+ Skills](#browse-1898-skills) · [Bundles & workflows](#bundles--workflows) · [Support the project](#support-the-project) +**Start here:** [Install in 1 minute](#installation) · [Recommended plugins](#recommended-specialized-plugins) · [Compare plugin packs](https://sickn33.github.io/antigravity-awesome-skills/plugins) · [Choose your tool](#choose-your-tool) · [📚 Browse 1,901+ Skills](#browse-1901-skills) · [Bundles & workflows](#bundles--workflows) · [Support the project](#support-the-project) [![GitHub stars](https://img.shields.io/badge/⭐%2042%2C000%2B%20Stars-gold?style=for-the-badge)](https://github.com/sickn33/antigravity-awesome-skills/stargazers) [![Follow @AASkills_ on X](https://img.shields.io/badge/Follow-%40AASkills__-black?style=for-the-badge&logo=x)](https://x.com/AASkills_) @@ -34,7 +34,7 @@ The canonical project page is the GitHub repository at - Star History Chart + Star History Chart - - - Star History Chart + + + Star History Chart diff --git a/antigravity-awesome-skills/SOURCE.md b/antigravity-awesome-skills/SOURCE.md index 1dea1393..50126d31 100644 --- a/antigravity-awesome-skills/SOURCE.md +++ b/antigravity-awesome-skills/SOURCE.md @@ -1,8 +1,8 @@ # Source - Repo: https://github.com/sickn33/antigravity-awesome-skills -- Ref: 7595cdf403884c25112f8b06450b5f846244a845 +- Ref: b3a807ccc27515e94e57fb99922c8d6b3196c113 - Remove-Paths: -- Snapshot: 2026-07-04 +- Snapshot: 2026-07-05 - Sync-Mode: copy_skill_dirs - Notes: vendored into playbook branch thirdparty/skill diff --git a/antigravity-awesome-skills/apps/web-app/public/sitemap.xml b/antigravity-awesome-skills/apps/web-app/public/sitemap.xml index 8b7fcd62..af1eef15 100644 --- a/antigravity-awesome-skills/apps/web-app/public/sitemap.xml +++ b/antigravity-awesome-skills/apps/web-app/public/sitemap.xml @@ -2,277 +2,277 @@ https://sickn33.github.io/antigravity-awesome-skills/ - 2026-07-04 + 2026-07-05 daily 1.0 https://sickn33.github.io/antigravity-awesome-skills/plugins/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/topics/antigravity-cli-skills/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/topics/github-ai-skills-repository/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/topics/antigravity-plugins/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/topics/skills-para-antigravity/ - 2026-07-04 + 2026-07-05 + weekly + 0.7 + + + https://sickn33.github.io/antigravity-awesome-skills/skill/wgm/ + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/context-kit/ - 2026-07-04 + 2026-07-05 + weekly + 0.7 + + + https://sickn33.github.io/antigravity-awesome-skills/skill/time-ledger/ + 2026-07-05 + weekly + 0.7 + + + https://sickn33.github.io/antigravity-awesome-skills/skill/trading-ledger/ + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/workorai/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/wp-site-health-auditor/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/before-you-build/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/code-polish/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/ab-testing/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/accint-commitments/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/accint-frames/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/accint-solve/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/add-app-clip/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/agent-memory/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/alternatives-pages/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/analytics/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/anti-deception/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/api-analyzer/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/api-and-interface-design/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/api-designer/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/api-integration/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/api-onboarding/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/api-sdk-generator/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/appium-skill/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/applicationinsights-web-ts/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/automated-triage/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/aws-agentic-ai/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/aws-cdk-development/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/aws-cost-operations/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/aws-mcp-setup/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/aws-serverless-eda/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/aws-sst-development/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/azure-ai-language-conversations-py/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/azure-servicebus-rust/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/azure-storage-queue-rust/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/baseline-ui/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-audit/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-debt/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-harness/ - 2026-07-04 + 2026-07-05 weekly 0.7 https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-review/ - 2026-07-04 - weekly - 0.7 - - - https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-sweep/ - 2026-07-04 - weekly - 0.7 - - - https://sickn33.github.io/antigravity-awesome-skills/skill/brooks-test/ - 2026-07-04 - weekly - 0.7 - - - https://sickn33.github.io/antigravity-awesome-skills/skill/bug-hunt-swarm/ - 2026-07-04 + 2026-07-05 weekly 0.7 diff --git a/antigravity-awesome-skills/apps/web-app/public/skills.json.backup b/antigravity-awesome-skills/apps/web-app/public/skills.json.backup index c1eaf8f3..8475e7ab 100644 --- a/antigravity-awesome-skills/apps/web-app/public/skills.json.backup +++ b/antigravity-awesome-skills/apps/web-app/public/skills.json.backup @@ -37773,6 +37773,28 @@ "reasons": [] } }, + { + "id": "time-ledger", + "path": "skills/time-ledger", + "category": "productivity", + "name": "time-ledger", + "description": "Natural-language time tracking: parse what the user says they did into Activity/Minutes/Date rows in their own Notion database \u2014 asking instead of guessing when unsure.", + "risk": "critical", + "source": "community", + "date_added": "2026-07-04", + "plugin": { + "targets": { + "codex": "supported", + "claude": "supported" + }, + "setup": { + "type": "none", + "summary": "", + "docs": null + }, + "reasons": [] + } + }, { "id": "tmux", "path": "skills/tmux", @@ -37995,6 +38017,28 @@ "reasons": [] } }, + { + "id": "trading-ledger", + "path": "skills/trading-ledger", + "category": "productivity", + "name": "trading-ledger", + "description": "A trading journal that captures the decision, not just the fill: thesis, plan, and emotion at the moment of entry, written to the user's own Notion database; reviews grade decisions, not P&L.", + "risk": "critical", + "source": "community", + "date_added": "2026-07-04", + "plugin": { + "targets": { + "codex": "supported", + "claude": "supported" + }, + "setup": { + "type": "none", + "summary": "", + "docs": null + }, + "reasons": [] + } + }, { "id": "train-sentence-transformers", "path": "skills/train-sentence-transformers", @@ -40575,6 +40619,28 @@ "reasons": [] } }, + { + "id": "wgm", + "path": "skills/wgm", + "category": "meta", + "name": "wgm", + "description": "Turns a rough request into working software via a governed build loop: align first, plan, then iterate one task at a time with deterministic backpressure and holdout-scenario judging.", + "risk": "safe", + "source": "community", + "date_added": "2026-07-05", + "plugin": { + "targets": { + "codex": "supported", + "claude": "supported" + }, + "setup": { + "type": "none", + "summary": "", + "docs": null + }, + "reasons": [] + } + }, { "id": "whatsapp-automation", "path": "skills/whatsapp-automation", diff --git a/antigravity-awesome-skills/assets/star-history.png b/antigravity-awesome-skills/assets/star-history.png index 1946132badcdf338863db75a30dc1842ef3c38d8..daa8ec01dde792c68e484ee101a2e9b2b72dcbc0 100644 GIT binary patch literal 50777 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 S`86K!(s^R=xJKPJ_WuBcd+DzL literal 50932 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 Installable GitHub library of 1,898+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and other AI coding assistants. +> Installable GitHub library of 1,901+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and other AI coding assistants. Key framing: @@ -20,7 +20,7 @@ Key framing: Preferred description: -> Installable GitHub library of 1,898+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections. +> Installable GitHub library of 1,901+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections. Preferred homepage: @@ -28,7 +28,7 @@ Preferred homepage: Preferred social preview: -- use a clean preview image that says `1,898+ Agentic Skills`; +- use a clean preview image that says `1,901+ Agentic Skills`; - mention Claude Code, Cursor, Codex CLI, and Gemini CLI; - avoid dense text and tiny logos that disappear in social cards. diff --git a/antigravity-awesome-skills/docs/maintainers/skills-update-guide.md b/antigravity-awesome-skills/docs/maintainers/skills-update-guide.md index 500fa631..4e1490c3 100644 --- a/antigravity-awesome-skills/docs/maintainers/skills-update-guide.md +++ b/antigravity-awesome-skills/docs/maintainers/skills-update-guide.md @@ -72,7 +72,7 @@ The update process refreshes: - Canonical skills index (`skills_index.json`) - Compatibility mirror (`data/skills_index.json`) - Web app skills data (`apps\web-app\public\skills.json`) -- All 1,898+ skills from the skills directory +- All 1,901+ skills from the skills directory ## When to Update diff --git a/antigravity-awesome-skills/docs/users/bundles.md b/antigravity-awesome-skills/docs/users/bundles.md index 7d336161..86733711 100644 --- a/antigravity-awesome-skills/docs/users/bundles.md +++ b/antigravity-awesome-skills/docs/users/bundles.md @@ -1061,4 +1061,4 @@ Found a skill that should be in a bundle? Or want to create a new bundle? [Open --- -_Last updated: June 2026 | Total Skills: 1,898+ | Total Bundles: 59_ +_Last updated: June 2026 | Total Skills: 1,901+ | Total Bundles: 59_ diff --git a/antigravity-awesome-skills/docs/users/claude-code-skills.md b/antigravity-awesome-skills/docs/users/claude-code-skills.md index fd076eec..6a4bad2c 100644 --- a/antigravity-awesome-skills/docs/users/claude-code-skills.md +++ b/antigravity-awesome-skills/docs/users/claude-code-skills.md @@ -12,7 +12,7 @@ Install the library into Claude Code, then invoke focused skills directly in the ## Why use this repo for Claude Code -- It includes 1,898+ skills instead of a narrow single-domain starter pack. +- It includes 1,901+ skills instead of a narrow single-domain starter pack. - It supports the standard `.claude/skills/` path and the Claude Code plugin marketplace flow. - It also ships generated bundle plugins so teams can install focused packs like `Essentials` or `Security Developer` from the marketplace metadata. - It includes onboarding docs, bundles, and workflows so new users do not need to guess where to begin. diff --git a/antigravity-awesome-skills/docs/users/gemini-cli-skills.md b/antigravity-awesome-skills/docs/users/gemini-cli-skills.md index 6e0ce0d8..a59f7f62 100644 --- a/antigravity-awesome-skills/docs/users/gemini-cli-skills.md +++ b/antigravity-awesome-skills/docs/users/gemini-cli-skills.md @@ -12,7 +12,7 @@ Install into the Gemini skills path, then ask Gemini to apply one skill at a tim - It installs directly into the expected Gemini skills path. - It includes both core software engineering skills and deeper agent/LLM-oriented skills. -- It helps new users get started with bundles and workflows rather than forcing a cold start from 1,898+ files. +- It helps new users get started with bundles and workflows rather than forcing a cold start from 1,901+ files. - It is useful whether you want a broad internal skill library or a single repo to test many workflows quickly. ## Install Gemini CLI Skills diff --git a/antigravity-awesome-skills/docs/users/kiro-integration.md b/antigravity-awesome-skills/docs/users/kiro-integration.md index 27c2da2d..4add562c 100644 --- a/antigravity-awesome-skills/docs/users/kiro-integration.md +++ b/antigravity-awesome-skills/docs/users/kiro-integration.md @@ -18,7 +18,7 @@ Kiro is AWS's agentic AI IDE that combines: Kiro's agentic capabilities are enhanced by skills that provide: -- **Domain expertise** across 1,898+ specialized areas +- **Domain expertise** across 1,901+ specialized areas - **Best practices** from Anthropic, OpenAI, Google, Microsoft, and AWS - **Workflow automation** for common development tasks - **AWS-specific patterns** for serverless, infrastructure, and cloud architecture diff --git a/antigravity-awesome-skills/docs/users/usage.md b/antigravity-awesome-skills/docs/users/usage.md index a69baed6..683b6356 100644 --- a/antigravity-awesome-skills/docs/users/usage.md +++ b/antigravity-awesome-skills/docs/users/usage.md @@ -14,7 +14,7 @@ If you came in through a **Claude Code** or **Codex** plugin instead of a full l When you ran `npx antigravity-awesome-skills` or cloned the repository, you: -✅ **Downloaded 1,898+ skill files** to your computer (default: `~/.agents/skills/`; or a custom path like `~/.agent/skills/` if you used `--path`) +✅ **Downloaded 1,901+ skill files** to your computer (default: `~/.agents/skills/`; or a custom path like `~/.agent/skills/` if you used `--path`) ✅ **Made them available** to your AI assistant ❌ **Did NOT enable them all automatically** (they're just sitting there, waiting) @@ -34,7 +34,7 @@ Bundles are **curated groups** of skills organized by role. They help you decide **Analogy:** -- You installed a toolbox with 1,898+ tools (✅ done) +- You installed a toolbox with 1,901+ tools (✅ done) - Bundles are like **labeled organizer trays** saying: "If you're a carpenter, start with these 10 tools" - You can either **pick skills from the tray** or install that tray as a focused marketplace bundle plugin @@ -212,7 +212,7 @@ Let's actually use a skill right now. Follow these steps: ## Step 5: Picking Your First Skills (Practical Advice) -Don't try to use all 1,898+ skills at once. Here's a sensible approach: +Don't try to use all 1,901+ skills at once. Here's a sensible approach: If you want a tool-specific starting point before choosing skills, use: @@ -343,7 +343,7 @@ Usually no, but if your AI doesn't recognize a skill: ### "Can I load all skills into the model at once?" -No. Even though you have 1,898+ skills installed locally, you should **not** concatenate every `SKILL.md` into a single system prompt or context block. +No. Even though you have 1,901+ skills installed locally, you should **not** concatenate every `SKILL.md` into a single system prompt or context block. The intended pattern is: diff --git a/antigravity-awesome-skills/docs/users/visual-guide.md b/antigravity-awesome-skills/docs/users/visual-guide.md index 4115b2a0..46f8026a 100644 --- a/antigravity-awesome-skills/docs/users/visual-guide.md +++ b/antigravity-awesome-skills/docs/users/visual-guide.md @@ -34,7 +34,7 @@ antigravity-awesome-skills/ ├── 📄 CONTRIBUTING.md ← Contributor workflow ├── 📄 CATALOG.md ← Full generated catalog │ -├── 📁 skills/ ← 1,898+ skills live here +├── 📁 skills/ ← 1,901+ skills live here │ │ │ ├── 📁 brainstorming/ │ │ └── 📄 SKILL.md ← Skill definition @@ -47,7 +47,7 @@ antigravity-awesome-skills/ │ │ └── 📁 2d-games/ │ │ └── 📄 SKILL.md ← Nested skills also supported │ │ -│ └── ... (1,898+ total) +│ └── ... (1,901+ total) │ ├── 📁 apps/ │ └── 📁 web-app/ ← Interactive browser @@ -100,7 +100,7 @@ antigravity-awesome-skills/ ``` ┌─────────────────────────┐ - │ 1,898+ SKILLS │ + │ 1,901+ SKILLS │ └────────────┬────────────┘ │ ┌────────────────────────┼────────────────────────┐ @@ -201,7 +201,7 @@ If you want a workspace-style manual install instead, cloning into `.agent/skill │ ├── 📁 brainstorming/ │ │ ├── 📁 stripe-integration/ │ │ ├── 📁 react-best-practices/ │ -│ └── ... (1,898+ total) │ +│ └── ... (1,901+ total) │ └─────────────────────────────────────────┘ ``` diff --git a/antigravity-awesome-skills/package.json b/antigravity-awesome-skills/package.json index c93df1f6..fa026d49 100644 --- a/antigravity-awesome-skills/package.json +++ b/antigravity-awesome-skills/package.json @@ -1,7 +1,7 @@ { "name": "antigravity-awesome-skills", "version": "13.10.0", - "description": "1,898+ agentic skills for Claude Code, Gemini CLI, Cursor, Antigravity & more. Installer CLI.", + "description": "1,901+ agentic skills for Claude Code, Gemini CLI, Cursor, Antigravity & more. Installer CLI.", "license": "MIT", "scripts": { "validate": "node tools/scripts/run-python.js tools/scripts/validate_skills.py", diff --git a/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/.claude-plugin/plugin.json b/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/.claude-plugin/plugin.json index c7928114..9d8d0dce 100644 --- a/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/.claude-plugin/plugin.json +++ b/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "antigravity-awesome-skills", "version": "13.10.0", - "description": "Plugin-safe Claude Code distribution of Antigravity Awesome Skills with 1,850 supported skills.", + "description": "Plugin-safe Claude Code distribution of Antigravity Awesome Skills with 1,853 supported skills.", "author": { "name": "sickn33 and contributors", "url": "https://github.com/sickn33/antigravity-awesome-skills" diff --git a/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/time-ledger/SKILL.md b/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/time-ledger/SKILL.md new file mode 100644 index 00000000..d1e89094 --- /dev/null +++ b/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/time-ledger/SKILL.md @@ -0,0 +1,118 @@ +--- +name: time-ledger +description: "Natural-language time tracking: parse what the user says they did into Activity/Minutes/Date rows in their own Notion database — asking instead of guessing when unsure." +category: productivity +risk: critical +source: community +source_repo: cruisekkk/time-ledger +source_type: community +date_added: "2026-07-04" +author: cruisekkk +tags: [time-tracking, notion, quantified-self, productivity, journaling] +tools: [claude] +license: "MIT" +license_source: "https://github.com/cruisekkk/time-ledger/blob/main/LICENSE" +--- + +# Time Ledger + +## Overview + +Conversational time tracking. The user reports time in plain language — *"read papers 2h, gym 1h, did a leetcode"* — and the agent parses it into structured rows (activity, minutes, date, an optional compounding tag) and writes them to the user's own Notion database through the official Notion connector. The core design is an honesty contract: **anything uncertain becomes a `To-confirm` row and gets batch-asked — never fabricated.** A log that quietly invents durations is worse than no log. + +## When to Use This Skill + +- Use when the user reports time spent ("read papers for two hours", "hit the gym for an hour", "coded all morning") +- Use when the user says "log it", "log my time", "time ledger", or "tidy up my time ledger" +- Use when the user asks where their time went or for a time review + +## How It Works + +### Step 1: Find the database (zero-config) + +On the first write of a session, use Notion `search` to find the **database** (type `database`, not a page) whose title contains **"time-ledger"**. Read its `data_source_id` (the `collection://...` UUID) and use it as the parent for `create-pages` / `query` for the rest of the session. If more than one matches, ask the user which to use. Nothing is pasted or configured. + +The companion Notion template (free, linked in the source repo) ships this field schema — select values are a controlled enum, copy them exactly: + +- `Entry` (title) — the user's words or a clear title +- `Activity` (select): Reading / Coding / Practice / Fitness / Investing / Meeting / Writing / Life / Other +- `Minutes` (number) +- `Date` (date) — expand to `"date:Date:start": "YYYY-MM-DD"`; a bare `Date` value fails with HTTP 400 +- `Status` (select): To-sort / To-confirm / Done +- `Compounding` (select): Compounding / Consuming / Neutral +- `Notes` (text) — clue from the user's words / your question + +### Step 2: Direct report mode + +Parse the report → `create-pages` (parent = the data source id above). Set `Status=Done` for what is certain; for anything uncertain set `Status=To-confirm`, write the specific question in `Notes`, and ask it once in your reply. + +Parsing rules: + +- **Activity**: books/technical material → Reading; coding/building → Coding; leetcode → Practice; gym/running → Fitness; markets/research → Investing; meetings → Meeting; docs → Writing; meals/commute/chores → Life; otherwise → Other. Unsure → To-confirm. +- **Duration cues**: "two hours"=120, "an hour"=60, "half an hour"=30, "a while"≈30 (mark To-confirm, note it is an estimate), "all morning"≈180. Use exact numbers when given. +- **Date**: "today" = the user's local date; "yesterday" = prior day; unspecified = today. Unsure which day → ask. +- **One report, multiple blocks**: "two hours on X, one hour on Y" → split into rows, but confirm whether the totals are additive (a frequent ambiguity) — default additive + one To-confirm row. +- **Compounding tag**: only tag the obvious — Compounding = leaves a reusable asset (learning, building, writing); Consuming = forget-on-sight entertainment (only if the user volunteers it); leave ambiguous blank. + +### Step 3: Batch reconcile mode + +When the user says "tidy up my time ledger": query rows where `Status` ∈ {To-sort, To-confirm} or empty → parse each → `update-page` the certain ones to `Done`; batch **all** remaining questions into one message; fill answers in when the user replies. + +## Examples + +### Example 1: Direct report + +```text +User: log it: read ML system design 2h, gym 1h, did a leetcode +Agent: Logged 3 entries ✅ + · Reading · ML system design · 120min · Compounding + · Fitness · gym · 60min + · Practice · LeetCode · ~20min ❓ To-confirm: you didn't say how long — I guessed 20min, right? +``` + +### Example 2: Batch reconcile + +```text +User: tidy up my time ledger +Agent: 3 rows need confirmation — answering in one go works: + 1. Tue "LeetCode" — how many minutes? + 2. Wed "reading" — book or papers (Reading), or course exercises (Practice)? + 3. "all afternoon on the deck" — Wed or Thu? +``` + +## Best Practices + +- ✅ Batch all questions into one message; never interrogate item by item +- ✅ Give a short receipt after logging (rows written, which are To-confirm, what the questions are) +- ✅ Copy select values from the enum exactly +- ❌ Don't fabricate a duration, category, or date when unsure — To-confirm + ask +- ❌ Don't write a bare `Date` property; use the `date:Date:start` expansion +- ❌ Don't judge the user's Consuming hours; the ledger is a mirror, not a critic + +## Limitations + +- Requires the user's own Notion workspace, the companion database (duplicate the template from the source repo), and the official Notion connector granted access to that database — connector/skill setups currently live on paid Claude tiers. +- Self-report only, by design: it does not auto-track apps or screens (an auto-tracker knows what was open, not *why* the time was spent). +- The Compounding/Consuming tags are hand rules, not a learned model. +- Select enums must match the template; if the user renames fields, the instructions above must be mirrored to match. + +## Security & Safety Notes + +- **Mutation scope**: writes and updates rows only in the single user-granted Notion database, via the official Notion connector (MCP) — no shell commands, no network fetches, no credentials handled by the skill. +- On claude.ai, Notion's write tools default to *needs approval* — the first write pops an approval prompt; this is expected, not a hang. +- The honesty contract is also a safety property: when parsing confidence is low, the skill records `To-confirm` and asks, rather than writing invented data into the user's records. + +## Common Pitfalls + +- **Problem:** Notion API returns 400 on the date field. + **Solution:** Expand to `"date:Date:start": "YYYY-MM-DD"` — a bare `Date` value fails. +- **Problem:** `create-pages` succeeds but the Date column is empty (known Notion MCP issue: [notion-mcp-server#121](https://github.com/makenotion/notion-mcp-server/issues/121) — expanded date fields silently dropped). + **Solution:** After the session's first create, read the row back; if `Date` is empty, fill it with `update-page`. +- **Problem:** Search returns example-row pages instead of the database. + **Solution:** Filter for type `database` when resolving "time-ledger". +- **Problem:** Model clock vs user timezone differ around midnight. + **Solution:** Treat "today" as the user's local date; ask when it could go either way. + +## Related Skills + +- `@trading-ledger` - The same "parse plain language → own Notion DB → ask instead of guessing" pattern applied to trading journals (entry thesis, plan, emotion). diff --git a/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/trading-ledger/SKILL.md b/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/trading-ledger/SKILL.md new file mode 100644 index 00000000..94548cbf --- /dev/null +++ b/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/trading-ledger/SKILL.md @@ -0,0 +1,121 @@ +--- +name: trading-ledger +description: "A trading journal that captures the decision, not just the fill: thesis, plan, and emotion at the moment of entry, written to the user's own Notion database; reviews grade decisions, not P&L." +category: productivity +risk: critical +source: community +source_repo: cruisekkk/trading-ledger +source_type: community +date_added: "2026-07-04" +author: cruisekkk +tags: [trading-journal, notion, journaling, market-wizards, decision-making] +tools: [claude] +license: "MIT" +license_source: "https://github.com/cruisekkk/trading-ledger/blob/main/LICENSE" +--- + +# Trading Ledger + +## Overview + +A journaling skill in the tradition of the *Market Wizards* interviews: a written record of every trade's decision process, reviewed on a schedule. The user reports a trade in plain language — *"bought 500 NVDA at 135, stop at 128, betting the post-earnings dip fills"* — and the agent writes ticker, size, and price to the user's own Notion database **plus the part every spreadsheet journal loses: the thesis, the plan, and the emotion.** If no reason is stated, it asks on the spot, because entry reasons decay overnight. Reviews grade decision quality against the user's own plan — a per-plan loss scores better than a lucky win. Core contract: never fabricate when unsure; mark `To-confirm` and batch-ask. + +## When to Use This Skill + +- Use when the user reports a trade fill ("bought 500 NVDA at 135", "closed my TSLA position", "opened 2 ES contracts short") +- Use when the user says "log a trade" or "trading ledger", or "tidy up my trading ledger" +- Use when the user asks to "review my trades" + +## How It Works + +### Step 1: Find the database (zero-config) + +On the first write of a session, use Notion `search` to find the **database** (type `database`, not a page) whose title contains **"trading-ledger"**. Read its `data_source_id` (`collection://...` UUID) and use it as the parent for `create-pages` / `query` for the session. More than one match → ask which. + +The companion Notion template (free, linked in the source repo) ships this schema — select values are a controlled enum, copy them exactly: + +- `Entry` (title); `Ticker` (text — strikes/expiries here: NVDA / NVDA 0620C150 / ESU6) +- `Market` (select): US Stocks / US Options / US Futures / A-Shares / HK Stocks / CN Futures / Crypto / Other +- `Direction` (select): Long / Short · `Size` (text, with units) +- `Entry Price` / `Exit Price` (number) · `Entry Date` / `Exit Date` (date — expand to `"date:Entry Date:start": "YYYY-MM-DD"`; a bare value fails with HTTP 400) +- `Thesis` (text) — **the soul of the journal; if missing, ask on the spot** +- `Plan` (text) — stop / target / contingency; ask if missing +- `Emotion` (select): Calm / FOMO / Panic / Revenge / Boredom / Overconfidence — tag only what the user admits or what is plain in their words; don't diagnose +- `Execution` (select): Per plan / Early exit / Delayed stop / Impulse / Unplanned add — filled at close +- `P&L` (number, realized) · `Status` (select): Open / Closed / To-confirm / Reviewed · `Review` (text) · `Notes` (text) + +### Step 2: Opening a trade + +Parse → create a row with `Status=Open`. A missing thesis is the one field worth interrupting for — ask immediately. Anything else uncertain: record what you have, put the question in `Notes`, mark `To-confirm`. + +### Step 3: Closing or adjusting + +Find that ticker's `Status=Open` row → fill Exit Price / Exit Date / P&L / Execution → set `Closed`. Grade `Execution` against the user's own `Plan`: stopped where planned = Per plan; ran before the target = Early exit; held through the stop = Delayed stop. No matching open row → create one marked `To-confirm` and ask whether the entry was never logged. + +### Step 4: Batch reconcile and review + +- "tidy up my trading ledger" → query `Status=To-confirm` rows → collect **all** open questions into one message. +- "review my trades" → query recent `Closed` + all `Open` rows. For each closed trade, three questions: **Did the thesis play out?** (wrong thesis + profit = luck — say so). **How was the execution?** (a per-plan loss is a good trade). **What share of trades were emotion-tagged?** Write conclusions into `Review`, move `Closed` → `Reviewed`, and for every open position ask: *does the entry thesis still hold today?* + +Parsing rules: infer `Market` from symbol and context (ambiguous → ask); bought put = Short exposure + note it is a long put; record only given prices/sizes — **never look up market prices to fill gaps**; "today" = the user's local trading date — confirm before writing. + +## Examples + +### Example 1: Opening with a missing plan + +```text +User: picked up some TSM July calls this morning, same thesis as before earnings +Agent: Logged ✅ TSM July calls · Long · Open + ❓ To-confirm: which strike/expiry, how many contracts, at what price? + ❓ And the plan — holding through earnings, or is there a stop? +User: 0731 475C, 1 contract at 18.50, holding to earnings +Agent: Updated ✅ Ticker: TSM 0731C475 · Thesis: pre-earnings run-up · Plan: hold through earnings +``` + +### Example 2: Review day + +```text +User: review my trades +Agent: 3 closed since last review: + · NVDA long — thesis played out, exited per plan. Good trade. + · TSLA short — thesis wrong, but stopped exactly where planned. Good trade, bad outcome. + · SPY calls — profitable, but Entry was tagged FOMO and there was no plan. Lucky, not good. + Open positions: TSM call — earnings run-up thesis still holds until the 7/29 print. +``` + +## Best Practices + +- ✅ Ask for the thesis at entry time — it decays overnight and memory flatters +- ✅ Grade execution against the user's own plan, never against hindsight +- ✅ Batch all questions into one message; give a short receipt after logging +- ❌ Don't compute P&L you are unsure of — options and futures have multipliers; use the user's numbers +- ❌ Don't invent select values; copy the enum +- ❌ A review is not a P&L total — it grades thesis and execution + +## Limitations + +- Requires the user's own Notion workspace, the companion database (duplicate the template from the source repo), and the official Notion connector granted access — connector/skill setups currently live on paid Claude tiers. +- Close, reconcile, and review flows require reliable Notion database query/search access to open, closed, and `To-confirm` rows. If the connector cannot query the ledger, stop after logging the user's new facts and ask them to provide the relevant row details instead of guessing matches. +- No broker integration, by design: the broker knows the fills; only the user knows the reasons. The user must self-report. +- Grading honesty depends on input honesty: a thesis backfilled three days later defeats the point (the skill nags, but cannot prevent it). + +## Security & Safety Notes + +- **Mutation scope**: writes and updates rows only in the single user-granted Notion database via the official Notion connector (MCP) — no shell commands, no network fetches, no market-data lookups, no credentials. +- **This skill must never produce trading signals, price data, or buy/sell recommendations.** It records and mirrors the user's own decisions; the review asks questions, it does not advise. Nothing it writes is financial advice, and it should say so if asked for a recommendation. +- On claude.ai, Notion's write tools default to *needs approval* — the first write pops an approval prompt; expected, not a hang. + +## Common Pitfalls + +- **Problem:** Notion API 400 on date fields. + **Solution:** Expand to `"date:Entry Date:start": "YYYY-MM-DD"`. +- **Problem:** `create-pages` succeeds but the date column is empty (known Notion MCP issue: [notion-mcp-server#121](https://github.com/makenotion/notion-mcp-server/issues/121) — expanded date fields silently dropped). + **Solution:** After the session's first create, read the row back; if the date is empty, fill it with `update-page`. +- **Problem:** Close matched to the wrong row when the same ticker was traded twice. + **Solution:** Match on `Status=Open` + ticker; if multiple open rows match, ask which one. +- **Problem:** Overnight US fills dated to the wrong day for non-US users. + **Solution:** Overnight fills belong to the US trading date; confirm the date before writing. + +## Related Skills + +- `@time-ledger` - The same "parse plain language → own Notion DB → ask instead of guessing" pattern applied to time tracking. diff --git a/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/wgm/SKILL.md b/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/wgm/SKILL.md new file mode 100644 index 00000000..d46dfe8e --- /dev/null +++ b/antigravity-awesome-skills/plugins/antigravity-awesome-skills-claude/skills/wgm/SKILL.md @@ -0,0 +1,137 @@ +--- +name: wgm +description: "Turns a rough request into working software via a governed build loop: align first, plan, then iterate one task at a time with deterministic backpressure and holdout-scenario judging." +category: meta +risk: safe +source: community +source_repo: agent-frontier/wgm +source_type: official +date_added: "2026-07-05" +author: agent-frontier +tags: [build-loop, spec-driven, ralph-loop, self-improving, agentic-development, methodology] +tools: [claude, cursor, gemini, copilot, codex] +license: "MIT" +license_source: "https://github.com/agent-frontier/wgm/blob/main/LICENSE" +--- + +# wgm + +## Overview + +wgm ("well, gosh... make") is a portable build **methodology**, not a domain skill — a single +`SKILL.md` protocol that any agentskills.io-compatible host loads to turn a rough request into +working software. It marries three ideas: a relentless alignment interview before any code is +written, a Ralph-style loop (one task per iteration, a persistent plan as shared state, steered by +deterministic backpressure), and holdout-scenario LLM judging (scenarios the build never sees, so a +high satisfaction score can't be gamed). It also runs its own internal docs-audit and +self-improvement loop, cross-pollinating durable lessons from sibling agent-coding projects back +into its own protocol. + +## When to Use This Skill + +- Use when building or implementing a feature, app, or prototype from rough or ambiguous intent. +- Use when a task benefits from a governed plan plus iterative, test-validated execution rather + than one-shot generation. +- Use when you want a build to converge against acceptance criteria an LLM judge scores blind + (0-100), instead of trusting a single self-reported "looks good." +- Not for trivial one-file edits, pure debugging, research-only questions, or tasks that already + have complete, unambiguous step-by-step instructions — wgm explicitly stays out of the way there. + +## How It Works + +### Step 1: Triage +Classify the work onto a scale-adaptive track (Quick / Standard / Full) so ceremony matches risk — +a one-file fix skips holdout scenarios and the docs-audit swarm; a greenfield app gets the full rig. +The deterministic backpressure gate itself is never skipped, only the ceremony around it. + +### Step 2: Grill (align) +Interview the user one question at a time, always with a recommended answer, until the goal, +success criteria, and constraints are known — capping interrogation after ~5 questions to avoid +theater. Explore the codebase to self-answer before asking anything a human doesn't need to weigh +in on. + +### Step 3: Plan +Produce a project constitution, one spec per coherent slice (each with a magic moment and a demo +path), holdout acceptance scenarios the build must never read, and `IMPLEMENTATION_PLAN.md` — the +persistent shared state across every later iteration. Cross-check every artifact against every other +one before moving on. + +### Step 4: Preflight +Score the plan's readiness 0-100 across goal clarity, observable success criteria, scenario +coverage, and backpressure mapping. Below the threshold, return to Grill/Plan and fix the weakest +dimension — do not start building on a shaky plan. + +### Step 5: Loop (build) +Run `Analyze -> Implement -> Validate -> Review -> Record`, one task per iteration: pick the single +most important pending task, make the smallest change that completes it, run its deterministic +validation command (green or it isn't done), judge holdout-scenario satisfaction, review the diff +for scope creep, then record status and any durable lesson before advancing exactly one task. + +### Step 6: Ship / Handoff +Summarize what shipped and how to validate it, run a mandatory four-persona docs-audit pass +(junior/senior/principal/PM perspectives, consolidated into one paper-trail report), and harvest any +durable, cross-project lesson back into the shared skill's own ledger. + +## Examples + +### Example 1: Full lifecycle from a rough request + +``` +User: "Build a CLI todo app with add/list/complete commands, from scratch." +``` + +wgm states its Track (Standard), grills for the ~3-5 unknowns that actually matter, writes specs + +`IMPLEMENTATION_PLAN.md`, scores Preflight readiness, then loops one task at a time — each task's +own test/lint/build command must exit 0 before it's marked done — and finally ships with a +docs-audit pass. + +### Example 2: Scoped planning only + +``` +User: "/wgm plan: add OAuth login to this existing Express API" +``` + +wgm writes the specs and plan, then hard-stops at the Plan-exit gate without starting the build loop +— useful when a human wants to review the plan before any code is touched. + +## Best Practices + +- Do let the plan be the shared state — a fresh agent should be able to resume a build from + `IMPLEMENTATION_PLAN.md` alone. +- Do keep holdout scenarios genuinely hidden from the generating agent; that's what prevents a + judged score from being gamed. +- Do map every acceptance criterion to a runnable, deterministic check before calling anything done. +- Don't skip the alignment interview on ambiguous, multi-week, or security/UX-critical work just to + move faster — misalignment discovered after building is far more expensive. +- Don't treat a high satisfaction score as sufficient on its own — a failing deterministic check + always overrides it. + +## Limitations + +- wgm is a protocol, not a runtime: it has no daemon, scheduler, or bundled dashboard — it expects + an existing agentskills.io-compatible host to load and execute it. +- This skill does not replace environment-specific validation, testing, or expert review. +- Full holdout-scenario judging and the docs-audit swarm add ceremony that a genuinely trivial task + does not need — wgm's own Triage track exists specifically to right-size this, and the skill + explicitly says not to use it for one-file edits or pure debugging. + +## Common Pitfalls + +- **Problem:** Treating wgm's "build" mode the same as a full-lifecycle request. + **Solution:** `/wgm build` resumes an *existing* `IMPLEMENTATION_PLAN.md`; a bare request like + "build the auth module" (more text after "build") is a full-lifecycle request, not `build` mode. +- **Problem:** Letting the agent peek at holdout scenarios while implementing. + **Solution:** Scenarios are read only during Validate/Review, never during Implement — that's the + entire point of a holdout set. + +## Related Skills + +- `@grill-me` - the narrower alignment-interview primitive wgm's Grill phase is adapted from. +- `@skill-creator` - useful for authoring/evaluating the skill itself; wgm ships its own eval + fixture (`evals/evals.json`) using the same eval-driven-iteration discipline. + +## Additional Resources + +- [Repository](https://github.com/agent-frontier/wgm) +- [Full protocol (`SKILL.md`)](https://github.com/agent-frontier/wgm/blob/main/SKILL.md) +- [Reference library](https://github.com/agent-frontier/wgm/tree/main/references) diff --git a/antigravity-awesome-skills/plugins/antigravity-awesome-skills/.codex-plugin/plugin.json b/antigravity-awesome-skills/plugins/antigravity-awesome-skills/.codex-plugin/plugin.json index 4a4e1a5e..575d4efe 100644 --- a/antigravity-awesome-skills/plugins/antigravity-awesome-skills/.codex-plugin/plugin.json +++ b/antigravity-awesome-skills/plugins/antigravity-awesome-skills/.codex-plugin/plugin.json @@ -19,7 +19,7 @@ "skills": "./skills/", "interface": { "displayName": "Antigravity Awesome Skills", - "shortDescription": "1,830 plugin-safe skills for coding, security, product, and ops workflows.", + "shortDescription": "1,833 plugin-safe skills for coding, security, product, and ops workflows.", "longDescription": "Install a plugin-safe Codex distribution of Antigravity Awesome Skills. Skills that still need hardening or target-specific setup remain available in the repo but are excluded from this plugin.", "developerName": "sickn33 and contributors", "category": "Productivity", diff --git a/antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/time-ledger/SKILL.md b/antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/time-ledger/SKILL.md new file mode 100644 index 00000000..d1e89094 --- /dev/null +++ b/antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/time-ledger/SKILL.md @@ -0,0 +1,118 @@ +--- +name: time-ledger +description: "Natural-language time tracking: parse what the user says they did into Activity/Minutes/Date rows in their own Notion database — asking instead of guessing when unsure." +category: productivity +risk: critical +source: community +source_repo: cruisekkk/time-ledger +source_type: community +date_added: "2026-07-04" +author: cruisekkk +tags: [time-tracking, notion, quantified-self, productivity, journaling] +tools: [claude] +license: "MIT" +license_source: "https://github.com/cruisekkk/time-ledger/blob/main/LICENSE" +--- + +# Time Ledger + +## Overview + +Conversational time tracking. The user reports time in plain language — *"read papers 2h, gym 1h, did a leetcode"* — and the agent parses it into structured rows (activity, minutes, date, an optional compounding tag) and writes them to the user's own Notion database through the official Notion connector. The core design is an honesty contract: **anything uncertain becomes a `To-confirm` row and gets batch-asked — never fabricated.** A log that quietly invents durations is worse than no log. + +## When to Use This Skill + +- Use when the user reports time spent ("read papers for two hours", "hit the gym for an hour", "coded all morning") +- Use when the user says "log it", "log my time", "time ledger", or "tidy up my time ledger" +- Use when the user asks where their time went or for a time review + +## How It Works + +### Step 1: Find the database (zero-config) + +On the first write of a session, use Notion `search` to find the **database** (type `database`, not a page) whose title contains **"time-ledger"**. Read its `data_source_id` (the `collection://...` UUID) and use it as the parent for `create-pages` / `query` for the rest of the session. If more than one matches, ask the user which to use. Nothing is pasted or configured. + +The companion Notion template (free, linked in the source repo) ships this field schema — select values are a controlled enum, copy them exactly: + +- `Entry` (title) — the user's words or a clear title +- `Activity` (select): Reading / Coding / Practice / Fitness / Investing / Meeting / Writing / Life / Other +- `Minutes` (number) +- `Date` (date) — expand to `"date:Date:start": "YYYY-MM-DD"`; a bare `Date` value fails with HTTP 400 +- `Status` (select): To-sort / To-confirm / Done +- `Compounding` (select): Compounding / Consuming / Neutral +- `Notes` (text) — clue from the user's words / your question + +### Step 2: Direct report mode + +Parse the report → `create-pages` (parent = the data source id above). Set `Status=Done` for what is certain; for anything uncertain set `Status=To-confirm`, write the specific question in `Notes`, and ask it once in your reply. + +Parsing rules: + +- **Activity**: books/technical material → Reading; coding/building → Coding; leetcode → Practice; gym/running → Fitness; markets/research → Investing; meetings → Meeting; docs → Writing; meals/commute/chores → Life; otherwise → Other. Unsure → To-confirm. +- **Duration cues**: "two hours"=120, "an hour"=60, "half an hour"=30, "a while"≈30 (mark To-confirm, note it is an estimate), "all morning"≈180. Use exact numbers when given. +- **Date**: "today" = the user's local date; "yesterday" = prior day; unspecified = today. Unsure which day → ask. +- **One report, multiple blocks**: "two hours on X, one hour on Y" → split into rows, but confirm whether the totals are additive (a frequent ambiguity) — default additive + one To-confirm row. +- **Compounding tag**: only tag the obvious — Compounding = leaves a reusable asset (learning, building, writing); Consuming = forget-on-sight entertainment (only if the user volunteers it); leave ambiguous blank. + +### Step 3: Batch reconcile mode + +When the user says "tidy up my time ledger": query rows where `Status` ∈ {To-sort, To-confirm} or empty → parse each → `update-page` the certain ones to `Done`; batch **all** remaining questions into one message; fill answers in when the user replies. + +## Examples + +### Example 1: Direct report + +```text +User: log it: read ML system design 2h, gym 1h, did a leetcode +Agent: Logged 3 entries ✅ + · Reading · ML system design · 120min · Compounding + · Fitness · gym · 60min + · Practice · LeetCode · ~20min ❓ To-confirm: you didn't say how long — I guessed 20min, right? +``` + +### Example 2: Batch reconcile + +```text +User: tidy up my time ledger +Agent: 3 rows need confirmation — answering in one go works: + 1. Tue "LeetCode" — how many minutes? + 2. Wed "reading" — book or papers (Reading), or course exercises (Practice)? + 3. "all afternoon on the deck" — Wed or Thu? +``` + +## Best Practices + +- ✅ Batch all questions into one message; never interrogate item by item +- ✅ Give a short receipt after logging (rows written, which are To-confirm, what the questions are) +- ✅ Copy select values from the enum exactly +- ❌ Don't fabricate a duration, category, or date when unsure — To-confirm + ask +- ❌ Don't write a bare `Date` property; use the `date:Date:start` expansion +- ❌ Don't judge the user's Consuming hours; the ledger is a mirror, not a critic + +## Limitations + +- Requires the user's own Notion workspace, the companion database (duplicate the template from the source repo), and the official Notion connector granted access to that database — connector/skill setups currently live on paid Claude tiers. +- Self-report only, by design: it does not auto-track apps or screens (an auto-tracker knows what was open, not *why* the time was spent). +- The Compounding/Consuming tags are hand rules, not a learned model. +- Select enums must match the template; if the user renames fields, the instructions above must be mirrored to match. + +## Security & Safety Notes + +- **Mutation scope**: writes and updates rows only in the single user-granted Notion database, via the official Notion connector (MCP) — no shell commands, no network fetches, no credentials handled by the skill. +- On claude.ai, Notion's write tools default to *needs approval* — the first write pops an approval prompt; this is expected, not a hang. +- The honesty contract is also a safety property: when parsing confidence is low, the skill records `To-confirm` and asks, rather than writing invented data into the user's records. + +## Common Pitfalls + +- **Problem:** Notion API returns 400 on the date field. + **Solution:** Expand to `"date:Date:start": "YYYY-MM-DD"` — a bare `Date` value fails. +- **Problem:** `create-pages` succeeds but the Date column is empty (known Notion MCP issue: [notion-mcp-server#121](https://github.com/makenotion/notion-mcp-server/issues/121) — expanded date fields silently dropped). + **Solution:** After the session's first create, read the row back; if `Date` is empty, fill it with `update-page`. +- **Problem:** Search returns example-row pages instead of the database. + **Solution:** Filter for type `database` when resolving "time-ledger". +- **Problem:** Model clock vs user timezone differ around midnight. + **Solution:** Treat "today" as the user's local date; ask when it could go either way. + +## Related Skills + +- `@trading-ledger` - The same "parse plain language → own Notion DB → ask instead of guessing" pattern applied to trading journals (entry thesis, plan, emotion). diff --git a/antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/trading-ledger/SKILL.md b/antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/trading-ledger/SKILL.md new file mode 100644 index 00000000..94548cbf --- /dev/null +++ b/antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/trading-ledger/SKILL.md @@ -0,0 +1,121 @@ +--- +name: trading-ledger +description: "A trading journal that captures the decision, not just the fill: thesis, plan, and emotion at the moment of entry, written to the user's own Notion database; reviews grade decisions, not P&L." +category: productivity +risk: critical +source: community +source_repo: cruisekkk/trading-ledger +source_type: community +date_added: "2026-07-04" +author: cruisekkk +tags: [trading-journal, notion, journaling, market-wizards, decision-making] +tools: [claude] +license: "MIT" +license_source: "https://github.com/cruisekkk/trading-ledger/blob/main/LICENSE" +--- + +# Trading Ledger + +## Overview + +A journaling skill in the tradition of the *Market Wizards* interviews: a written record of every trade's decision process, reviewed on a schedule. The user reports a trade in plain language — *"bought 500 NVDA at 135, stop at 128, betting the post-earnings dip fills"* — and the agent writes ticker, size, and price to the user's own Notion database **plus the part every spreadsheet journal loses: the thesis, the plan, and the emotion.** If no reason is stated, it asks on the spot, because entry reasons decay overnight. Reviews grade decision quality against the user's own plan — a per-plan loss scores better than a lucky win. Core contract: never fabricate when unsure; mark `To-confirm` and batch-ask. + +## When to Use This Skill + +- Use when the user reports a trade fill ("bought 500 NVDA at 135", "closed my TSLA position", "opened 2 ES contracts short") +- Use when the user says "log a trade" or "trading ledger", or "tidy up my trading ledger" +- Use when the user asks to "review my trades" + +## How It Works + +### Step 1: Find the database (zero-config) + +On the first write of a session, use Notion `search` to find the **database** (type `database`, not a page) whose title contains **"trading-ledger"**. Read its `data_source_id` (`collection://...` UUID) and use it as the parent for `create-pages` / `query` for the session. More than one match → ask which. + +The companion Notion template (free, linked in the source repo) ships this schema — select values are a controlled enum, copy them exactly: + +- `Entry` (title); `Ticker` (text — strikes/expiries here: NVDA / NVDA 0620C150 / ESU6) +- `Market` (select): US Stocks / US Options / US Futures / A-Shares / HK Stocks / CN Futures / Crypto / Other +- `Direction` (select): Long / Short · `Size` (text, with units) +- `Entry Price` / `Exit Price` (number) · `Entry Date` / `Exit Date` (date — expand to `"date:Entry Date:start": "YYYY-MM-DD"`; a bare value fails with HTTP 400) +- `Thesis` (text) — **the soul of the journal; if missing, ask on the spot** +- `Plan` (text) — stop / target / contingency; ask if missing +- `Emotion` (select): Calm / FOMO / Panic / Revenge / Boredom / Overconfidence — tag only what the user admits or what is plain in their words; don't diagnose +- `Execution` (select): Per plan / Early exit / Delayed stop / Impulse / Unplanned add — filled at close +- `P&L` (number, realized) · `Status` (select): Open / Closed / To-confirm / Reviewed · `Review` (text) · `Notes` (text) + +### Step 2: Opening a trade + +Parse → create a row with `Status=Open`. A missing thesis is the one field worth interrupting for — ask immediately. Anything else uncertain: record what you have, put the question in `Notes`, mark `To-confirm`. + +### Step 3: Closing or adjusting + +Find that ticker's `Status=Open` row → fill Exit Price / Exit Date / P&L / Execution → set `Closed`. Grade `Execution` against the user's own `Plan`: stopped where planned = Per plan; ran before the target = Early exit; held through the stop = Delayed stop. No matching open row → create one marked `To-confirm` and ask whether the entry was never logged. + +### Step 4: Batch reconcile and review + +- "tidy up my trading ledger" → query `Status=To-confirm` rows → collect **all** open questions into one message. +- "review my trades" → query recent `Closed` + all `Open` rows. For each closed trade, three questions: **Did the thesis play out?** (wrong thesis + profit = luck — say so). **How was the execution?** (a per-plan loss is a good trade). **What share of trades were emotion-tagged?** Write conclusions into `Review`, move `Closed` → `Reviewed`, and for every open position ask: *does the entry thesis still hold today?* + +Parsing rules: infer `Market` from symbol and context (ambiguous → ask); bought put = Short exposure + note it is a long put; record only given prices/sizes — **never look up market prices to fill gaps**; "today" = the user's local trading date — confirm before writing. + +## Examples + +### Example 1: Opening with a missing plan + +```text +User: picked up some TSM July calls this morning, same thesis as before earnings +Agent: Logged ✅ TSM July calls · Long · Open + ❓ To-confirm: which strike/expiry, how many contracts, at what price? + ❓ And the plan — holding through earnings, or is there a stop? +User: 0731 475C, 1 contract at 18.50, holding to earnings +Agent: Updated ✅ Ticker: TSM 0731C475 · Thesis: pre-earnings run-up · Plan: hold through earnings +``` + +### Example 2: Review day + +```text +User: review my trades +Agent: 3 closed since last review: + · NVDA long — thesis played out, exited per plan. Good trade. + · TSLA short — thesis wrong, but stopped exactly where planned. Good trade, bad outcome. + · SPY calls — profitable, but Entry was tagged FOMO and there was no plan. Lucky, not good. + Open positions: TSM call — earnings run-up thesis still holds until the 7/29 print. +``` + +## Best Practices + +- ✅ Ask for the thesis at entry time — it decays overnight and memory flatters +- ✅ Grade execution against the user's own plan, never against hindsight +- ✅ Batch all questions into one message; give a short receipt after logging +- ❌ Don't compute P&L you are unsure of — options and futures have multipliers; use the user's numbers +- ❌ Don't invent select values; copy the enum +- ❌ A review is not a P&L total — it grades thesis and execution + +## Limitations + +- Requires the user's own Notion workspace, the companion database (duplicate the template from the source repo), and the official Notion connector granted access — connector/skill setups currently live on paid Claude tiers. +- Close, reconcile, and review flows require reliable Notion database query/search access to open, closed, and `To-confirm` rows. If the connector cannot query the ledger, stop after logging the user's new facts and ask them to provide the relevant row details instead of guessing matches. +- No broker integration, by design: the broker knows the fills; only the user knows the reasons. The user must self-report. +- Grading honesty depends on input honesty: a thesis backfilled three days later defeats the point (the skill nags, but cannot prevent it). + +## Security & Safety Notes + +- **Mutation scope**: writes and updates rows only in the single user-granted Notion database via the official Notion connector (MCP) — no shell commands, no network fetches, no market-data lookups, no credentials. +- **This skill must never produce trading signals, price data, or buy/sell recommendations.** It records and mirrors the user's own decisions; the review asks questions, it does not advise. Nothing it writes is financial advice, and it should say so if asked for a recommendation. +- On claude.ai, Notion's write tools default to *needs approval* — the first write pops an approval prompt; expected, not a hang. + +## Common Pitfalls + +- **Problem:** Notion API 400 on date fields. + **Solution:** Expand to `"date:Entry Date:start": "YYYY-MM-DD"`. +- **Problem:** `create-pages` succeeds but the date column is empty (known Notion MCP issue: [notion-mcp-server#121](https://github.com/makenotion/notion-mcp-server/issues/121) — expanded date fields silently dropped). + **Solution:** After the session's first create, read the row back; if the date is empty, fill it with `update-page`. +- **Problem:** Close matched to the wrong row when the same ticker was traded twice. + **Solution:** Match on `Status=Open` + ticker; if multiple open rows match, ask which one. +- **Problem:** Overnight US fills dated to the wrong day for non-US users. + **Solution:** Overnight fills belong to the US trading date; confirm the date before writing. + +## Related Skills + +- `@time-ledger` - The same "parse plain language → own Notion DB → ask instead of guessing" pattern applied to time tracking. diff --git a/antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/wgm/SKILL.md b/antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/wgm/SKILL.md new file mode 100644 index 00000000..d46dfe8e --- /dev/null +++ b/antigravity-awesome-skills/plugins/antigravity-awesome-skills/skills/wgm/SKILL.md @@ -0,0 +1,137 @@ +--- +name: wgm +description: "Turns a rough request into working software via a governed build loop: align first, plan, then iterate one task at a time with deterministic backpressure and holdout-scenario judging." +category: meta +risk: safe +source: community +source_repo: agent-frontier/wgm +source_type: official +date_added: "2026-07-05" +author: agent-frontier +tags: [build-loop, spec-driven, ralph-loop, self-improving, agentic-development, methodology] +tools: [claude, cursor, gemini, copilot, codex] +license: "MIT" +license_source: "https://github.com/agent-frontier/wgm/blob/main/LICENSE" +--- + +# wgm + +## Overview + +wgm ("well, gosh... make") is a portable build **methodology**, not a domain skill — a single +`SKILL.md` protocol that any agentskills.io-compatible host loads to turn a rough request into +working software. It marries three ideas: a relentless alignment interview before any code is +written, a Ralph-style loop (one task per iteration, a persistent plan as shared state, steered by +deterministic backpressure), and holdout-scenario LLM judging (scenarios the build never sees, so a +high satisfaction score can't be gamed). It also runs its own internal docs-audit and +self-improvement loop, cross-pollinating durable lessons from sibling agent-coding projects back +into its own protocol. + +## When to Use This Skill + +- Use when building or implementing a feature, app, or prototype from rough or ambiguous intent. +- Use when a task benefits from a governed plan plus iterative, test-validated execution rather + than one-shot generation. +- Use when you want a build to converge against acceptance criteria an LLM judge scores blind + (0-100), instead of trusting a single self-reported "looks good." +- Not for trivial one-file edits, pure debugging, research-only questions, or tasks that already + have complete, unambiguous step-by-step instructions — wgm explicitly stays out of the way there. + +## How It Works + +### Step 1: Triage +Classify the work onto a scale-adaptive track (Quick / Standard / Full) so ceremony matches risk — +a one-file fix skips holdout scenarios and the docs-audit swarm; a greenfield app gets the full rig. +The deterministic backpressure gate itself is never skipped, only the ceremony around it. + +### Step 2: Grill (align) +Interview the user one question at a time, always with a recommended answer, until the goal, +success criteria, and constraints are known — capping interrogation after ~5 questions to avoid +theater. Explore the codebase to self-answer before asking anything a human doesn't need to weigh +in on. + +### Step 3: Plan +Produce a project constitution, one spec per coherent slice (each with a magic moment and a demo +path), holdout acceptance scenarios the build must never read, and `IMPLEMENTATION_PLAN.md` — the +persistent shared state across every later iteration. Cross-check every artifact against every other +one before moving on. + +### Step 4: Preflight +Score the plan's readiness 0-100 across goal clarity, observable success criteria, scenario +coverage, and backpressure mapping. Below the threshold, return to Grill/Plan and fix the weakest +dimension — do not start building on a shaky plan. + +### Step 5: Loop (build) +Run `Analyze -> Implement -> Validate -> Review -> Record`, one task per iteration: pick the single +most important pending task, make the smallest change that completes it, run its deterministic +validation command (green or it isn't done), judge holdout-scenario satisfaction, review the diff +for scope creep, then record status and any durable lesson before advancing exactly one task. + +### Step 6: Ship / Handoff +Summarize what shipped and how to validate it, run a mandatory four-persona docs-audit pass +(junior/senior/principal/PM perspectives, consolidated into one paper-trail report), and harvest any +durable, cross-project lesson back into the shared skill's own ledger. + +## Examples + +### Example 1: Full lifecycle from a rough request + +``` +User: "Build a CLI todo app with add/list/complete commands, from scratch." +``` + +wgm states its Track (Standard), grills for the ~3-5 unknowns that actually matter, writes specs + +`IMPLEMENTATION_PLAN.md`, scores Preflight readiness, then loops one task at a time — each task's +own test/lint/build command must exit 0 before it's marked done — and finally ships with a +docs-audit pass. + +### Example 2: Scoped planning only + +``` +User: "/wgm plan: add OAuth login to this existing Express API" +``` + +wgm writes the specs and plan, then hard-stops at the Plan-exit gate without starting the build loop +— useful when a human wants to review the plan before any code is touched. + +## Best Practices + +- Do let the plan be the shared state — a fresh agent should be able to resume a build from + `IMPLEMENTATION_PLAN.md` alone. +- Do keep holdout scenarios genuinely hidden from the generating agent; that's what prevents a + judged score from being gamed. +- Do map every acceptance criterion to a runnable, deterministic check before calling anything done. +- Don't skip the alignment interview on ambiguous, multi-week, or security/UX-critical work just to + move faster — misalignment discovered after building is far more expensive. +- Don't treat a high satisfaction score as sufficient on its own — a failing deterministic check + always overrides it. + +## Limitations + +- wgm is a protocol, not a runtime: it has no daemon, scheduler, or bundled dashboard — it expects + an existing agentskills.io-compatible host to load and execute it. +- This skill does not replace environment-specific validation, testing, or expert review. +- Full holdout-scenario judging and the docs-audit swarm add ceremony that a genuinely trivial task + does not need — wgm's own Triage track exists specifically to right-size this, and the skill + explicitly says not to use it for one-file edits or pure debugging. + +## Common Pitfalls + +- **Problem:** Treating wgm's "build" mode the same as a full-lifecycle request. + **Solution:** `/wgm build` resumes an *existing* `IMPLEMENTATION_PLAN.md`; a bare request like + "build the auth module" (more text after "build") is a full-lifecycle request, not `build` mode. +- **Problem:** Letting the agent peek at holdout scenarios while implementing. + **Solution:** Scenarios are read only during Validate/Review, never during Implement — that's the + entire point of a holdout set. + +## Related Skills + +- `@grill-me` - the narrower alignment-interview primitive wgm's Grill phase is adapted from. +- `@skill-creator` - useful for authoring/evaluating the skill itself; wgm ships its own eval + fixture (`evals/evals.json`) using the same eval-driven-iteration discipline. + +## Additional Resources + +- [Repository](https://github.com/agent-frontier/wgm) +- [Full protocol (`SKILL.md`)](https://github.com/agent-frontier/wgm/blob/main/SKILL.md) +- [Reference library](https://github.com/agent-frontier/wgm/tree/main/references) diff --git a/antigravity-awesome-skills/skills/time-ledger/SKILL.md b/antigravity-awesome-skills/skills/time-ledger/SKILL.md new file mode 100644 index 00000000..d1e89094 --- /dev/null +++ b/antigravity-awesome-skills/skills/time-ledger/SKILL.md @@ -0,0 +1,118 @@ +--- +name: time-ledger +description: "Natural-language time tracking: parse what the user says they did into Activity/Minutes/Date rows in their own Notion database — asking instead of guessing when unsure." +category: productivity +risk: critical +source: community +source_repo: cruisekkk/time-ledger +source_type: community +date_added: "2026-07-04" +author: cruisekkk +tags: [time-tracking, notion, quantified-self, productivity, journaling] +tools: [claude] +license: "MIT" +license_source: "https://github.com/cruisekkk/time-ledger/blob/main/LICENSE" +--- + +# Time Ledger + +## Overview + +Conversational time tracking. The user reports time in plain language — *"read papers 2h, gym 1h, did a leetcode"* — and the agent parses it into structured rows (activity, minutes, date, an optional compounding tag) and writes them to the user's own Notion database through the official Notion connector. The core design is an honesty contract: **anything uncertain becomes a `To-confirm` row and gets batch-asked — never fabricated.** A log that quietly invents durations is worse than no log. + +## When to Use This Skill + +- Use when the user reports time spent ("read papers for two hours", "hit the gym for an hour", "coded all morning") +- Use when the user says "log it", "log my time", "time ledger", or "tidy up my time ledger" +- Use when the user asks where their time went or for a time review + +## How It Works + +### Step 1: Find the database (zero-config) + +On the first write of a session, use Notion `search` to find the **database** (type `database`, not a page) whose title contains **"time-ledger"**. Read its `data_source_id` (the `collection://...` UUID) and use it as the parent for `create-pages` / `query` for the rest of the session. If more than one matches, ask the user which to use. Nothing is pasted or configured. + +The companion Notion template (free, linked in the source repo) ships this field schema — select values are a controlled enum, copy them exactly: + +- `Entry` (title) — the user's words or a clear title +- `Activity` (select): Reading / Coding / Practice / Fitness / Investing / Meeting / Writing / Life / Other +- `Minutes` (number) +- `Date` (date) — expand to `"date:Date:start": "YYYY-MM-DD"`; a bare `Date` value fails with HTTP 400 +- `Status` (select): To-sort / To-confirm / Done +- `Compounding` (select): Compounding / Consuming / Neutral +- `Notes` (text) — clue from the user's words / your question + +### Step 2: Direct report mode + +Parse the report → `create-pages` (parent = the data source id above). Set `Status=Done` for what is certain; for anything uncertain set `Status=To-confirm`, write the specific question in `Notes`, and ask it once in your reply. + +Parsing rules: + +- **Activity**: books/technical material → Reading; coding/building → Coding; leetcode → Practice; gym/running → Fitness; markets/research → Investing; meetings → Meeting; docs → Writing; meals/commute/chores → Life; otherwise → Other. Unsure → To-confirm. +- **Duration cues**: "two hours"=120, "an hour"=60, "half an hour"=30, "a while"≈30 (mark To-confirm, note it is an estimate), "all morning"≈180. Use exact numbers when given. +- **Date**: "today" = the user's local date; "yesterday" = prior day; unspecified = today. Unsure which day → ask. +- **One report, multiple blocks**: "two hours on X, one hour on Y" → split into rows, but confirm whether the totals are additive (a frequent ambiguity) — default additive + one To-confirm row. +- **Compounding tag**: only tag the obvious — Compounding = leaves a reusable asset (learning, building, writing); Consuming = forget-on-sight entertainment (only if the user volunteers it); leave ambiguous blank. + +### Step 3: Batch reconcile mode + +When the user says "tidy up my time ledger": query rows where `Status` ∈ {To-sort, To-confirm} or empty → parse each → `update-page` the certain ones to `Done`; batch **all** remaining questions into one message; fill answers in when the user replies. + +## Examples + +### Example 1: Direct report + +```text +User: log it: read ML system design 2h, gym 1h, did a leetcode +Agent: Logged 3 entries ✅ + · Reading · ML system design · 120min · Compounding + · Fitness · gym · 60min + · Practice · LeetCode · ~20min ❓ To-confirm: you didn't say how long — I guessed 20min, right? +``` + +### Example 2: Batch reconcile + +```text +User: tidy up my time ledger +Agent: 3 rows need confirmation — answering in one go works: + 1. Tue "LeetCode" — how many minutes? + 2. Wed "reading" — book or papers (Reading), or course exercises (Practice)? + 3. "all afternoon on the deck" — Wed or Thu? +``` + +## Best Practices + +- ✅ Batch all questions into one message; never interrogate item by item +- ✅ Give a short receipt after logging (rows written, which are To-confirm, what the questions are) +- ✅ Copy select values from the enum exactly +- ❌ Don't fabricate a duration, category, or date when unsure — To-confirm + ask +- ❌ Don't write a bare `Date` property; use the `date:Date:start` expansion +- ❌ Don't judge the user's Consuming hours; the ledger is a mirror, not a critic + +## Limitations + +- Requires the user's own Notion workspace, the companion database (duplicate the template from the source repo), and the official Notion connector granted access to that database — connector/skill setups currently live on paid Claude tiers. +- Self-report only, by design: it does not auto-track apps or screens (an auto-tracker knows what was open, not *why* the time was spent). +- The Compounding/Consuming tags are hand rules, not a learned model. +- Select enums must match the template; if the user renames fields, the instructions above must be mirrored to match. + +## Security & Safety Notes + +- **Mutation scope**: writes and updates rows only in the single user-granted Notion database, via the official Notion connector (MCP) — no shell commands, no network fetches, no credentials handled by the skill. +- On claude.ai, Notion's write tools default to *needs approval* — the first write pops an approval prompt; this is expected, not a hang. +- The honesty contract is also a safety property: when parsing confidence is low, the skill records `To-confirm` and asks, rather than writing invented data into the user's records. + +## Common Pitfalls + +- **Problem:** Notion API returns 400 on the date field. + **Solution:** Expand to `"date:Date:start": "YYYY-MM-DD"` — a bare `Date` value fails. +- **Problem:** `create-pages` succeeds but the Date column is empty (known Notion MCP issue: [notion-mcp-server#121](https://github.com/makenotion/notion-mcp-server/issues/121) — expanded date fields silently dropped). + **Solution:** After the session's first create, read the row back; if `Date` is empty, fill it with `update-page`. +- **Problem:** Search returns example-row pages instead of the database. + **Solution:** Filter for type `database` when resolving "time-ledger". +- **Problem:** Model clock vs user timezone differ around midnight. + **Solution:** Treat "today" as the user's local date; ask when it could go either way. + +## Related Skills + +- `@trading-ledger` - The same "parse plain language → own Notion DB → ask instead of guessing" pattern applied to trading journals (entry thesis, plan, emotion). diff --git a/antigravity-awesome-skills/skills/trading-ledger/SKILL.md b/antigravity-awesome-skills/skills/trading-ledger/SKILL.md new file mode 100644 index 00000000..94548cbf --- /dev/null +++ b/antigravity-awesome-skills/skills/trading-ledger/SKILL.md @@ -0,0 +1,121 @@ +--- +name: trading-ledger +description: "A trading journal that captures the decision, not just the fill: thesis, plan, and emotion at the moment of entry, written to the user's own Notion database; reviews grade decisions, not P&L." +category: productivity +risk: critical +source: community +source_repo: cruisekkk/trading-ledger +source_type: community +date_added: "2026-07-04" +author: cruisekkk +tags: [trading-journal, notion, journaling, market-wizards, decision-making] +tools: [claude] +license: "MIT" +license_source: "https://github.com/cruisekkk/trading-ledger/blob/main/LICENSE" +--- + +# Trading Ledger + +## Overview + +A journaling skill in the tradition of the *Market Wizards* interviews: a written record of every trade's decision process, reviewed on a schedule. The user reports a trade in plain language — *"bought 500 NVDA at 135, stop at 128, betting the post-earnings dip fills"* — and the agent writes ticker, size, and price to the user's own Notion database **plus the part every spreadsheet journal loses: the thesis, the plan, and the emotion.** If no reason is stated, it asks on the spot, because entry reasons decay overnight. Reviews grade decision quality against the user's own plan — a per-plan loss scores better than a lucky win. Core contract: never fabricate when unsure; mark `To-confirm` and batch-ask. + +## When to Use This Skill + +- Use when the user reports a trade fill ("bought 500 NVDA at 135", "closed my TSLA position", "opened 2 ES contracts short") +- Use when the user says "log a trade" or "trading ledger", or "tidy up my trading ledger" +- Use when the user asks to "review my trades" + +## How It Works + +### Step 1: Find the database (zero-config) + +On the first write of a session, use Notion `search` to find the **database** (type `database`, not a page) whose title contains **"trading-ledger"**. Read its `data_source_id` (`collection://...` UUID) and use it as the parent for `create-pages` / `query` for the session. More than one match → ask which. + +The companion Notion template (free, linked in the source repo) ships this schema — select values are a controlled enum, copy them exactly: + +- `Entry` (title); `Ticker` (text — strikes/expiries here: NVDA / NVDA 0620C150 / ESU6) +- `Market` (select): US Stocks / US Options / US Futures / A-Shares / HK Stocks / CN Futures / Crypto / Other +- `Direction` (select): Long / Short · `Size` (text, with units) +- `Entry Price` / `Exit Price` (number) · `Entry Date` / `Exit Date` (date — expand to `"date:Entry Date:start": "YYYY-MM-DD"`; a bare value fails with HTTP 400) +- `Thesis` (text) — **the soul of the journal; if missing, ask on the spot** +- `Plan` (text) — stop / target / contingency; ask if missing +- `Emotion` (select): Calm / FOMO / Panic / Revenge / Boredom / Overconfidence — tag only what the user admits or what is plain in their words; don't diagnose +- `Execution` (select): Per plan / Early exit / Delayed stop / Impulse / Unplanned add — filled at close +- `P&L` (number, realized) · `Status` (select): Open / Closed / To-confirm / Reviewed · `Review` (text) · `Notes` (text) + +### Step 2: Opening a trade + +Parse → create a row with `Status=Open`. A missing thesis is the one field worth interrupting for — ask immediately. Anything else uncertain: record what you have, put the question in `Notes`, mark `To-confirm`. + +### Step 3: Closing or adjusting + +Find that ticker's `Status=Open` row → fill Exit Price / Exit Date / P&L / Execution → set `Closed`. Grade `Execution` against the user's own `Plan`: stopped where planned = Per plan; ran before the target = Early exit; held through the stop = Delayed stop. No matching open row → create one marked `To-confirm` and ask whether the entry was never logged. + +### Step 4: Batch reconcile and review + +- "tidy up my trading ledger" → query `Status=To-confirm` rows → collect **all** open questions into one message. +- "review my trades" → query recent `Closed` + all `Open` rows. For each closed trade, three questions: **Did the thesis play out?** (wrong thesis + profit = luck — say so). **How was the execution?** (a per-plan loss is a good trade). **What share of trades were emotion-tagged?** Write conclusions into `Review`, move `Closed` → `Reviewed`, and for every open position ask: *does the entry thesis still hold today?* + +Parsing rules: infer `Market` from symbol and context (ambiguous → ask); bought put = Short exposure + note it is a long put; record only given prices/sizes — **never look up market prices to fill gaps**; "today" = the user's local trading date — confirm before writing. + +## Examples + +### Example 1: Opening with a missing plan + +```text +User: picked up some TSM July calls this morning, same thesis as before earnings +Agent: Logged ✅ TSM July calls · Long · Open + ❓ To-confirm: which strike/expiry, how many contracts, at what price? + ❓ And the plan — holding through earnings, or is there a stop? +User: 0731 475C, 1 contract at 18.50, holding to earnings +Agent: Updated ✅ Ticker: TSM 0731C475 · Thesis: pre-earnings run-up · Plan: hold through earnings +``` + +### Example 2: Review day + +```text +User: review my trades +Agent: 3 closed since last review: + · NVDA long — thesis played out, exited per plan. Good trade. + · TSLA short — thesis wrong, but stopped exactly where planned. Good trade, bad outcome. + · SPY calls — profitable, but Entry was tagged FOMO and there was no plan. Lucky, not good. + Open positions: TSM call — earnings run-up thesis still holds until the 7/29 print. +``` + +## Best Practices + +- ✅ Ask for the thesis at entry time — it decays overnight and memory flatters +- ✅ Grade execution against the user's own plan, never against hindsight +- ✅ Batch all questions into one message; give a short receipt after logging +- ❌ Don't compute P&L you are unsure of — options and futures have multipliers; use the user's numbers +- ❌ Don't invent select values; copy the enum +- ❌ A review is not a P&L total — it grades thesis and execution + +## Limitations + +- Requires the user's own Notion workspace, the companion database (duplicate the template from the source repo), and the official Notion connector granted access — connector/skill setups currently live on paid Claude tiers. +- Close, reconcile, and review flows require reliable Notion database query/search access to open, closed, and `To-confirm` rows. If the connector cannot query the ledger, stop after logging the user's new facts and ask them to provide the relevant row details instead of guessing matches. +- No broker integration, by design: the broker knows the fills; only the user knows the reasons. The user must self-report. +- Grading honesty depends on input honesty: a thesis backfilled three days later defeats the point (the skill nags, but cannot prevent it). + +## Security & Safety Notes + +- **Mutation scope**: writes and updates rows only in the single user-granted Notion database via the official Notion connector (MCP) — no shell commands, no network fetches, no market-data lookups, no credentials. +- **This skill must never produce trading signals, price data, or buy/sell recommendations.** It records and mirrors the user's own decisions; the review asks questions, it does not advise. Nothing it writes is financial advice, and it should say so if asked for a recommendation. +- On claude.ai, Notion's write tools default to *needs approval* — the first write pops an approval prompt; expected, not a hang. + +## Common Pitfalls + +- **Problem:** Notion API 400 on date fields. + **Solution:** Expand to `"date:Entry Date:start": "YYYY-MM-DD"`. +- **Problem:** `create-pages` succeeds but the date column is empty (known Notion MCP issue: [notion-mcp-server#121](https://github.com/makenotion/notion-mcp-server/issues/121) — expanded date fields silently dropped). + **Solution:** After the session's first create, read the row back; if the date is empty, fill it with `update-page`. +- **Problem:** Close matched to the wrong row when the same ticker was traded twice. + **Solution:** Match on `Status=Open` + ticker; if multiple open rows match, ask which one. +- **Problem:** Overnight US fills dated to the wrong day for non-US users. + **Solution:** Overnight fills belong to the US trading date; confirm the date before writing. + +## Related Skills + +- `@time-ledger` - The same "parse plain language → own Notion DB → ask instead of guessing" pattern applied to time tracking. diff --git a/antigravity-awesome-skills/skills/wgm/SKILL.md b/antigravity-awesome-skills/skills/wgm/SKILL.md new file mode 100644 index 00000000..d46dfe8e --- /dev/null +++ b/antigravity-awesome-skills/skills/wgm/SKILL.md @@ -0,0 +1,137 @@ +--- +name: wgm +description: "Turns a rough request into working software via a governed build loop: align first, plan, then iterate one task at a time with deterministic backpressure and holdout-scenario judging." +category: meta +risk: safe +source: community +source_repo: agent-frontier/wgm +source_type: official +date_added: "2026-07-05" +author: agent-frontier +tags: [build-loop, spec-driven, ralph-loop, self-improving, agentic-development, methodology] +tools: [claude, cursor, gemini, copilot, codex] +license: "MIT" +license_source: "https://github.com/agent-frontier/wgm/blob/main/LICENSE" +--- + +# wgm + +## Overview + +wgm ("well, gosh... make") is a portable build **methodology**, not a domain skill — a single +`SKILL.md` protocol that any agentskills.io-compatible host loads to turn a rough request into +working software. It marries three ideas: a relentless alignment interview before any code is +written, a Ralph-style loop (one task per iteration, a persistent plan as shared state, steered by +deterministic backpressure), and holdout-scenario LLM judging (scenarios the build never sees, so a +high satisfaction score can't be gamed). It also runs its own internal docs-audit and +self-improvement loop, cross-pollinating durable lessons from sibling agent-coding projects back +into its own protocol. + +## When to Use This Skill + +- Use when building or implementing a feature, app, or prototype from rough or ambiguous intent. +- Use when a task benefits from a governed plan plus iterative, test-validated execution rather + than one-shot generation. +- Use when you want a build to converge against acceptance criteria an LLM judge scores blind + (0-100), instead of trusting a single self-reported "looks good." +- Not for trivial one-file edits, pure debugging, research-only questions, or tasks that already + have complete, unambiguous step-by-step instructions — wgm explicitly stays out of the way there. + +## How It Works + +### Step 1: Triage +Classify the work onto a scale-adaptive track (Quick / Standard / Full) so ceremony matches risk — +a one-file fix skips holdout scenarios and the docs-audit swarm; a greenfield app gets the full rig. +The deterministic backpressure gate itself is never skipped, only the ceremony around it. + +### Step 2: Grill (align) +Interview the user one question at a time, always with a recommended answer, until the goal, +success criteria, and constraints are known — capping interrogation after ~5 questions to avoid +theater. Explore the codebase to self-answer before asking anything a human doesn't need to weigh +in on. + +### Step 3: Plan +Produce a project constitution, one spec per coherent slice (each with a magic moment and a demo +path), holdout acceptance scenarios the build must never read, and `IMPLEMENTATION_PLAN.md` — the +persistent shared state across every later iteration. Cross-check every artifact against every other +one before moving on. + +### Step 4: Preflight +Score the plan's readiness 0-100 across goal clarity, observable success criteria, scenario +coverage, and backpressure mapping. Below the threshold, return to Grill/Plan and fix the weakest +dimension — do not start building on a shaky plan. + +### Step 5: Loop (build) +Run `Analyze -> Implement -> Validate -> Review -> Record`, one task per iteration: pick the single +most important pending task, make the smallest change that completes it, run its deterministic +validation command (green or it isn't done), judge holdout-scenario satisfaction, review the diff +for scope creep, then record status and any durable lesson before advancing exactly one task. + +### Step 6: Ship / Handoff +Summarize what shipped and how to validate it, run a mandatory four-persona docs-audit pass +(junior/senior/principal/PM perspectives, consolidated into one paper-trail report), and harvest any +durable, cross-project lesson back into the shared skill's own ledger. + +## Examples + +### Example 1: Full lifecycle from a rough request + +``` +User: "Build a CLI todo app with add/list/complete commands, from scratch." +``` + +wgm states its Track (Standard), grills for the ~3-5 unknowns that actually matter, writes specs + +`IMPLEMENTATION_PLAN.md`, scores Preflight readiness, then loops one task at a time — each task's +own test/lint/build command must exit 0 before it's marked done — and finally ships with a +docs-audit pass. + +### Example 2: Scoped planning only + +``` +User: "/wgm plan: add OAuth login to this existing Express API" +``` + +wgm writes the specs and plan, then hard-stops at the Plan-exit gate without starting the build loop +— useful when a human wants to review the plan before any code is touched. + +## Best Practices + +- Do let the plan be the shared state — a fresh agent should be able to resume a build from + `IMPLEMENTATION_PLAN.md` alone. +- Do keep holdout scenarios genuinely hidden from the generating agent; that's what prevents a + judged score from being gamed. +- Do map every acceptance criterion to a runnable, deterministic check before calling anything done. +- Don't skip the alignment interview on ambiguous, multi-week, or security/UX-critical work just to + move faster — misalignment discovered after building is far more expensive. +- Don't treat a high satisfaction score as sufficient on its own — a failing deterministic check + always overrides it. + +## Limitations + +- wgm is a protocol, not a runtime: it has no daemon, scheduler, or bundled dashboard — it expects + an existing agentskills.io-compatible host to load and execute it. +- This skill does not replace environment-specific validation, testing, or expert review. +- Full holdout-scenario judging and the docs-audit swarm add ceremony that a genuinely trivial task + does not need — wgm's own Triage track exists specifically to right-size this, and the skill + explicitly says not to use it for one-file edits or pure debugging. + +## Common Pitfalls + +- **Problem:** Treating wgm's "build" mode the same as a full-lifecycle request. + **Solution:** `/wgm build` resumes an *existing* `IMPLEMENTATION_PLAN.md`; a bare request like + "build the auth module" (more text after "build") is a full-lifecycle request, not `build` mode. +- **Problem:** Letting the agent peek at holdout scenarios while implementing. + **Solution:** Scenarios are read only during Validate/Review, never during Implement — that's the + entire point of a holdout set. + +## Related Skills + +- `@grill-me` - the narrower alignment-interview primitive wgm's Grill phase is adapted from. +- `@skill-creator` - useful for authoring/evaluating the skill itself; wgm ships its own eval + fixture (`evals/evals.json`) using the same eval-driven-iteration discipline. + +## Additional Resources + +- [Repository](https://github.com/agent-frontier/wgm) +- [Full protocol (`SKILL.md`)](https://github.com/agent-frontier/wgm/blob/main/SKILL.md) +- [Reference library](https://github.com/agent-frontier/wgm/tree/main/references) diff --git a/antigravity-awesome-skills/skills_index.json b/antigravity-awesome-skills/skills_index.json index c1eaf8f3..8475e7ab 100644 --- a/antigravity-awesome-skills/skills_index.json +++ b/antigravity-awesome-skills/skills_index.json @@ -37773,6 +37773,28 @@ "reasons": [] } }, + { + "id": "time-ledger", + "path": "skills/time-ledger", + "category": "productivity", + "name": "time-ledger", + "description": "Natural-language time tracking: parse what the user says they did into Activity/Minutes/Date rows in their own Notion database \u2014 asking instead of guessing when unsure.", + "risk": "critical", + "source": "community", + "date_added": "2026-07-04", + "plugin": { + "targets": { + "codex": "supported", + "claude": "supported" + }, + "setup": { + "type": "none", + "summary": "", + "docs": null + }, + "reasons": [] + } + }, { "id": "tmux", "path": "skills/tmux", @@ -37995,6 +38017,28 @@ "reasons": [] } }, + { + "id": "trading-ledger", + "path": "skills/trading-ledger", + "category": "productivity", + "name": "trading-ledger", + "description": "A trading journal that captures the decision, not just the fill: thesis, plan, and emotion at the moment of entry, written to the user's own Notion database; reviews grade decisions, not P&L.", + "risk": "critical", + "source": "community", + "date_added": "2026-07-04", + "plugin": { + "targets": { + "codex": "supported", + "claude": "supported" + }, + "setup": { + "type": "none", + "summary": "", + "docs": null + }, + "reasons": [] + } + }, { "id": "train-sentence-transformers", "path": "skills/train-sentence-transformers", @@ -40575,6 +40619,28 @@ "reasons": [] } }, + { + "id": "wgm", + "path": "skills/wgm", + "category": "meta", + "name": "wgm", + "description": "Turns a rough request into working software via a governed build loop: align first, plan, then iterate one task at a time with deterministic backpressure and holdout-scenario judging.", + "risk": "safe", + "source": "community", + "date_added": "2026-07-05", + "plugin": { + "targets": { + "codex": "supported", + "claude": "supported" + }, + "setup": { + "type": "none", + "summary": "", + "docs": null + }, + "reasons": [] + } + }, { "id": "whatsapp-automation", "path": "skills/whatsapp-automation",