[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CS02ZQ7CXSW57B35G87E0F":3,"skill-same:01M6CS02ZQ7CXSW57B35G87E0F":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":6,"updatedAt":52,"install":53,"resources":65},"01M6CS02ZQ7CXSW57B35G87E0F","codex-usage",null,"Check OpenAI Codex \u002F ChatGPT subscription usage — queries rate-limit windows, plan type and credits using a local OAuth token from fir or the Codex CLI.","kfet\u002Ffir","kfet","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F14585?v=4","01M6CRZCB8P1V37WM3X0GB2DA6","Kalin Fetvadjiev","01M6CRZCFG1EW1WEN4RK84W1N5",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fcodex-usage\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"codex","usage","codex usage","rate","cli","true","limit","type","openai codex","token","local","queries","credits","check","plan","OAuth","openai","chatgpt","windows","codex cli","2026-11-10 10:12:30",false,"---\nbuiltin: true\nname: codex-usage\ndescription: Check OpenAI Codex \u002F ChatGPT subscription usage — queries rate-limit windows, plan type and credits using a local OAuth token from fir or the Codex CLI.\noverride: true\n---\n\n# Codex Usage Skill\n\nQuery the ChatGPT backend usage endpoint to see Codex rate-limit utilization (the 5-hour \u002F weekly \u002F monthly windows a plan happens to have), plan type, and credit balance, using a ChatGPT **OAuth Bearer token**.\n\n## Background\n\nThe endpoint is `GET https:\u002F\u002Fchatgpt.com\u002Fbackend-api\u002Fwham\u002Fusage`. It needs an OAuth token issued by a ChatGPT login (what `fir auth login openai-codex` stores) — a platform `sk-...` API key will **not** work.\n\nIt is also fussy about headers: `Authorization`, `chatgpt-account-id`, `originator: codex_cli_rs` and a `codex_cli_rs\u002F\u003Cversion>` `User-Agent`. Omitting the User-Agent gets you a Cloudflare 403 HTML page rather than JSON.\n\nThe same numbers also ride back as `x-codex-*` response headers (`x-codex-plan-type`, `x-codex-primary-used-percent`, `x-codex-secondary-used-percent`, `x-codex-primary-window-minutes`, `x-codex-primary-reset-at`, `x-codex-credits-*`) on any real `POST \u002Fbackend-api\u002Fcodex\u002Fresponses` call — but reading usage that way costs a model call, so this skill uses the GET endpoint.\n\n### Dead ends — do not retry these\n\n`\u002Fbackend-api\u002Fcodex\u002Fusage`, `\u002Fbackend-api\u002Fcodex\u002Frate_limits`, `\u002Fbackend-api\u002Fmy\u002Frate_limits` and `\u002Fbackend-api\u002Faccounts\u002Fcheck\u002F...` all return Cloudflare 403. `api.openai.com\u002Fv1\u002Fusage` rejects the OAuth JWT outright. `wham\u002Fusage` is the one that works.\n\n## Multiple accounts\n\nfir can store more than one Codex OAuth login at a time. In `auth.json` the bare `openai-codex` key is the **default** account, and additional accounts live under composite slot keys `openai-codex#\u003CaccountId>`.\n\nWith no explicit token, the script reports usage for **every** stored Codex account, one labelled section each:\n\n```\n▸ you@example.com\n  Plan      plus\n  Weekly    34% — resets Sep 10, 4:49 PM EEST\n  5-Hour     7% — resets Sep 3, 6:00 PM EEST\n  Credits   $12.40 balance\n\n▸ work@acme.com\n  Plan      free\n  Monthly    2% — resets Sep 30, 11:39 AM EEST\n```\n\nA failure on one account (e.g. an expired token) is reported under its header and does **not** abort the others; the script exits non-zero if any account failed. When only one account is stored, the section header is omitted.\n\n## Step 1 — Run the Script\n\nThe script auto-detects your OAuth token(s) from known credential files:\n\n```bash\nbash \"$SKILL_DIR\u002Fscripts\u002Fusage.sh\"\n```\n\nYou can also pass a token explicitly:\n\n```bash\nbash \"$SKILL_DIR\u002Fscripts\u002Fusage.sh\" \"$TOKEN\"\n# or\nTOKEN=\"$TOKEN\" bash \"$SKILL_DIR\u002Fscripts\u002Fusage.sh\"\n```\n\n`--raw` prints the full JSON response; `--verbose` prints the whole response body when a request fails.\n\nThere is no cached mode — unlike Anthropic usage, no fir extension maintains a Codex usage cache, so every run is a live call.\n\n### Where auto-detection looks\n\n| Tool | File | Key(s) |\n|------|------|--------|\n| fir | `~\u002F.config\u002Ffir\u002Fauth.json` | `.[\"openai-codex\"].access` + `.extra.accountId` (default) **plus** every `openai-codex#\u003Caccount>` slot |\n| Codex CLI | `~\u002F.codex\u002Fauth.json` | `.tokens.access_token` \u002F `.tokens.account_id` |\n\nfir accounts take precedence; the Codex CLI credential is only used as a fallback when no fir Codex account is stored. Override the paths with `FIR_AUTH_FILE=...` \u002F `CODEX_AUTH_FILE=...`.\n\nWhen a stored account has no `accountId` recorded (and for an explicitly supplied token), the script recovers it from the access token itself — it is a JWT carrying `chatgpt_account_id` under the `https:\u002F\u002Fapi.openai.com\u002Fauth` claim.\n\n### Manual fallback\n\n```bash\n# default fir account\nTOKEN=$(jq -r '.[\"openai-codex\"].access' ~\u002F.config\u002Ffir\u002Fauth.json 2>\u002Fdev\u002Fnull)\nACCOUNT=$(jq -r '.[\"openai-codex\"].extra.accountId' ~\u002F.config\u002Ffir\u002Fauth.json 2>\u002Fdev\u002Fnull)\n# list all stored Codex accounts (default + #account slots)\njq -r 'to_entries[] | select(.key==\"openai-codex\" or (.key|startswith(\"openai-codex#\"))) | \"\\(.key)\\t\\(.value.label \u002F\u002F \"\")\"' ~\u002F.config\u002Ffir\u002Fauth.json\n# or Codex CLI\nTOKEN=$(jq -r '.tokens.access_token' ~\u002F.codex\u002Fauth.json 2>\u002Fdev\u002Fnull)\n\ncurl -s https:\u002F\u002Fchatgpt.com\u002Fbackend-api\u002Fwham\u002Fusage \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"chatgpt-account-id: $ACCOUNT\" \\\n  -H \"originator: codex_cli_rs\" \\\n  -H \"User-Agent: codex_cli_rs\u002F0.56.0\"\n```\n\n## Step 2 — Interpret the Response\n\nWindows are **named from their declared length** (`limit_window_seconds`), not from which slot they arrive in: 18000s → `5-Hour`, 604800s → `Weekly`, 2592000s → `Monthly`. Which windows exist depends on the plan — a free plan typically reports only `primary_window` (monthly), while paid plans populate both `primary_window` (weekly) and `secondary_window` (5-hour) and carry a non-null credit balance. Any `additional_rate_limits` (prefixed `Extra`) and `code_review_rate_limit` (prefixed `Review`) are printed the same way.\n\nExample output:\n\n```\nPlan      plus\nWeekly    34% — resets Sep 10, 4:49 PM EEST\n5-Hour     7% — resets Sep 3, 6:00 PM EEST\nCredits   $12.40 balance\nStatus    rate limit reached (secondary)\n```\n\n| Field | Meaning |\n|---|---|\n| `plan_type` | `free`, `plus`, `pro`, `team`, … |\n| `rate_limit.*_window.used_percent` | % of that window's limit used |\n| `rate_limit.*_window.limit_window_seconds` | Window length — the source of its label |\n| `rate_limit.*_window.reset_at` | Unix seconds when the window resets (shown in local time; falls back to `reset_after_seconds`) |\n| `rate_limit.limit_reached` \u002F `rate_limit_reached_type` | Whether a limit is currently hit, and which window |\n| `credits.balance` | Credit balance in dollars (`null` when the plan has none; `unlimited` is a separate flag) |\n| `credits.overage_limit_reached`, `spend_control.reached` | Surfaced on the `Status` line |\n\nMost fields are nullable — a plan simply omits what it doesn't have, and the script skips anything absent.\n","# Codex Usage Skill\n\nQuery the ChatGPT backend usage endpoint to see Codex rate-limit utilization (the 5-hour \u002F weekly \u002F monthly windows a plan happens to have), plan type, and credit balance, using a ChatGPT **OAuth Bearer token**.\n\n## Background\n\nThe endpoint is `GET https:\u002F\u002Fchatgpt.com\u002Fbackend-api\u002Fwham\u002Fusage`. It needs an OAuth token issued by a ChatGPT login (what `fir auth login openai-codex` stores) — a platform `sk-...` API key will **not** work.\n\nIt is also fussy about headers: `Authorization`, `chatgpt-account-id`, `originator: codex_cli_rs` and a `codex_cli_rs\u002F\u003Cversion>` `User-Agent`. Omitting the User-Agent gets you a Cloudflare 403 HTML page rather than JSON.\n\nThe same numbers also ride back as `x-codex-*` response headers (`x-codex-plan-type`, `x-codex-primary-used-percent`, `x-codex-secondary-used-percent`, `x-codex-primary-window-minutes`, `x-codex-primary-reset-at`, `x-codex-credits-*`) on any real `POST \u002Fbackend-api\u002Fcodex\u002Fresponses` call — but reading usage that way costs a model call, so this skill uses the GET endpoint.\n\n### Dead ends — do not retry these\n\n`\u002Fbackend-api\u002Fcodex\u002Fusage`, `\u002Fbackend-api\u002Fcodex\u002Frate_limits`, `\u002Fbackend-api\u002Fmy\u002Frate_limits` and `\u002Fbackend-api\u002Faccounts\u002Fcheck\u002F...` all return Cloudflare 403. `api.openai.com\u002Fv1\u002Fusage` rejects the OAuth JWT outright. `wham\u002Fusage` is the one that works.\n\n## Multiple accounts\n\nfir can store more than one Codex OAuth login at a time. In `auth.json` the bare `openai-codex` key is the **default** account, and additional accounts live under composite slot keys `openai-codex#\u003CaccountId>`.\n\nWith no explicit token, the script reports usage for **every** stored Codex account, one labelled section each:\n\n```\n▸ you@example.com\n  Plan      plus\n  Weekly    34% — resets Sep 10, 4:49 PM EEST\n  5-Hour     7% — resets Sep 3, 6:00 PM EEST\n  Credits   $12.40 balance\n\n▸ work@acme.com\n  Plan      free\n  Monthly    2% — resets Sep 30, 11:39 AM EEST\n```\n\nA failure on one account (e.g. an expired token) is reported under its header and does **not** abort the others; the script exits non-zero if any account failed. When only one account is stored, the section header is omitted.\n\n## Step 1 — Run the Script\n\nThe script auto-detects your OAuth token(s) from known credential files:\n\n```bash\nbash \"$SKILL_DIR\u002Fscripts\u002Fusage.sh\"\n```\n\nYou can also pass a token explicitly:\n\n```bash\nbash \"$SKILL_DIR\u002Fscripts\u002Fusage.sh\" \"$TOKEN\"\n# or\nTOKEN=\"$TOKEN\" bash \"$SKILL_DIR\u002Fscripts\u002Fusage.sh\"\n```\n\n`--raw` prints the full JSON response; `--verbose` prints the whole response body when a request fails.\n\nThere is no cached mode — unlike Anthropic usage, no fir extension maintains a Codex usage cache, so every run is a live call.\n\n### Where auto-detection looks\n\n| Tool | File | Key(s) |\n|------|------|--------|\n| fir | `~\u002F.config\u002Ffir\u002Fauth.json` | `.[\"openai-codex\"].access` + `.extra.accountId` (default) **plus** every `openai-codex#\u003Caccount>` slot |\n| Codex CLI | `~\u002F.codex\u002Fauth.json` | `.tokens.access_token` \u002F `.tokens.account_id` |\n\nfir accounts take precedence; the Codex CLI credential is only used as a fallback when no fir Codex account is stored. Override the paths with `FIR_AUTH_FILE=...` \u002F `CODEX_AUTH_FILE=...`.\n\nWhen a stored account has no `accountId` recorded (and for an explicitly supplied token), the script recovers it from the access token itself — it is a JWT carrying `chatgpt_account_id` under the `https:\u002F\u002Fapi.openai.com\u002Fauth` claim.\n\n### Manual fallback\n\n```bash\n# default fir account\nTOKEN=$(jq -r '.[\"openai-codex\"].access' ~\u002F.config\u002Ffir\u002Fauth.json 2>\u002Fdev\u002Fnull)\nACCOUNT=$(jq -r '.[\"openai-codex\"].extra.accountId' ~\u002F.config\u002Ffir\u002Fauth.json 2>\u002Fdev\u002Fnull)\n# list all stored Codex accounts (default + #account slots)\njq -r 'to_entries[] | select(.key==\"openai-codex\" or (.key|startswith(\"openai-codex#\"))) | \"\\(.key)\\t\\(.value.label \u002F\u002F \"\")\"' ~\u002F.config\u002Ffir\u002Fauth.json\n# or Codex CLI\nTOKEN=$(jq -r '.tokens.access_token' ~\u002F.codex\u002Fauth.json 2>\u002Fdev\u002Fnull)\n\ncurl -s https:\u002F\u002Fchatgpt.com\u002Fbackend-api\u002Fwham\u002Fusage \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"chatgpt-account-id: $ACCOUNT\" \\\n  -H \"originator: codex_cli_rs\" \\\n  -H \"User-Agent: codex_cli_rs\u002F0.56.0\"\n```\n\n## Step 2 — Interpret the Response\n\nWindows are **named from their declared length** (`limit_window_seconds`), not from which slot they arrive in: 18000s → `5-Hour`, 604800s → `Weekly`, 2592000s → `Monthly`. Which windows exist depends on the plan — a free plan typically reports only `primary_window` (monthly), while paid plans populate both `primary_window` (weekly) and `secondary_window` (5-hour) and carry a non-null credit balance. Any `additional_rate_limits` (prefixed `Extra`) and `code_review_rate_limit` (prefixed `Review`) are printed the same way.\n\nExample output:\n\n```\nPlan      plus\nWeekly    34% — resets Sep 10, 4:49 PM EEST\n5-Hour     7% — resets Sep 3, 6:00 PM EEST\nCredits   $12.40 balance\nStatus    rate limit reached (secondary)\n```\n\n| Field | Meaning |\n|---|---|\n| `plan_type` | `free`, `plus`, `pro`, `team`, … |\n| `rate_limit.*_window.used_percent` | % of that window's limit used |\n| `rate_limit.*_window.limit_window_seconds` | Window length — the source of its label |\n| `rate_limit.*_window.reset_at` | Unix seconds when the window resets (shown in local time; falls back to `reset_after_seconds`) |\n| `rate_limit.limit_reached` \u002F `rate_limit_reached_type` | Whether a limit is currently hit, and which window |\n| `credits.balance` | Credit balance in dollars (`null` when the plan has none; `unlimited` is a separate flag) |\n| `credits.overage_limit_reached`, `spend_control.reached` | Surfaced on the `Status` line |\n\nMost fields are nullable — a plan simply omits what it doesn't have, and the script skips anything absent.\n",{"name":5,"builtin":44,"override":44,"description":7},true,"main","76b360b35f87ec18e1776cf6feafc7a025bdea64","pkg\u002Fresources\u002Fbuiltin_skills\u002Fcodex-usage",0,"https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir","https:\u002F\u002Fgithub.com\u002Fkfet","https:\u002F\u002Fgithub.com\u002Fkalin-sa","2026-11-12 01:36:05",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":44},[55,58,61],{"tool":56,"command":57},"npx","npx skills add kfet\u002Ffir --skill codex-usage",{"tool":59,"command":60},"bunx","bunx skills add kfet\u002Ffir --skill codex-usage",{"tool":62,"command":63},"pnpm","pnpm dlx skills add kfet\u002Ffir --skill codex-usage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fcodex-usage\u002FSKILL.md",[66],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"scripts\u002Fusage.sh","SCRIPT","脚本",9045,"https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fcodex-usage\u002Fscripts\u002Fusage.sh",[73,97,117,140,158,189],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":39},"01M6CS290490SZNX8V35TF3N6X","wt","Spawn a fresh fir agent in its own tmux session on its own git worktree. Use whenever the user wants the work — or the conversation about the work — to happen over there, not here. If the user points at this skill, or has directly loaded it in the context, that alone is the cue — spawn, don't inline.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fwt\u002FSKILL.md",[],[75,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,24,95,96],"tmux","git","worktree","git worktree","work","context","user","spawn","session","use","conversation","cue","fresh","it","about","at","inline",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":39},"01M6CS26KAKJ7VYRQ3RJ31SJ6S","wrap-up","Wrap up work on a project branch — review, fix, and simplify in a loop until clean, then ff-merge to main.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fwrap-up\u002FSKILL.md",[],[104,105,106,107,108,109,110,111,84,112,113,114,45,115,116,24],"wrap up","up","wrap","review","merge","simplify","loop","work on","branch","fix","clean","merge to main","project",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":39},"01M6CS23P85MSVBX11XMFB29PF","tmux-observer","Attach a tmux window to an already-running fir session — observe its transcript and drive its input via tmux send-keys. Use when you need to watch or steer another fir agent.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Ftmux-observer\u002FSKILL.md",[],[80,124,125,126,88,89,127,128,129,130,131,132,133,24,134,135,136,137,138,139],"tmux observer","observer","transcript","drive","observe","attach","watch","input","via","you","keys","steer","window","send","when","running",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":39},"01M6CS21ENQ3D7Z08TDKXHJRR6","tmux-driver","Drive interactive CLIs (python, gdb, etc.) via named tmux sessions with multi-window support. Falls back to fir's built-in PTY driver when tmux is unavailable.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Ftmux-driver\u002FSKILL.md",[],[80,147,148,149,150,151,152,153,127,154,155,132,156,157,24,136,138],"tmux driver","driver","python","support","sessions","interactive","PTY","back","gdb","multi","with",{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":169,"publishedAt":39},"01M6CS1YWSAH2TQ7S4VK7VKJT6","telegram-bot-setup","Set up a new Telegram bot channel for a fir project — install the telegram MCP, create a per-project state dir, drop in the bot token, wire .fir\u002Fmcp.json with TELEGRAM_STATE_DIR, pair the user, and verify. Use when the user asks to add, configure, or onboard a Telegram bot for a fir worktree\u002Fproject.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Ftelegram-bot-setup\u002FSKILL.md",[164],{"categoryNo":165,"categoryName":166,"taxonomyType":167,"taxonomyTypeDesc":168},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[170,171,172,173,174,175,176,177,82,178,179,180,181,182,183,184,185,89,105,186,116,157,24,187,138,188],"bot","setup","telegram bot","telegram","telegram bot setup","MCP","create","state","SET","verify","onboard","configure","json","pair","install","channel","drop","for","new",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":39},"01M6CS1VSW4C1W1QED8NDHBHZ9","sync","Sync with an upstream source repo — detect changed files, apply equivalent downstream edits, update the baseline, and report any new features or non-trivial changes picked up.","https:\u002F\u002Fgithub.com\u002Fkfet\u002Ffir\u002Fblob\u002Fmain\u002Fpkg\u002Fresources\u002Fbuiltin_skills\u002Fsync\u002FSKILL.md",[],[191,196,197,198,199,105,200,201,202,157,24,203,204,205,206,188],"update","report","baseline","repo","files","upstream","detect","source","changes","features","apply"]