[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FZCTDCC734G48MZY0RAWM0":3,"skill-same:01M6FZCTDCC734G48MZY0RAWM0":94},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":17,"linkOnly":18,"markdownContent":19,"markdownBody":19,"frontMatter":20,"refName":21,"commitSha":22,"skillDirectory":23,"forksCount":24,"repositoryHtmlUrl":25,"repositoryHomepageUrl":6,"ownerHtmlUrl":26,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":27,"install":28,"resources":41},"01M6FZCTDCC734G48MZY0RAWM0","plan2meal",null,"kbarbel640-del\u002Fskills","kbarbel640-del","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F255315490?v=4","01M6CJPPQGCCESXMG3K7BBGQ5J","01M6CJPPX2PB2BCZERFVM2C2B3",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# Plan2Meal Skill\n\nA ClawdHub skill for managing recipes and grocery lists via Plan2Meal, a React Native recipe app.\n\n## Features\n\n- **Recipe Management**: Add recipes from URLs, search, view, and delete your recipes\n- **Grocery Lists**: Create and manage shopping lists with recipes\n- **Backend Authentication**: Secure authentication via Plan2Meal web app (no secrets in skill)\n- **Recipe Extraction**: Automatically fetch recipe metadata from URLs\n- **Telegram Formatting**: Pretty-printed output for Telegram\n\n## Setup\n\n1. Install via ClawdHub:\n   ```bash\n   clawdhub install plan2meal\n   ```\n\n2. Configure environment variables:\n   ```bash\n   cp .env.example .env\n   # Edit .env with your credentials\n   ```\n\n3. Required environment variables:\n   - `PLAN2MEAL_API_URL`: Your Plan2Meal backend API URL (e.g., `https:\u002F\u002Fapi.plan2meal.app`)\n\n   **Optional:**\n   - `PLAN2MEAL_AUTH_URL`: Custom authentication URL (defaults to `https:\u002F\u002Fapp.plan2meal.com\u002Fsign-in`)\n\n   **Important**: \n   - **Public Skill**: This skill is published on ClawdHub. No secrets are stored in the skill.\n   - **Authentication**: Users authenticate via your Plan2Meal web app, then copy a session token back to Telegram.\n   - **Backend Security**: All OAuth credentials (GitHub, Convex) are configured in your backend only, never exposed.\n\n## Commands\n\n### Recipe Commands\n\n| Command | Description |\n|---------|-------------|\n| `plan2meal add \u003Curl>` | Fetch recipe metadata from URL and create recipe |\n| `plan2meal list` | List your recent recipes |\n| `plan2meal search \u003Cterm>` | Search your recipes |\n| `plan2meal show \u003Cid>` | Show detailed recipe information |\n| `plan2meal delete \u003Cid>` | Delete a recipe |\n\n### Grocery List Commands\n\n| Command | Description |\n|---------|-------------|\n| `plan2meal lists` | List all your grocery lists |\n| `plan2meal list-show \u003Cid>` | Show grocery list with items |\n| `plan2meal list-create \u003Cname>` | Create a new grocery list |\n| `plan2meal list-add \u003ClistId> \u003CrecipeId>` | Add recipe to grocery list |\n\n### Help\n\n| Command | Description |\n|---------|-------------|\n| `plan2meal help` | Show all available commands |\n\n## Usage Examples\n\n### Adding a Recipe\n\n```\nplan2meal add https:\u002F\u002Fwww.allrecipes.com\u002Frecipe\u002F12345\u002Fpasta\n```\n\nOutput:\n```\n✅ Recipe added successfully!\n\n? Recipe Details\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nName: Classic Pasta\nSource: allrecipes.com\nMethod: firecrawl-json (credit used)\nTime: 15 min prep + 20 min cook\n\n? Ingredients (4 servings)\n• 1 lb pasta\n• 2 cups marinara sauce\n• 1\u002F2 cup parmesan\n\n? Steps\n1. Boil water...\n```\n\n### Searching Recipes\n\n```\nplan2meal search pasta\n```\n\n### Creating a Grocery List\n\n```\nplan2meal list-create Weekly Shopping\n```\n\n### Adding Recipe to List\n\n```\nplan2meal list-add \u003ClistId> \u003CrecipeId>\n```\n\n## Recipe Limits\n\nThe free tier allows up to **5 recipes**. You'll receive a warning when approaching this limit.\n\n## Authentication Architecture\n\n### How It Works\n\n**Skill Owner Setup** (one-time):\n1. Configure your Plan2Meal backend API URL in the skill\n2. Your backend handles all OAuth (GitHub credentials configured in Convex environment variables)\n3. Your backend is configured with the Convex URL (stays private)\n\n**End User Flow**:\n1. User sends a command (e.g., `plan2meal list`)\n2. Skill responds with a link to your Plan2Meal sign-in page (`app.plan2meal.com\u002Fsign-in`)\n3. User clicks the link and authenticates with GitHub via your web app\n4. Your backend (using Convex Auth) handles the GitHub OAuth flow\n5. After successful authentication, your backend shows the user a session token\n6. User copies the token and sends it back to Telegram (or types `token: \u003Ctoken>`)\n7. Skill validates the token with your backend and stores it securely\n\n**Backend Processing**:\n- Your Plan2Meal backend uses Convex Auth with GitHub provider\n- GitHub OAuth credentials are stored in Convex environment variables (never exposed)\n- After GitHub auth, backend generates a session token for the user\n- Skill sends session token to your backend API for all requests\n- Your backend validates the token and makes Convex API calls on behalf of the user\n- Convex URL is never exposed to users or the skill\n\n### Key Points\n\n- **Public Skill**: No secrets in the skill - safe to publish on ClawdHub\n- **Backend OAuth**: All OAuth credentials (GitHub, Convex) stay in your backend\n- **User Identification**: Your backend maps session tokens to Convex users internally\n- **Privacy**: Convex URL stays private in your backend only\n- **Security**: Session tokens are validated with your backend before use\n\n## License\n\nMIT",{},"main","e7e336ac628c3e3bd771aff1aaa469c93778f94a","skills\u002Fokikesolutions\u002Fplan2meal",0,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del","2026-08-23 22:39:37",{"source":7,"skillName":5,"commands":29,"prompt":39,"zipAvailable":40},[30,33,36],{"tool":31,"command":32},"npx","npx skills add kbarbel640-del\u002Fskills --skill plan2meal",{"tool":34,"command":35},"bunx","bunx skills add kbarbel640-del\u002Fskills --skill plan2meal",{"tool":37,"command":38},"pnpm","pnpm dlx skills add kbarbel640-del\u002Fskills --skill plan2meal","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002FSKILL.md",true,[42,48,54,58,62,66,70,74,78,82,86,90],{"path":43,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":46,"sourceHtmlUrl":47},"_meta.json","REFERENCE","参考文档",456,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002F_meta.json",{"path":49,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":52,"sourceHtmlUrl":53},"eslint.config.mjs","SCRIPT","脚本",1413,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002Feslint.config.mjs",{"path":55,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":56,"sourceHtmlUrl":57},"package-lock.json",55555,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002Fpackage-lock.json",{"path":59,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":60,"sourceHtmlUrl":61},"package.json",871,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002Fpackage.json",{"path":63,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":64,"sourceHtmlUrl":65},"README.md",2233,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002FREADME.md",{"path":67,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":68,"sourceHtmlUrl":69},"src\u002Fcommands.ts",11871,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002Fsrc\u002Fcommands.ts",{"path":71,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":72,"sourceHtmlUrl":73},"src\u002Fconvex.ts",5432,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002Fsrc\u002Fconvex.ts",{"path":75,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":76,"sourceHtmlUrl":77},"src\u002Fdevice-auth.ts",4304,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002Fsrc\u002Fdevice-auth.ts",{"path":79,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":80,"sourceHtmlUrl":81},"src\u002Findex.ts",13167,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002Fsrc\u002Findex.ts",{"path":83,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":84,"sourceHtmlUrl":85},"src\u002Ftest.ts",1669,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002Fsrc\u002Ftest.ts",{"path":87,"resourceType":50,"resourceTypeDesc":51,"sizeBytes":88,"sourceHtmlUrl":89},"src\u002Futils.ts",1059,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002Fsrc\u002Futils.ts",{"path":91,"resourceType":44,"resourceTypeDesc":45,"sizeBytes":92,"sourceHtmlUrl":93},"tsconfig.json",445,"https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fokikesolutions\u002Fplan2meal\u002Ftsconfig.json",[95,126,155,176,182,202],{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":106,"publishedAt":17},"01M6G8J55967D6281ACMKAKTEQ","crowd-prompting","A marketplace where AI agents improve prompts, system instructions, tool descriptions, and other text-based content with domain expertise from real-world operations — and earn tokens for valuable contributions.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzzadrian\u002Fcrowd-prompting\u002FSKILL.md",[101],{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125],"crowd prompting","prompting","api","with","tokens","domain","world","prompts","operations","instructions","text","tool","system","improve","productivity","marketplace","https","content","ai agents",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":137,"publishedAt":17},"01M6G8J0PKPAYVET6BWE8W4C26","dilemm-ai","Compete in DilemmAI, the prisoner's dilemma AI arena at dilemm.ai. Use when an OpenClaw agent wants to create an account, design and submit strategy prompts for their bot, enter matchmaking, analyze historical matches and leaderboards, and iterate on bot strategy. Requires headless browser automation (no API available yet).","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzyori\u002Fdilemm-ai\u002FSKILL.md",[132],{"categoryNo":133,"categoryName":134,"taxonomyType":135,"taxonomyTypeDesc":136},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[138,109,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,114,154],"dilemm ai","arena","analyze","browser","openclaw agent","create","automation","browser automation","bot","openclaw","design","strategy","headless","compete","submit","matchmaking","use",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":164,"publishedAt":17},"01M6G8HWAF3K9SW7NP3Z83CPJ6","arxiv-paper-reviews","Interact with arXiv Crawler API to fetch papers, read reviews, and submit comments. Use when working with arXiv papers, fetching paper lists by date\u002Fcategory\u002Finterest, viewing paper details with comments, or submitting paper reviews via API at http:\u002F\u002F150.158.152.82:8000.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Fweak-accept\u002FSKILL.md",[161],{"categoryNo":162,"categoryName":163,"taxonomyType":135,"taxonomyTypeDesc":136},"01JBSEEDCAT000000000000021","资料检索与研究",[165,166,167,168,169,170,171,110,172,152,154,173,109,174,175],"arxiv paper reviews","reviews","arxiv","paper","crawler","papers","comments","fetch","read","http","via",{"skillNo":177,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":181,"publishedAt":17},"01M6G8HQJ7N7WMY6YV7D7SSJ16","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzxrys\u002Farxiv-paper-reviews\u002FSKILL.md",[180],{"categoryNo":162,"categoryName":163,"taxonomyType":135,"taxonomyTypeDesc":136},[168,167,166,165,175,170,171,110,169,152,154,172,173,109,174],{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":188,"publishedAt":17},"01M6G8HM95Y64JNVFC2HN4E2BG","git-summary","Get a quick summary of the current Git repository including status, recent commits, branches, and contributors.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fzweack\u002Fgit-summary\u002FSKILL.md",[],[189,190,191,192,193,194,195,196,197,198,199,200,201],"git","summary","git summary","commits","repository","win32","status","linux","contributors","true","quick","get","branches",{"skillNo":203,"name":204,"nameZh":6,"description":205,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":206,"categories":207,"keywords":212,"publishedAt":17},"01M6G8HGEGF05CNEJCGVYFSC4R","agent-constitution","Interact with AgentConstitution governance contracts on Base Sepolia. Check compliance, read rules, log actions, query governance state.","https:\u002F\u002Fgithub.com\u002Fkbarbel640-del\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fztsalexey\u002Fagent-constitution\u002FSKILL.md",[208,209],{"categoryNo":133,"categoryName":134,"taxonomyType":135,"taxonomyTypeDesc":136},{"categoryNo":210,"categoryName":211,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000037","律师与法务",[213,214,215,216,110,217,218,21,219,173,220,221,222,223,224,123,225,226,227],"agent constitution","constitution","contracts","tree","query","base","log","check","Rules","projects","compliance","actions","state","governance","github"]