opencode-skills-collection 4.1.18 → 4.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +20 -1
  2. package/bundled-skills/ai-headshot-studio/SKILL.md +107 -99
  3. package/bundled-skills/ai-image-generation-studio/SKILL.md +108 -93
  4. package/bundled-skills/ai-logo-maker/SKILL.md +108 -93
  5. package/bundled-skills/ai-multilingual-dubbing/SKILL.md +108 -93
  6. package/bundled-skills/ai-photo-restyler/SKILL.md +108 -93
  7. package/bundled-skills/ai-podcast-voiceover/SKILL.md +108 -93
  8. package/bundled-skills/aident-loadout/SKILL.md +88 -0
  9. package/bundled-skills/antigravity-maintainer-batch-release/SKILL.md +27 -254
  10. package/bundled-skills/antigravity-maintainer-batch-release/agents/openai.yaml +1 -1
  11. package/bundled-skills/antigravity-maintainer-batch-release/references/component-validation.md +18 -0
  12. package/bundled-skills/antigravity-maintainer-batch-release/references/core-preview.md +20 -0
  13. package/bundled-skills/antigravity-maintainer-batch-release/references/maintenance-contract.md +83 -0
  14. package/bundled-skills/antigravity-maintainer-batch-release/references/maintenance-cycle.md +149 -0
  15. package/bundled-skills/antigravity-maintainer-batch-release/references/public-surfaces.md +22 -0
  16. package/bundled-skills/antigravity-maintainer-batch-release/references/skillspector.md +40 -0
  17. package/bundled-skills/apify-facebook-ads-library-scraper/SKILL.md +197 -0
  18. package/bundled-skills/apify-facebook-ads-library-scraper/references/gotchas.md +45 -0
  19. package/bundled-skills/apify-linkedin-jobs-scraper/SKILL.md +181 -0
  20. package/bundled-skills/apify-linkedin-jobs-scraper/references/gotchas.md +57 -0
  21. package/bundled-skills/apify-tiktok-scraper/SKILL.md +199 -0
  22. package/bundled-skills/apify-tiktok-scraper/references/gotchas.md +45 -0
  23. package/bundled-skills/arcmira-find-quotes/SKILL.md +5 -0
  24. package/bundled-skills/beatra/SKILL.md +109 -90
  25. package/bundled-skills/beatra-ai-video-studio/SKILL.md +110 -90
  26. package/bundled-skills/curlshot/SKILL.md +139 -0
  27. package/bundled-skills/datacircle/SKILL.md +159 -98
  28. package/bundled-skills/deed-page/SKILL.md +161 -0
  29. package/bundled-skills/design-token-contrast/SKILL.md +128 -0
  30. package/bundled-skills/design-token-contrast/references/contraste-checker.md +330 -0
  31. package/bundled-skills/ecommerce-listing-image-set/SKILL.md +109 -90
  32. package/bundled-skills/goal-instruction-writer/LICENSE +21 -0
  33. package/bundled-skills/goal-instruction-writer/SKILL.md +275 -0
  34. package/bundled-skills/goal-instruction-writer/references/contribution-walkthrough.md +9 -0
  35. package/bundled-skills/goal-instruction-writer/references/drift-control.md +160 -0
  36. package/bundled-skills/goal-instruction-writer/references/examples.md +220 -0
  37. package/bundled-skills/goal-instruction-writer/references/goal-contract.md +169 -0
  38. package/bundled-skills/goal-instruction-writer/references/loop-preview.md +113 -0
  39. package/bundled-skills/keenable-search-mcp/SKILL.md +176 -0
  40. package/bundled-skills/krexa/SKILL.md +221 -0
  41. package/bundled-skills/krexa/references/limits.md +42 -0
  42. package/bundled-skills/krexa/references/setup.md +60 -0
  43. package/bundled-skills/krexa/references/tools.md +59 -0
  44. package/bundled-skills/llm-cost-optimization/SKILL.md +1 -1
  45. package/bundled-skills/llmops-platform-engineering/SKILL.md +1 -1
  46. package/bundled-skills/multi-tenant-llm-hosting/SKILL.md +1 -1
  47. package/bundled-skills/music-generation-studio/SKILL.md +109 -90
  48. package/bundled-skills/outreachgenie-list-audit/LICENSE +21 -0
  49. package/bundled-skills/outreachgenie-list-audit/SKILL.md +60 -0
  50. package/bundled-skills/outreachgenie-list-audit/assets/fictional-snapshot.json +256 -0
  51. package/bundled-skills/outreachgenie-list-audit/references/capture.md +53 -0
  52. package/bundled-skills/outreachgenie-list-audit/references/checks.md +35 -0
  53. package/bundled-skills/outreachgenie-list-audit/references/setup.md +25 -0
  54. package/bundled-skills/outreachgenie-list-audit/scripts/audit.py +766 -0
  55. package/bundled-skills/outreachgenie-list-audit/scripts/test_audit.py +360 -0
  56. package/bundled-skills/pangolinfo-amazon-data-research/SKILL.md +170 -0
  57. package/bundled-skills/poster-design-studio/SKILL.md +109 -90
  58. package/bundled-skills/ppl-personal-crm/SKILL.md +118 -0
  59. package/bundled-skills/product-photo-studio/SKILL.md +109 -90
  60. package/bundled-skills/project-memory-log/LICENSE +21 -0
  61. package/bundled-skills/project-memory-log/SKILL.md +110 -0
  62. package/bundled-skills/project-memory-log/references/example-document-catalog.md +22 -0
  63. package/bundled-skills/project-memory-log/references/example-notes.md +16 -0
  64. package/bundled-skills/project-memory-log/references/example-operation-log.md +46 -0
  65. package/bundled-skills/project-memory-log/references/record-formats.md +77 -0
  66. package/bundled-skills/solidping/SKILL.md +87 -0
  67. package/bundled-skills/story-bible-continuity/SKILL.md +149 -0
  68. package/bundled-skills/story-bible-continuity/references/sbc-checker.md +367 -0
  69. package/bundled-skills/story-bible-continuity/references/story-bible-schema.md +91 -0
  70. package/bundled-skills/suno-lyrics-to-song/SKILL.md +109 -90
  71. package/bundled-skills/taasky/SKILL.md +376 -0
  72. package/bundled-skills/talking-avatar-video/SKILL.md +109 -90
  73. package/bundled-skills/uiverify-triage-visual-changes/SKILL.md +304 -0
  74. package/bundled-skills/unpaid-intern/SKILL.md +159 -0
  75. package/bundled-skills/viral-video-teardown-remake/SKILL.md +109 -90
  76. package/bundled-skills/voice-cloning-studio/SKILL.md +109 -90
  77. package/bundled-skills/voiceover-narration-studio/SKILL.md +109 -90
  78. package/package.json +1 -1
  79. package/skills_index.json +654 -24
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "updatedAt": "2026-10-17T01:53:32.007Z",
3
+ "updatedAt": "2026-10-21T02:18:09.252Z",
4
4
  "entries": [
5
5
  "00-andruia-consultant",
6
6
  "007",
@@ -113,6 +113,7 @@
113
113
  "ai-sre-incident-response",
114
114
  "ai-studio-image",
115
115
  "ai-wrapper-product",
116
+ "aident-loadout",
116
117
  "aider-delegate",
117
118
  "airflow-dag-patterns",
118
119
  "airtable-automation",
@@ -183,12 +184,15 @@
183
184
  "apify-competitor-intelligence",
184
185
  "apify-content-analytics",
185
186
  "apify-ecommerce",
187
+ "apify-facebook-ads-library-scraper",
186
188
  "apify-generate-output-schema",
187
189
  "apify-influencer-discovery",
188
190
  "apify-integration-development",
189
191
  "apify-lead-generation",
192
+ "apify-linkedin-jobs-scraper",
190
193
  "apify-market-research",
191
194
  "apify-reddit-scraper",
195
+ "apify-tiktok-scraper",
192
196
  "apify-trend-analysis",
193
197
  "apify-ultimate-scraper",
194
198
  "apk-redteam-pipeline",
@@ -713,6 +717,7 @@
713
717
  "csv-manual-export",
714
718
  "cucumber-skill",
715
719
  "culture-retention",
720
+ "curlshot",
716
721
  "cursor-delegate",
717
722
  "customer-psychographic-profiler",
718
723
  "customer-research",
@@ -768,6 +773,7 @@
768
773
  "debugging-toolkit",
769
774
  "debugging-toolkit-smart-debug",
770
775
  "decision-navigator",
776
+ "deed-page",
771
777
  "deep-research",
772
778
  "deep-research-framework",
773
779
  "deepapi",
@@ -846,6 +852,7 @@
846
852
  "design-taste-frontend",
847
853
  "design-theme-guide",
848
854
  "design-thinking",
855
+ "design-token-contrast",
849
856
  "design-ux",
850
857
  "detect-ai-text",
851
858
  "deterministic-design",
@@ -1186,6 +1193,7 @@
1186
1193
  "go-rod-master",
1187
1194
  "go-rust-reverse",
1188
1195
  "goal-analyzer",
1196
+ "goal-instruction-writer",
1189
1197
  "goal-loop",
1190
1198
  "godot-4-migration",
1191
1199
  "godot-gdscript-patterns",
@@ -1430,6 +1438,7 @@
1430
1438
  "k8s-manifest-generator",
1431
1439
  "k8s-security-policies",
1432
1440
  "kaizen",
1441
+ "keenable-search-mcp",
1433
1442
  "kernel-prompt",
1434
1443
  "keyword-extractor",
1435
1444
  "kimi-delegate",
@@ -1439,6 +1448,7 @@
1439
1448
  "kotlin-coroutines-expert",
1440
1449
  "kpi-dashboard-design",
1441
1450
  "kpi-tracker",
1451
+ "krexa",
1442
1452
  "kubernetes-architect",
1443
1453
  "kubernetes-deployment",
1444
1454
  "kubernetes-hardening",
@@ -1840,11 +1850,13 @@
1840
1850
  "outlook-automation",
1841
1851
  "outlook-calendar-automation",
1842
1852
  "outreachagent",
1853
+ "outreachgenie-list-audit",
1843
1854
  "page-cro",
1844
1855
  "pagerduty-automation",
1845
1856
  "pagespeed-enhancer",
1846
1857
  "paid-ads",
1847
1858
  "pakistan-payments-stack",
1859
+ "pangolinfo-amazon-data-research",
1848
1860
  "papers-skill",
1849
1861
  "parallel-agents",
1850
1862
  "parallel-search-mcp",
@@ -1926,6 +1938,7 @@
1926
1938
  "postmortem-writing",
1927
1939
  "power-user-cultivation",
1928
1940
  "powershell-windows",
1941
+ "ppl-personal-crm",
1929
1942
  "pptx-deck-creation",
1930
1943
  "pptx-official",
1931
1944
  "pr-merge-champion",
@@ -1961,6 +1974,7 @@
1961
1974
  "progressive-web-app",
1962
1975
  "project-based-performance",
1963
1976
  "project-development",
1977
+ "project-memory-log",
1964
1978
  "project-skill-audit",
1965
1979
  "project-state-governor",
1966
1980
  "projection-patterns",
@@ -2280,6 +2294,7 @@
2280
2294
  "socialclaw",
2281
2295
  "software-architecture",
2282
2296
  "solidity-security",
2297
+ "solidping",
2283
2298
  "sop-company-wiki",
2284
2299
  "sops-encryption",
2285
2300
  "soroban-contract-audit",
@@ -2329,6 +2344,7 @@
2329
2344
  "stitch-design-taste",
2330
2345
  "stitch-loop",
2331
2346
  "stitch-ui-design",
2347
+ "story-bible-continuity",
2332
2348
  "stride-analysis-patterns",
2333
2349
  "stripe-automation",
2334
2350
  "stripe-integration",
@@ -2376,6 +2392,7 @@
2376
2392
  "systematic-debugging",
2377
2393
  "systemd-services",
2378
2394
  "systems-programming-rust-project",
2395
+ "taasky",
2379
2396
  "tailwind-design-system",
2380
2397
  "tailwind-patterns",
2381
2398
  "taisly-social-media-posting",
@@ -2512,6 +2529,7 @@
2512
2529
  "ui-ux-designer",
2513
2530
  "ui-ux-pro-max",
2514
2531
  "ui-visual-validator",
2532
+ "uiverify-triage-visual-changes",
2515
2533
  "uncle-bob-craft",
2516
2534
  "understand-project-yylo",
2517
2535
  "unified-ai-gateway",
@@ -2520,6 +2538,7 @@
2520
2538
  "unity-ai-game-creator",
2521
2539
  "unity-developer",
2522
2540
  "unity-ecs-patterns",
2541
+ "unpaid-intern",
2523
2542
  "unreal-engine-cpp-pro",
2524
2543
  "unship",
2525
2544
  "unslop",
@@ -11,7 +11,7 @@ author: beatra-ai
11
11
  tags: [headshot, text-to-image, mcp, paid-api, beatra]
12
12
  tools: [claude, codex, cursor, gemini]
13
13
  license: "MIT-0"
14
- license_source: "https://github.com/beatra-ai/ai-headshot-generator-skill/blob/a8818c3568f5c3fe3c0ef65d68498c1ce2e81b3a/LICENSE"
14
+ license_source: "https://github.com/beatra-ai/ai-headshot-generator-skill/blob/c5a2ab9483f81b36b501a16868516f960ec84ede/LICENSE"
15
15
  ---
16
16
 
17
17
  # AI Headshot Generator Skill
@@ -24,21 +24,20 @@ Turn a casual selfie into a professional headshot with a new background, busines
24
24
  This catalog entry is a **reviewed pointer, not the executable package**. It
25
25
  contains no client code and performs no Beatra operation by itself. The package
26
26
  it points to bundles three standard-library Python scripts that make network
27
- calls, store a credential, and can replace their own files. Read
27
+ calls and store a credential. It has no self-updater: it never downloads
28
+ code and never changes its own files. Read
28
29
  [Install](#install-pinned-verified-approved-twice) and
29
30
  [Security & Safety Notes](#security--safety-notes) before activating it.
30
31
 
31
32
  | Pinned identity | Value |
32
33
  | --- | --- |
33
- | Package | `ai-headshot-studio` `0.1.7` |
34
- | Archive | `https://cdn.beatra.ai/agent-packages/ai-headshot-studio/v0.1.7/ai-headshot-studio-skill-0.1.7.zip` |
35
- | Archive SHA-256 | `a781be7a811bc5b0e74ba5205e25d01a349c1d3d8eaf261cd653ee1d619b8ab3` |
36
- | Source tree | [`beatra-ai/ai-headshot-generator-skill@a8818c3`](https://github.com/beatra-ai/ai-headshot-generator-skill/tree/a8818c3568f5c3fe3c0ef65d68498c1ce2e81b3a/skills/ai-headshot-studio) (full SHA `a8818c3568f5c3fe3c0ef65d68498c1ce2e81b3a`) |
34
+ | Package | `ai-headshot-studio` `0.2.2` |
35
+ | Source commit | [`beatra-ai/ai-headshot-generator-skill@c5a2ab9`](https://github.com/beatra-ai/ai-headshot-generator-skill/tree/c5a2ab9483f81b36b501a16868516f960ec84ede/skills/ai-headshot-studio) (full SHA `c5a2ab9483f81b36b501a16868516f960ec84ede`) |
36
+ | Package tree | `14b395322c83d66604701fca1cb2b2e0dcc0abce` (Git tree ID of `skills/ai-headshot-studio` at that commit) |
37
37
  | License | MIT No Attribution (MIT-0) |
38
38
 
39
- The archive holds regular files only (no symlinks, no executable bits, no
40
- binaries). Confirm that with the inspect commands below. Every file must be
41
- byte-identical to the source tree at the pinned commit.
39
+ The pinned tree holds regular files only (no symlinks, no executable bits, no
40
+ binaries). Confirm that with the inspect commands below.
42
41
 
43
42
  ## When to Use This Skill
44
43
 
@@ -48,75 +47,54 @@ byte-identical to the source tree at the pinned commit.
48
47
 
49
48
  ## Install (pinned, verified, approved twice)
50
49
 
51
- ### Step 1: Download and verify into a review directory
50
+ ### Step 1: Fetch the pinned tree into a review directory
52
51
 
53
- Explain that this downloads an external package from `cdn.beatra.ai`, then ask
52
+ Explain that this fetches an external package from `github.com`, then ask
54
53
  for approval. Only after approval:
55
54
 
56
55
  ```bash
57
56
  umask 077
58
57
  review_dir="$(mktemp -d)"
59
58
  cd "$review_dir" || exit 1
60
- curl --connect-timeout 10 --max-time 60 -fsSO "https://cdn.beatra.ai/agent-packages/ai-headshot-studio/v0.1.7/ai-headshot-studio-skill-0.1.7.zip"
61
- printf '%s %s\n' \
62
- 'a781be7a811bc5b0e74ba5205e25d01a349c1d3d8eaf261cd653ee1d619b8ab3' \
63
- 'ai-headshot-studio-skill-0.1.7.zip' | shasum -a 256 -c -
59
+ git clone --quiet --filter=blob:none --no-checkout https://github.com/beatra-ai/ai-headshot-generator-skill.git src
60
+ git -C src checkout --quiet c5a2ab9483f81b36b501a16868516f960ec84ede -- skills/ai-headshot-studio
61
+ test "$(git -C src rev-parse 'c5a2ab9483f81b36b501a16868516f960ec84ede:skills/ai-headshot-studio')" = '14b395322c83d66604701fca1cb2b2e0dcc0abce' && echo TREE-OK
64
62
  ```
65
63
 
66
- Stop if the check does not print `OK`. The expected digest comes from this
67
- catalog entry, not from a file on the same CDN.
64
+ Stop if the last command does not print `TREE-OK`. The expected commit and
65
+ tree IDs come from this catalog entry, not from the package or its website,
66
+ and Git addresses every fetched object by its hash.
68
67
 
69
68
  ### Step 2: Inspect before activation
70
69
 
71
- Before extraction, inspect every ZIP member name, Unix mode, declared size and total expanded size. Reject absolute/traversing paths, entries outside the intended package root, duplicate or case-colliding names, symlinks, devices and executable/binary files. Set bounded file-count, per-file and total extraction limits. Extract only after that preflight passes into the fresh private review directory; inspecting links after extraction cannot prevent an escape. A matching archive hash is an integrity check against this receipt, not permission to execute or proof of complete safety.
72
-
73
-
74
70
  ```bash
75
- unzip -l ai-headshot-studio-skill-0.1.7.zip
76
- # After the complete member preflight passes:
77
- unzip -q ai-headshot-studio-skill-0.1.7.zip
78
- find ai-headshot-studio -type l -print # expect no output
79
- find ai-headshot-studio -type f -perm -111 -print # expect no output
80
- grep -n '"auto_update": True' ai-headshot-studio/scripts/mcp_client.py
71
+ git -C src ls-tree -r c5a2ab9483f81b36b501a16868516f960ec84ede -- skills/ai-headshot-studio | awk '$1 != "100644"' # expect no output
72
+ grep -n -E 'maybe_auto_update|download_update|_apply_update' src/skills/ai-headshot-studio/scripts/mcp_client.py # expect no output
81
73
  ```
82
74
 
83
- Confirm byte identity with the public source tree before activation (a second,
84
- independent host):
85
-
86
- ```bash
87
- git clone --quiet --filter=blob:none --no-checkout https://github.com/beatra-ai/ai-headshot-generator-skill.git src
88
- git -C src checkout --quiet a8818c3568f5c3fe3c0ef65d68498c1ce2e81b3a -- skills/ai-headshot-studio
89
- (cd ai-headshot-studio && find . -type f | LC_ALL=C sort | xargs shasum -a 256) > archive.sha
90
- (cd src/skills/ai-headshot-studio && find . -type f | LC_ALL=C sort | xargs shasum -a 256) > tree.sha
91
- cmp archive.sha tree.sha && echo IDENTICAL
92
- ```
75
+ The first check lists any symlink, executable, or submodule entry; the second
76
+ finds the entry points of the self-updater that earlier versions shipped.
93
77
 
94
- Report to the user what the review found: `SKILL.md`, `manifest.json`, the
95
- bundled Markdown references, and `scripts/authorize.py`,
78
+ Report to the user what the review found: `SKILL.md`, `manifest.json`,
79
+ `install-source.json` (the one-line marker `{"schema_version":1,"source":"github"}`),
80
+ the bundled Markdown references, and `scripts/authorize.py`,
96
81
  `scripts/mcp_client.py`, `scripts/uninstall.py` (Python 3.10+, standard
97
82
  library only, no dependency installation, no lifecycle hooks). Summarize the
98
- network, credential, local-state, telemetry, and self-update behavior listed
99
- under [Security & Safety Notes](#security--safety-notes).
83
+ network, credential, local-state, telemetry, and version-notice behavior
84
+ listed under [Security & Safety Notes](#security--safety-notes).
100
85
 
101
- ### Step 3: Copy in and disable self-update before any other command
86
+ ### Step 3: Copy in
102
87
 
103
88
  Obtain explicit authorization for this host configuration change if it is not already covered by the user's request; do not repeat an existing scoped approval. Then copy the reviewed tree to the host's skills directory
104
- (Claude Code shown; use the equivalent path for other hosts) and immediately
105
- turn off silent self-update for that exact path:
89
+ (Claude Code shown; use the equivalent path for other hosts):
106
90
 
107
91
  ```bash
108
92
  dest="$HOME/.claude/skills/ai-headshot-studio"
109
93
  test ! -e "$dest" && test ! -L "$dest" || { echo "destination exists; stop and ask the user"; exit 1; }
110
- cp -R ai-headshot-studio "$dest"
111
- python3 "$dest/scripts/mcp_client.py" update --auto off
94
+ cp -R "src/skills/ai-headshot-studio" "$dest"
112
95
  ```
113
96
 
114
- The last command must print
115
- `Automatic Beatra package updates are disabled.` It writes only
116
- `~/.beatra/updates/<id>/state.json` and makes no network request. Run it
117
- before `authorize.py`, `verify`, `tools`, `upload`, or `call`: in this
118
- pinned version self-update is **on by default**. The setting is keyed to the
119
- resolved install path, so repeat it after moving or re-copying the directory.
97
+ There is no update switch to turn off in this version.
120
98
 
121
99
  ### Step 4: Authorize as its own decision
122
100
 
@@ -158,16 +136,17 @@ arguments; never submit a replacement while the task is running.
158
136
 
159
137
  ## Update
160
138
 
161
- This entry does not endorse the package's silent self-update. Keep
162
- `update --auto off` in place and do not run `update --auto on` or a bare
163
- `update` without explicit approval.
139
+ This pinned version cannot update itself: it has no code that downloads or
140
+ replaces package files. `update` only reports what the store or tool that
141
+ installed the copy offers; for a copy installed by the steps above it finds
142
+ no such record and says to update the way you installed it. See the version
143
+ notice under [Security & Safety Notes](#security--safety-notes).
164
144
 
165
- To move to a newer version, repeat Steps 1 to 3 for that version in a new
166
- review directory, verify its digest against the matching tree in `beatra-ai/ai-headshot-generator-skill`
167
- (a version not listed in this entry has not been reviewed here), show the
168
- user the file-level changes against the installed copy, and replace the
169
- directory only after approval. `update --check` reports the available version
170
- from `beatra.ai` without changing files.
145
+ To move to a newer version, repeat Steps 1 to 3 for that commit in a new
146
+ review directory, show the user the file-level changes against the installed
147
+ copy (for example `git -C src diff --stat c5a2ab9 <new-commit> -- skills/ai-headshot-studio`),
148
+ and replace the directory only after approval. A version not listed in this
149
+ entry has not been reviewed here.
171
150
 
172
151
  ## Uninstall
173
152
 
@@ -180,21 +159,24 @@ python3 "$dest/scripts/uninstall.py"
180
159
  Read the JSON decision. `disconnected` means this was the last Beatra skill on
181
160
  the device: the token was revoked (when `revoked` is `true`) and the files
182
161
  `credentials.json`, `installation.json`, `host.json`, `skills.json`,
183
- `registrations.json`, `pending_authorization.json`, and `.authorize.lock` under
184
- `~/.beatra` were removed. `keep_connection` means
185
- another Beatra skill still uses the shared token, which stays. Then, after
186
- confirming the path with the user, delete `$dest`.
162
+ `network.json`, `balance-holds.json`, `pending_authorization.json`, and
163
+ `.authorize.lock` under `~/.beatra` were removed. `keep_connection` means
164
+ another Beatra skill still uses the shared token, which stays.
165
+ `revoke_retry` means the server refused the revocation and nothing changed;
166
+ run it again shortly. The script never deletes the package directory: after
167
+ confirming the path it prints with the user, delete `$dest`.
187
168
 
188
169
  `uninstall.py` does not remove `~/.beatra/updates/`. When the decision is
189
170
  `disconnected` and no other Beatra skill is installed, remove that directory
190
- too; otherwise leave it. A token that could not be revoked expires after 15
191
- days idle and can be revoked at once in the Beatra Console under Agents.
171
+ and then the empty `~/.beatra`; otherwise leave them. A token that could not
172
+ be revoked expires after 15 days idle and can be revoked at once in the
173
+ Beatra Console under Agents.
192
174
 
193
175
  ## Best Practices
194
176
 
195
177
  - ✅ Keep one approval per paid call, per upload set, and per install step.
196
178
  - ✅ Report net charged credits from the terminal task, not the estimate.
197
- - ❌ Do not re-enable self-update or install an unreviewed version silently.
179
+ - ❌ Do not replace the installed copy with an unreviewed version silently.
198
180
  - ❌ Do not print, paste, or move the token out of `~/.beatra/credentials.json`.
199
181
  - ❌ Do not retry a paid call with a new request ID after an uncertain response.
200
182
 
@@ -205,27 +187,42 @@ days idle and can be revoked at once in the Beatra Console under Agents.
205
187
  upstream model providers and can change; the service is provided as is.
206
188
  - Outputs are probabilistic, not guaranteed unique or non-infringing, and need
207
189
  human review before publication.
208
- - This catalog entry reviews only the pinned archive above. A newer version is
190
+ - This catalog entry reviews only the pinned tree above. A newer version is
209
191
  a different review.
210
192
 
211
193
  ## Security & Safety Notes
212
194
 
213
195
  `risk: critical` is deliberate.
214
196
 
215
- - **Network.** Authorization uses `api.beatra.ai`; every tool call and upload
216
- goes to `mcp.beatra.ai`. With self-update left on, the client also fetches
217
- `https://beatra.ai/skills/ai-headshot-studio/install.json` and archives from
218
- `cdn.beatra.ai`.
219
- - **Self-update (on by default in this pinned version).** Before `verify`,
220
- `tools`, `upload`, or `call`, the client checks for a newer release at most
221
- once every 24 hours and, if one exists, replaces package-owned files without
222
- per-update preview or approval. It pins host and path, verifies checksums
223
- from Beatra's own discovery document and CDN, and rolls back on failure, but
224
- those digests are not independently anchored. This entry therefore requires
225
- `update --auto off` before first use, as in Step 3.
197
+ - **Network.** Every request is HTTPS and refuses redirects. Authorization
198
+ uses `api.beatra.ai` and tool calls go to `mcp.beatra.ai`; an upload is a
199
+ `PUT` of the approved file to the HTTPS address the server returns, without
200
+ the bearer token. Unless a cached decision is still valid (10 minutes to 7
201
+ days), each run first asks `https://api.beatra.ai/skill-route`, and also
202
+ `https://api.beatra.cn/skill-route` when the first is slow or answers `cn`,
203
+ which network to use. These probes carry no credential or package identity.
204
+ When the answer is `cn`, authorization and tool calls go to `api.beatra.cn`
205
+ and `mcp.beatra.cn` with the same bearer token, and the version notice
206
+ reads from `www.beatra.cn`; Beatra serves these `.cn` hosts from mainland
207
+ China.
208
+ `python3 "$dest/scripts/mcp_client.py" network --use ai` pins the `.ai`
209
+ hosts and stops the probes; a failed version-notice read can still retry
210
+ once on the other network.
211
+ - **Version notice, no self-update.** This version has no code that downloads
212
+ or replaces package files and writes nothing inside the install directory.
213
+ Before `verify`, `tools`, `upload`, or `call`, at most once every 24 hours
214
+ per install path, it records the check time and looks, read-only, for
215
+ records another installer left beside the package (ClawHub `origin.json`,
216
+ SkillHub or `skills` CLI lock entries, `gh skill` frontmatter). A copy
217
+ installed by the steps above normally has none and makes no request. When
218
+ one is found, it reads `https://beatra.ai/skills/ai-headshot-studio/sources.json`
219
+ (no credential, 3-second timeout, 64 KiB cap) and, if that installer offers a
220
+ newer version, prints one line to stderr with the installer's own update
221
+ command. It never runs the command.
226
222
  - **Uploads and third parties.** Prompts and uploaded media are sent to Beatra
227
223
  and forwarded to the third-party model provider executing the task. Beatra
228
- is hosted outside mainland China. See the
224
+ runs the service outside mainland China; on the `cn` route (see Network)
225
+ requests reach it through Beatra's hosts in mainland China. See the
229
226
  [privacy policy](https://beatra.ai/en/privacy).
230
227
  - **Likeness and reference media.** Uploaded portraits or reference clips are sent to Beatra and the model provider. Require approval for that exact file set.
231
228
  - **Billing.** Paid tools consume prepaid credits. Credits for tasks that fail
@@ -233,26 +230,37 @@ days idle and can be revoked at once in the Beatra Console under Agents.
233
230
  automatically; otherwise purchases are non-refundable, and actual usage can
234
231
  exceed the estimate and leave a negative balance. See the
235
232
  [terms](https://beatra.ai/en/terms).
236
- - **Credentials.** `authorize.py` runs an OAuth device flow, opens the browser,
237
- and stores one bearer token in `~/.beatra/credentials.json` (directory
238
- `0700`, file `0600`). The token never goes into argv, environment variables,
239
- or output. It carries full Beatra scope, including `wallet:spend`, has a
240
- sliding 15-day idle lifetime, and is shared by every Beatra skill on the
241
- device. While the user has not yet selected Allow, the pending device code
242
- is kept in `~/.beatra/pending_authorization.json` (same `0600` protection) so
243
- a rerun finishes the same approval instead of opening a new one; it is
244
- deleted once the token is saved or the approval lapses. When `verify`,
245
- `tools`, `upload`, or `call` finds no working token, the client makes one
246
- check of that saved approval and stores the token if the user has already
247
- selected Allow; it never starts a new authorization or opens a browser.
233
+ - **Credentials.** `authorize.py` runs an OAuth device flow, opens the browser
234
+ on the approval page, and stores one bearer token in
235
+ `~/.beatra/credentials.json` (directory `0700`, file `0600`). The token never
236
+ goes into argv, environment variables, or output. It carries full Beatra
237
+ scope, including `wallet:spend`, has a sliding 15-day idle lifetime, and is
238
+ shared by every Beatra skill on the device. While the user has not yet
239
+ selected Allow, the pending device code is kept in
240
+ `~/.beatra/pending_authorization.json` (`0600`) so a rerun finishes the same
241
+ approval instead of opening a new one. When `verify`, `tools`, `upload`, or
242
+ `call` finds no working token, the client makes one check of that saved
243
+ approval and stores the token if the user has already selected Allow; it
244
+ never starts a new authorization or opens a browser.
248
245
  - **Local state.** `~/.beatra/` also holds `installation.json` (random
249
246
  installation reference), `host.json` (agent platform and hostname),
250
- `skills.json` (installed Beatra skill paths), `registrations.json`, and
251
- `updates/<id>/state.json` plus update backups when updates run.
252
- - **Telemetry.** The device flow sends the hostname as the device name, the
253
- package slug and version, and the detected agent platform (for example
254
- `claude-code`, from environment variables). On first use the client makes a
255
- non-billable `beatra.installations.register` call, and every tool call adds
247
+ `skills.json` (installed Beatra skill paths), `network.json` (route
248
+ decision, with a country code when the route answer includes one),
249
+ `balance-holds.json` (after an insufficient-credit refusal, that tool is
250
+ answered locally for up to 30 minutes; `call --recheck-balance` sends one
251
+ call), a short-lived `.authorize.lock`, and, per install path,
252
+ `updates/<id>/state.json` (last version check), `source.json` (install
253
+ source), and `registration.json` (last registration). Files are `0600`
254
+ except `host.json`, which follows the umask.
255
+ - **Telemetry.** Authorization sends the hostname as the device name, the
256
+ package slug and version, the detected agent platform (for example
257
+ `claude-code`, from environment variables), and the installation reference.
258
+ After connecting, at most once a day unless the version, platform, route, or
259
+ install source changes, the client makes a non-billable
260
+ `beatra.installations.register` call with those package and platform
261
+ fields, the release channel, the network route, the install source
262
+ (`github` for this tree), and coarse runtime facts: OS and OS version, CPU
263
+ architecture, Python version, locale, and UTC offset. Every tool call adds
256
264
  `source_package_slug` and `source_platform`. There is no opt-out for these
257
265
  fields.
258
266
  - **Retention.** Account data is kept for the life of the account. Task
@@ -264,6 +272,6 @@ days idle and can be revoked at once in the Beatra Console under Agents.
264
272
 
265
273
  ## Additional Resources
266
274
 
267
- - [Source tree at the pinned commit](https://github.com/beatra-ai/ai-headshot-generator-skill/tree/a8818c3568f5c3fe3c0ef65d68498c1ce2e81b3a/skills/ai-headshot-studio)
275
+ - [Source tree at the pinned commit](https://github.com/beatra-ai/ai-headshot-generator-skill/tree/c5a2ab9483f81b36b501a16868516f960ec84ede/skills/ai-headshot-studio)
268
276
  - [Product page](https://beatra.ai/skills/ai-headshot-studio)
269
277
  - [Terms](https://beatra.ai/en/terms) and [privacy policy](https://beatra.ai/en/privacy)