[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EHHFFGVRCR4MCZTE96HYN7":3,"skill-same:01M6EHHFFGVRCR4MCZTE96HYN7":93},{"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":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":14,"repositoryHtmlUrl":59,"repositoryHomepageUrl":6,"ownerHtmlUrl":60,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":61,"install":62,"resources":75},"01M6EHHFFGVRCR4MCZTE96HYN7","codex-proxy",null,"Run an OpenAI-compatible Chat Completions endpoint on localhost that spends the user's ChatGPT\u002FCodex subscription instead of an API key — for apps that take a Base URL, API key and model id (dictation post-processing, editors, scripts). Install it as an always-on LaunchAgent, check its status, print the key, try a request, or debug a failing app.","isachivka\u002Fbeware-of-skills","isachivka","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1263650?v=4","01M6EHFZP3P6R9WDKZ0B6ZEQ79","Igor Sachivka","01M6EHFZTC56CFH0DA5AENAM8Y",0,"MIT","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbosp\u002Fskills\u002Fcodex-proxy\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"codex","codex proxy","proxy","chat","uninstall","processing","post","apps","trigger","id","app","as","run","provider","use","check","model","Bash","api","debug","2026-11-10 10:12:30",false,"---\nname: codex-proxy\ndescription: >\n  Run an OpenAI-compatible Chat Completions endpoint on localhost that spends the user's\n  ChatGPT\u002FCodex subscription instead of an API key — for apps that take a Base URL, API key\n  and model id (dictation post-processing, editors, scripts). Install it as an always-on\n  LaunchAgent, check its status, print the key, try a request, or debug a failing app.\nwhen_to_use: >\n  Trigger on: codex-proxy, \"use my Codex subscription in \u003Capp>\", \"OpenAI-compatible endpoint\n  without an API key\", \"the app wants an OpenAI key\", Base URL 127.0.0.1:8723, the dictation\n  app's post-processing provider fails, codex-proxy install \u002F status \u002F key \u002F try \u002F uninstall.\nallowed-tools: Bash\n---\n\n# codex-proxy\n\n`codex-proxy` (on PATH via this plugin's `bin\u002F`) serves `http:\u002F\u002F127.0.0.1:8723\u002Fv1`:\n\n| Local                       | Upstream                                              |\n| --------------------------- | ----------------------------------------------------- |\n| `POST \u002Fv1\u002Fchat\u002Fcompletions` | `POST chatgpt.com\u002Fbackend-api\u002Fcodex\u002Fresponses` (SSE)  |\n| `GET \u002Fv1\u002Fmodels`            | `GET chatgpt.com\u002Fbackend-api\u002Fcodex\u002Fmodels` (`list`)   |\n\nIt authenticates with the OAuth token Codex CLI keeps in `~\u002F.codex\u002Fauth.json`, so Codex must be\nlogged in **with ChatGPT** (`codex login status` → \"Logged in using ChatGPT\"). An API-key login\nhas no such token; then the app should just use the key directly.\n\n## Commands\n\n```bash\ncodex-proxy install [--port 8723] [--model gpt-6-luna] [--effort low]  # LaunchAgent local.codex-proxy\ncodex-proxy status       # launchd loaded? port answering? hours left on the token\ncodex-proxy key          # the local API key to paste into the app\ncodex-proxy try \"текст\"  # one cleanup request through the running proxy, with timing\ncodex-proxy uninstall\ncodex-proxy serve ...    # foreground, for debugging\n```\n\n`install` points launchd at the script's real path — the checkout it was run from — and at\n`\u002Fusr\u002Fbin\u002Fpython3` (stdlib only). Re-run it after moving the checkout or changing flags.\nLog: `~\u002FLibrary\u002FLogs\u002Fcodex-proxy.log`, one line per request with model, effort and seconds.\n\n## What to give the app\n\n- Base URL `http:\u002F\u002F127.0.0.1:8723\u002Fv1`\n- API key: output of `codex-proxy key` (stored in `~\u002F.config\u002Fcodex-proxy\u002Fkey`)\n- Model: any slug from `\u002Fv1\u002Fmodels`. For short text cleanup `gpt-6-luna` at the default `low`\n  effort answers in ~1.5–2 s; bigger models are slower, not better at this. The `priority`\n  service tier was measured slower for such short requests and is not used.\n\n## Behaviour worth knowing\n\n- system\u002Fdeveloper messages → `instructions`; user\u002Fassistant → `input`. A request with only a\n  system message sends it as the input. Tools, images, `temperature`, `max_tokens` are dropped;\n  `reasoning_effort` in the request overrides `--effort`.\n- `stream: true` gets Chat Completions chunks and `[DONE]`; otherwise one JSON completion.\n- `auth.json` is re-read per request. Within 5 minutes of expiry, or on an upstream 401, the\n  proxy refreshes with the refresh token and writes the rotated tokens back atomically (mode\n  0600, other fields kept) under a lock — codex keeps working off the same file.\n- Requests need `Authorization: Bearer \u003Ckey>` and a localhost `Host`, so a web page cannot\n  drive it through the browser.\n\n## Debugging an app that fails\n\n1. `codex-proxy status`. Not listening → read the log; `install` again.\n2. `codex-proxy try`. Works here but not in the app → the app's Base URL (must end in `\u002Fv1`),\n   key or model id; the log shows whether the request even arrived.\n3. Upstream 401 after a refresh → `codex login` again (the refresh token was revoked).\n   Upstream 400 naming a model → the slug is not in `\u002Fv1\u002Fmodels` for this plan.\n\nThis uses the subscription outside the Codex client; OpenAI may change or close the backend at\nany time. Tests: `python3 -m pytest plugins\u002Fbosp\u002Fskills\u002Fcodex-proxy`.\n","# codex-proxy\n\n`codex-proxy` (on PATH via this plugin's `bin\u002F`) serves `http:\u002F\u002F127.0.0.1:8723\u002Fv1`:\n\n| Local                       | Upstream                                              |\n| --------------------------- | ----------------------------------------------------- |\n| `POST \u002Fv1\u002Fchat\u002Fcompletions` | `POST chatgpt.com\u002Fbackend-api\u002Fcodex\u002Fresponses` (SSE)  |\n| `GET \u002Fv1\u002Fmodels`            | `GET chatgpt.com\u002Fbackend-api\u002Fcodex\u002Fmodels` (`list`)   |\n\nIt authenticates with the OAuth token Codex CLI keeps in `~\u002F.codex\u002Fauth.json`, so Codex must be\nlogged in **with ChatGPT** (`codex login status` → \"Logged in using ChatGPT\"). An API-key login\nhas no such token; then the app should just use the key directly.\n\n## Commands\n\n```bash\ncodex-proxy install [--port 8723] [--model gpt-6-luna] [--effort low]  # LaunchAgent local.codex-proxy\ncodex-proxy status       # launchd loaded? port answering? hours left on the token\ncodex-proxy key          # the local API key to paste into the app\ncodex-proxy try \"текст\"  # one cleanup request through the running proxy, with timing\ncodex-proxy uninstall\ncodex-proxy serve ...    # foreground, for debugging\n```\n\n`install` points launchd at the script's real path — the checkout it was run from — and at\n`\u002Fusr\u002Fbin\u002Fpython3` (stdlib only). Re-run it after moving the checkout or changing flags.\nLog: `~\u002FLibrary\u002FLogs\u002Fcodex-proxy.log`, one line per request with model, effort and seconds.\n\n## What to give the app\n\n- Base URL `http:\u002F\u002F127.0.0.1:8723\u002Fv1`\n- API key: output of `codex-proxy key` (stored in `~\u002F.config\u002Fcodex-proxy\u002Fkey`)\n- Model: any slug from `\u002Fv1\u002Fmodels`. For short text cleanup `gpt-6-luna` at the default `low`\n  effort answers in ~1.5–2 s; bigger models are slower, not better at this. The `priority`\n  service tier was measured slower for such short requests and is not used.\n\n## Behaviour worth knowing\n\n- system\u002Fdeveloper messages → `instructions`; user\u002Fassistant → `input`. A request with only a\n  system message sends it as the input. Tools, images, `temperature`, `max_tokens` are dropped;\n  `reasoning_effort` in the request overrides `--effort`.\n- `stream: true` gets Chat Completions chunks and `[DONE]`; otherwise one JSON completion.\n- `auth.json` is re-read per request. Within 5 minutes of expiry, or on an upstream 401, the\n  proxy refreshes with the refresh token and writes the rotated tokens back atomically (mode\n  0600, other fields kept) under a lock — codex keeps working off the same file.\n- Requests need `Authorization: Bearer \u003Ckey>` and a localhost `Host`, so a web page cannot\n  drive it through the browser.\n\n## Debugging an app that fails\n\n1. `codex-proxy status`. Not listening → read the log; `install` again.\n2. `codex-proxy try`. Works here but not in the app → the app's Base URL (must end in `\u002Fv1`),\n   key or model id; the log shows whether the request even arrived.\n3. Upstream 401 after a refresh → `codex login` again (the refresh token was revoked).\n   Upstream 400 naming a model → the slug is not in `\u002Fv1\u002Fmodels` for this plan.\n\nThis uses the subscription outside the Codex client; OpenAI may change or close the backend at\nany time. Tests: `python3 -m pytest plugins\u002Fbosp\u002Fskills\u002Fcodex-proxy`.\n",{"name":5,"description":54,"when_to_use":55,"allowed-tools":46},"Run an OpenAI-compatible Chat Completions endpoint on localhost that spends the user's ChatGPT\u002FCodex subscription instead of an API key — for apps that take a Base URL, API key and model id (dictation post-processing, editors, scripts). Install it as an always-on LaunchAgent, check its status, print the key, try a request, or debug a failing app.\n","Trigger on: codex-proxy, \"use my Codex subscription in \u003Capp>\", \"OpenAI-compatible endpoint without an API key\", \"the app wants an OpenAI key\", Base URL 127.0.0.1:8723, the dictation app's post-processing provider fails, codex-proxy install \u002F status \u002F key \u002F try \u002F uninstall.\n","main","3f76050fe565c91c27d85e648128fdbe5005106e","plugins\u002Fbosp\u002Fskills\u002Fcodex-proxy","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills","https:\u002F\u002Fgithub.com\u002Fisachivka","2026-11-11 04:25:51",{"source":8,"skillName":5,"commands":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add isachivka\u002Fbeware-of-skills --skill codex-proxy",{"tool":68,"command":69},"bunx","bunx skills add isachivka\u002Fbeware-of-skills --skill codex-proxy",{"tool":71,"command":72},"pnpm","pnpm dlx skills add isachivka\u002Fbeware-of-skills --skill codex-proxy","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbosp\u002Fskills\u002Fcodex-proxy\u002FSKILL.md",true,[76,81,87],{"path":5,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"OTHER","其他",21841,"https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbosp\u002Fskills\u002Fcodex-proxy\u002Fcodex-proxy",{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"README.md","REFERENCE","参考文档",190,"https:\u002F\u002Fgithub.com\u002FP1Piyush\u002Fskill-cloud-cost-optimizer\u002Fblob\u002Fmain\u002FREADME.md",{"path":88,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":91,"sourceHtmlUrl":92},"test_codex_proxy.py","SCRIPT","脚本",8254,"https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbosp\u002Fskills\u002Fcodex-proxy\u002Ftest_codex_proxy.py",[94,117,138,162,184,203],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":103,"publishedAt":49},"01M6EHHMD6V299GTDRCB7XVPKH","yt-dub","Give a YouTube video Yandex's Russian voice-over (the Yandex Browser \u002F voice-over-translation one) at any length — including past Yandex's 4-hour limit — and mux it into the best video YouTube serves, with the original sound kept as a second track; optionally drop the result into Plex on SugarDaddy. Also when only the translated audio is wanted.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbosp\u002Fskills\u002Fyt-dub\u002FSKILL.md",[100],{"categoryNo":101,"categoryName":102,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[104,46,105,106,37,40,107,108,109,110,111,112,113,114,115,116],"yt dub","it","link","drop","plex","russian","translation","youtube","only","voice","Audio","Video","browser",{"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":124,"publishedAt":49},"01M6EHHBJ8GXVFT5DN6526H54J","revdiff-ru","Review a diff in revdiff with everything except the code translated into Russian, line numbering preserved 1:1 so annotations map back to the real files. One command does the translation; then \u002Frevdiff:revdiff opens the result.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Frevdiff-ru\u002FSKILL.md",[123],{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[125,126,46,127,128,129,130,131,132,133,37,134,135,109,110,136,137],"revdiff ru","annotations","open","file","code","translate","review","command","line","map","back","files","diff",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":147,"publishedAt":49},"01M6EHH7CR99Y6TPN9DW24DGXE","peer-chat","A prompt starting with \"Chat from Codex:\" is a peer message: answer it only through peer-chat.py, never in your own output. Also use when the user says \"chat with codex\", \"talk to codex\", \"work with codex\", \"do this with codex\", \"build this with codex\", \"discuss this with codex\" (the agent in the other pane of this agterm split). Not for a one-shot task handed off, and not for a read-only second opinion.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Fpeer-chat\u002FSKILL.md",[144],{"categoryNo":145,"categoryName":146,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[148,32,149,43,150,151,152,153,105,112,154,155,156,157,158,159,46,160,29,161],"peer chat","peer","user","grep","never","agterm","message","task","build","do","prompt","work","second opinion","read",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":169,"publishedAt":49},"01M6EHH3WCWPHZX79RD91X23C7","memory-review","Use when an agent memory directory has grown large enough that nobody remembers what is in it, when memories look stale or contradictory, when the same fact seems to live in both memory and a CLAUDE.md, or when the user asks to review, prune, audit or clean up their memories. Also use before retiring a project whose memories should move somewhere else.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Fmemory-review\u002FSKILL.md",[168],{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[131,170,171,43,37,172,173,174,175,176,177,178,161,179,46,180,181,129,182,183],"memory","memory review","project","memories","clean","stale","up","edit","write","prune","audit","agent memory","go","directory",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":192,"publishedAt":49},"01M6EHGZJTNE9TR6099FRECB42","decomment","Strip the noise comments an AI agent left behind on a branch — the ones that restate the code line by line or narrate the change as a story (\"was X, now Y\", \"added a guard here\"). Git holds the history and the code holds the present; only genuinely non-obvious comments survive.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Fdecomment\u002FSKILL.md",[190,191],{"categoryNo":145,"categoryName":146,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[186,193,194,195,196,37,40,107,174,176,112,137,197,198,199,200,46,201,129,202],"branch","narrative","now","scope","remove","restate","history","sweep","guard","ai agent",{"skillNo":204,"name":205,"nameZh":6,"description":206,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":207,"categories":208,"keywords":209,"publishedAt":49},"01M6EHGWVGP9JA0SB4M65GESG8","cleanup","Tidy up after yourself and close your own agterm session.","https:\u002F\u002Fgithub.com\u002Fisachivka\u002Fbeware-of-skills\u002Fblob\u002Fmain\u002Fplugins\u002Fbos\u002Fskills\u002Fcleanup\u002FSKILL.md",[],[205,153,210,176,211,212],"close","session","tidy"]