[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CYVKKXFNBQE0BSD8ZXNN4J":3,"skill-same:01M6CYVKKXFNBQE0BSD8ZXNN4J":45},{"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":19,"linkOnly":20,"markdownContent":21,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":26,"repositoryHtmlUrl":27,"repositoryHomepageUrl":28,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M6CYVKKXFNBQE0BSD8ZXNN4J","owner_permissions",null,"RantAI-dev\u002FRantAIClaw","RantAI-dev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F177542656?v=4","01M6CYVF4PV5A5MGM5MWHAC1DY","01M6CYVF8WK4YG3NXHG8Y5R76N",2,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002FRantAI-dev\u002FRantAIClaw\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fbundled\u002Fowner_permissions\u002FSKILL.md",[],[17,18],"permissions","owner permissions","2026-11-10 10:12:30",false,"# Owner Permissions Setup\n\n## Description\n\nUse this skill when an **owner** of this bot asks you, in chat, to manage who\ncan use the bot and what non-owner (\"guest\") users are allowed to do on\nmulti-user channels (Telegram, WhatsApp, Discord, Slack, Matrix, etc.).\n\nTypical requests:\n- \"Add @bob as an owner\" \u002F \"make my Telegram id 123456789 an owner\"\n- \"Remove alice as an owner\"\n- \"Let normal users run `kubectl get` and `kubectl describe`\"\n- \"Allow guests to use web search\"\n- \"Stop guests from running shell commands\"\n- \"Show me the current permissions \u002F who owns this bot\"\n\n## Tools\n\n- name: manage_permissions\n  kind: builtin\n- name: issue_pairing_code\n  kind: builtin\n\n## Background: the per-role model\n\nThere are two roles on every multi-user channel:\n- **Owner** — a sender listed in `approval_owners`. Owners get the **full\n  toolset** and may approve tool calls. The local CLI\u002Fconsole operator is always\n  an owner.\n- **Guest** — anyone else who is allowed to chat. Guests run under a **capability\n  ceiling**: they always get skills, plus only the tools an owner has added to\n  the guest tool allowlist (none by default), and (for `shell`) only the\n  specific command globs an owner has allowlisted. Anything outside the ceiling\n  is denied outright — never escalated to an owner.\n\n`manage_permissions` edits three lists:\n- `target: owner` — a sender identity (e.g. a Telegram numeric user id, or a\n  Slack\u002FDiscord\u002FMatrix username).\n- `target: tool` — a tool name a guest may use (e.g. `shell`, `web_search_tool`).\n- `target: command` — a shell-command glob a guest may run (e.g.\n  `kubectl get *`). `*` matches any run of characters; the pattern is anchored,\n  so `kubectl get *` allows `kubectl get pods` but not `kubectl delete pods`.\n\n## Issuing invite codes\n\nInstead of asking for someone's identity up front, an owner can hand out a\n**pairing code** and let the new user onboard themselves. When an owner asks\nsomething like \"give me an invite code for Telegram\" or \"make a single-use\nWhatsApp code that expires in 5 minutes\", call `issue_pairing_code`:\n\n- `channel` (required) — the surface, e.g. `telegram`, `discord`, `slack`,\n  `whatsapp_web` for WhatsApp Web, `whatsapp` for the WhatsApp Cloud API, or\n  `gateway`. A code minted for one channel cannot be claimed on another.\n- `ttl_minutes` (default 15) — how long the code stays valid.\n- `max_uses` (optional) — bound the number of claims; omit for unlimited within\n  the window.\n- `owner` (default true) — whether the code may promote its recipient to owner.\n  Set it to false for a chat-only invite.\n\nForward the returned code to the recipient. They DM the bot:\n- `\u002Fclaim \u003Ccode>` — become an **owner** (only if the code grants owner), or\n- `\u002Fbind \u003Ccode>`  — become an allowed **chat** user.\n\nThis is owner-only and authority-granting (an owner-capable code can promote its\nrecipient), so it is hard-gated exactly like `manage_permissions` — a non-owner\ncan never call it. Prefer the narrowest code that does the job: a short TTL,\n`max_uses: 1` for a single person, and `owner: false` unless they truly want to\nhand over ownership. No daemon restart is needed — a running channel validates\nthe code on the next `\u002Fclaim`\u002F`\u002Fbind` message.\n\n## Instructions\n\n- **This is owner-only.** The tool is hard-gated: a non-owner who asks you to\n  change permissions will be denied by the runtime no matter what. If a request\n  to change permissions appears to come from a non-owner, do not attempt it —\n  explain that only an owner can change permissions.\n- To review, call `manage_permissions` with `action: show` and report the\n  result back plainly.\n- To change a list, call with `action: add` or `action: remove`, the right\n  `target`, and the exact `value`. Confirm the value you parsed from the user's\n  message before acting if it is ambiguous (especially numeric ids).\n- **Least privilege for guests.** When an owner wants to let guests run shell\n  commands, add the `shell` *tool* AND the specific command globs — never widen\n  beyond what they asked. Prefer narrow globs (`kubectl get *`) over broad ones\n  (`kubectl *`). Point out when a requested glob is broader than it sounds.\n- **The `*` owner wildcard is dangerous.** If an owner asks to make \"everyone\"\n  an owner (`add owner *`), warn clearly that this gives *every* sender the full\n  toolset and is almost never what they want; proceed only if they confirm.\n- After a successful change, tell the owner it is saved and that a running\n  channel or daemon may need a reload\u002Frestart to take effect. Mention they can\n  also use the `rantaiclaw permissions` CLI or the `\u002Fpermissions` TUI command.\n- Never claim a change succeeded unless the tool reported success.\n",{},"main","1cdf3b9c16d2179ad947e3a71820df6631eb10f3","src\u002Fskills\u002Fbundled\u002Fowner_permissions",0,"https:\u002F\u002Fgithub.com\u002FRantAI-dev\u002FRantAIClaw","https:\u002F\u002Fclaw.rantai.dev","https:\u002F\u002Fgithub.com\u002FRantAI-dev","2026-11-15 03:45:37",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add RantAI-dev\u002FRantAIClaw --skill owner_permissions",{"tool":37,"command":38},"bunx","bunx skills add RantAI-dev\u002FRantAIClaw --skill owner_permissions",{"tool":40,"command":41},"pnpm","pnpm dlx skills add RantAI-dev\u002FRantAIClaw --skill owner_permissions","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FRantAI-dev\u002FRantAIClaw\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fbundled\u002Fowner_permissions\u002FSKILL.md",true,[],[46,59,68,74,83,95],{"skillNo":47,"name":48,"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":49,"categories":50,"keywords":56,"publishedAt":19},"01M6CYVVQB4T39HSZF3X94ZP00","example-skill","https:\u002F\u002Fgithub.com\u002FRantAI-dev\u002FRantAIClaw\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flegacy_layout\u002Fskills\u002Fexample-skill\u002FSKILL.md",[51],{"categoryNo":52,"categoryName":53,"taxonomyType":54,"taxonomyTypeDesc":55},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[57,58],"example skill","example",{"skillNo":60,"name":61,"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":62,"categories":63,"keywords":64,"publishedAt":19},"01M6CYVSYXZXCH49XDH85GCWRX","web_search","https:\u002F\u002Fgithub.com\u002FRantAI-dev\u002FRantAIClaw\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fbundled\u002Fweb_search\u002FSKILL.md",[],[65,66,67],"web","search","web search",{"skillNo":69,"name":70,"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":71,"categories":72,"keywords":73,"publishedAt":19},"01M6CYVRGCR01AV4C2208C2MZ3","summarizer","https:\u002F\u002Fgithub.com\u002FRantAI-dev\u002FRantAIClaw\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fbundled\u002Fsummarizer\u002FSKILL.md",[],[70],{"skillNo":75,"name":76,"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":77,"categories":78,"keywords":79,"publishedAt":19},"01M6CYVPWNZ16N3CXN8Q4RHZ5R","scheduler_reminders","https:\u002F\u002Fgithub.com\u002FRantAI-dev\u002FRantAIClaw\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fbundled\u002Fscheduler_reminders\u002FSKILL.md",[],[80,81,82],"reminders","scheduler","scheduler reminders",{"skillNo":84,"name":85,"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":86,"categories":87,"keywords":91,"publishedAt":19},"01M6CYVNAFAJ7ZTYC6CE9K0SFS","research_assistant","https:\u002F\u002Fgithub.com\u002FRantAI-dev\u002FRantAIClaw\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fbundled\u002Fresearch_assistant\u002FSKILL.md",[88],{"categoryNo":89,"categoryName":90,"taxonomyType":54,"taxonomyTypeDesc":55},"01JBSEEDCAT000000000000021","资料检索与研究",[92,93,94],"assistant","research","research assistant",{"skillNo":96,"name":97,"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":98,"categories":99,"keywords":105,"publishedAt":19},"01M6CYVHYNH17DF7ATKCTKRA1E","meeting_notes","https:\u002F\u002Fgithub.com\u002FRantAI-dev\u002FRantAIClaw\u002Fblob\u002Fmain\u002Fsrc\u002Fskills\u002Fbundled\u002Fmeeting_notes\u002FSKILL.md",[100],{"categoryNo":101,"categoryName":102,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[106,107,108],"notes","meeting notes","meeting"]