@laitszkin/apollo-toolkit 2.6.0 → 2.8.0

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 (38) hide show
  1. package/AGENTS.md +5 -3
  2. package/CHANGELOG.md +18 -0
  3. package/README.md +6 -3
  4. package/analyse-app-logs/LICENSE +1 -1
  5. package/archive-specs/LICENSE +1 -1
  6. package/commit-and-push/LICENSE +1 -1
  7. package/develop-new-features/LICENSE +1 -1
  8. package/docs-to-voice/LICENSE +1 -1
  9. package/enhance-existing-features/LICENSE +1 -1
  10. package/feature-propose/LICENSE +1 -1
  11. package/fix-github-issues/SKILL.md +5 -3
  12. package/generate-spec/LICENSE +1 -1
  13. package/learn-skill-from-conversations/LICENSE +1 -2
  14. package/learn-skill-from-conversations/SKILL.md +3 -1
  15. package/lib/cli.js +4 -4
  16. package/lib/installer.js +6 -8
  17. package/novel-to-short-video/LICENSE +1 -1
  18. package/open-github-issue/LICENSE +1 -1
  19. package/open-source-pr-workflow/LICENSE +1 -1
  20. package/openai-text-to-image-storyboard/LICENSE +1 -1
  21. package/openclaw-configuration/SKILL.md +126 -0
  22. package/openclaw-configuration/agents/openai.yaml +4 -0
  23. package/openclaw-configuration/references/best-practices.md +70 -0
  24. package/openclaw-configuration/references/config-reference-map.md +211 -0
  25. package/openclaw-configuration/references/official-docs.md +40 -0
  26. package/package.json +2 -2
  27. package/review-change-set/LICENSE +1 -1
  28. package/review-codebases/LICENSE +1 -1
  29. package/scripts/install_skills.ps1 +10 -17
  30. package/scripts/install_skills.sh +10 -10
  31. package/shadow-api-model-research/SKILL.md +114 -0
  32. package/shadow-api-model-research/agents/openai.yaml +4 -0
  33. package/shadow-api-model-research/references/fingerprinting-playbook.md +69 -0
  34. package/shadow-api-model-research/references/request-shape-checklist.md +44 -0
  35. package/systematic-debug/LICENSE +1 -1
  36. package/text-to-short-video/LICENSE +1 -1
  37. package/version-release/LICENSE +1 -1
  38. package/video-production/LICENSE +16 -13
package/AGENTS.md CHANGED
@@ -4,8 +4,8 @@
4
4
 
5
5
  - This repository is a skill catalog: each top-level skill lives in its own directory and is installable when that directory contains `SKILL.md`.
6
6
  - Typical skill layout is lightweight and consistent: `SKILL.md`, `README.md`, `LICENSE`, plus optional `agents/`, `references/`, and `scripts/`.
7
- - The npm package exposes an `apollo-toolkit` CLI that stages a managed copy under `~/.apollo-toolkit` and links each skill folder into selected target directories.
8
- - `scripts/install_skills.sh` and `scripts/install_skills.ps1` remain available for local/curl installs and mirror the managed-home linking behavior.
7
+ - The npm package exposes an `apollo-toolkit` CLI that stages a managed copy under `~/.apollo-toolkit` and copies each skill folder into selected target directories.
8
+ - `scripts/install_skills.sh` and `scripts/install_skills.ps1` remain available for local/curl installs and mirror the managed-home copy behavior.
9
9
 
10
10
  ## Core Business Flow
11
11
 
@@ -20,7 +20,7 @@ This repository enables users to install and run a curated set of reusable agent
20
20
  - Users can research a topic deeply and produce evidence-based deliverables.
21
21
  - Users can research the latest completed market week and produce a PDF watchlist of tradeable instruments for the coming week.
22
22
  - Users can turn a marked weekly finance PDF into a concise evidence-based financial event report.
23
- - Users can install Apollo Toolkit through npm or npx and interactively choose one or more target skill directories to link.
23
+ - Users can install Apollo Toolkit through npm or npx and interactively choose one or more target skill directories to populate with copied skills.
24
24
  - Users can design and implement new features through a spec-first workflow.
25
25
  - Users can generate shared feature spec, task, and checklist planning artifacts for approval-gated workflows.
26
26
  - Users can convert text or documents into audio files with subtitle timelines.
@@ -38,11 +38,13 @@ This repository enables users to install and run a curated set of reusable agent
38
38
  - Users can publish structured GitHub issues or feature proposals with auth fallbacks.
39
39
  - Users can prepare and open open-source pull requests from existing changes.
40
40
  - Users can generate storyboard image sets from chapters, novels, articles, or scripts.
41
+ - Users can configure OpenClaw from official documentation, including `~/.openclaw/openclaw.json`, skills loading, SecretRefs, CLI edits, and validation or repair workflows.
41
42
  - Users can record multi-account spending and balance changes in monthly Excel ledgers with summary analytics and charts.
42
43
  - Users can review the current git change set from an unbiased reviewer perspective to find abstraction opportunities and simplification candidates.
43
44
  - Users can process GitHub pull request review comments and resolve addressed threads.
44
45
  - Users can perform repository-wide code reviews and publish confirmed findings as GitHub issues.
45
46
  - Users can schedule a bounded project runtime window, stop it automatically, and analyze module health from captured logs.
47
+ - Users can investigate gated or shadow LLM APIs by capturing real client request shapes, replaying verified traffic patterns, and attributing the likely underlying model through black-box fingerprinting.
46
48
  - Users can build and maintain Solana programs and Rust clients using official Solana development workflows.
47
49
  - Users can add focused observability to opaque workflows through targeted logs, metrics, traces, and tests.
48
50
  - Users can build against Jupiter's official Solana swap, token, price, lending, trigger, recurring, and portfolio APIs with an evidence-based development guide.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,24 @@ All notable changes to this repository are documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [v2.8.0] - 2026-03-21
8
+
9
+ ### Changed
10
+ - Change the npm installer and local install scripts to copy managed skill directories into selected targets instead of creating symlinks.
11
+ - Replace legacy Apollo Toolkit symlink installs with real copied skill directories during reinstall, while still removing stale skills that no longer ship in the current version.
12
+ - Normalize every repository `LICENSE` file to the MIT template owned by `LaiTszKin`.
13
+
14
+ ## [v2.7.0] - 2026-03-20
15
+
16
+ ### Added
17
+ - Add `openclaw-configuration` for explaining, editing, validating, and troubleshooting OpenClaw configuration from the current official docs, including `~/.openclaw/openclaw.json`, skills config, secrets, and CLI workflows.
18
+ - Add bundled OpenClaw configuration references covering the official doc map, config option guide, and operational best practices.
19
+
20
+ ### Changed
21
+ - Update `fix-github-issues` to require temporary worktree and local branch cleanup as part of direct-push or PR completion, with explicit cleanup verification before finishing.
22
+ - Update `learn-skill-from-conversations` to treat post-completion cleanup or finalization follow-ups as evidence that the owning workflow's done criteria need tightening.
23
+ - Update the repository skill inventory and project capability docs to include OpenClaw configuration support.
24
+
7
25
  ## [v2.6.0] - 2026-03-20
8
26
 
9
27
  ### Added
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Apollo Toolkit Skills
2
2
 
3
- A curated skill catalog for Codex, OpenClaw, and Trae with a managed installer that keeps the toolkit in `~/.apollo-toolkit` and links each skill into the targets you choose.
3
+ A curated skill catalog for Codex, OpenClaw, and Trae with a managed installer that keeps the toolkit in `~/.apollo-toolkit` and copies each skill into the targets you choose.
4
4
 
5
5
  ## Included skills
6
6
 
@@ -31,11 +31,13 @@ A curated skill catalog for Codex, OpenClaw, and Trae with a managed installer t
31
31
  - open-github-issue
32
32
  - open-source-pr-workflow
33
33
  - openai-text-to-image-storyboard
34
+ - openclaw-configuration
34
35
  - record-spending
35
36
  - resolve-review-comments
36
37
  - review-change-set
37
38
  - review-codebases
38
39
  - scheduled-runtime-health-check
40
+ - shadow-api-model-research
39
41
  - solana-development
40
42
  - systematic-debug
41
43
  - text-to-short-video
@@ -55,8 +57,9 @@ The interactive installer:
55
57
  - shows a branded `Apollo Toolkit` terminal welcome screen with a short staged reveal
56
58
  - installs a managed copy into `~/.apollo-toolkit`
57
59
  - lets you multi-select `codex`, `openclaw`, `trae`, or `all`
58
- - creates symlinks from `~/.apollo-toolkit/<skill>` into each selected target
59
- - in the same npm/npx install flow, removes stale linked skills that existed in the previous installed version but no longer exist in the current package skill list
60
+ - copies `~/.apollo-toolkit/<skill>` into each selected target
61
+ - removes stale previously installed skill directories that existed in the previous installed version but no longer exist in the current package skill list
62
+ - replaces legacy symlink-based installs created by older Apollo Toolkit installers with real copied directories
60
63
 
61
64
  ### Global install
62
65
 
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Lai Tsz Kin
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Lai Tsz Kin
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Lai Tsz Kin
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Lai Tsz Kin
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 tszkinlai
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Lai Tsz Kin
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 tszkinlai
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -16,8 +16,8 @@ description: Resolve issues from remote GitHub repositories via GitHub CLI (`gh`
16
16
 
17
17
  - Evidence: Verify repository context, fetch remote issue details, and derive expected behavior from issue text before coding.
18
18
  - Execution: Select the issue, open an isolated worktree by default, fix it through `systematic-debug`, validate locally, then hand off to the delivery workflow that matches the user's request.
19
- - Quality: Keep scope limited to the selected issue, capture exact validation commands, and preserve issue linkage in the final PR or commit message.
20
- - Output: Finish with either a linked PR or a direct pushed commit, then clean up the temporary worktree when the work is complete.
19
+ - Quality: Keep scope limited to the selected issue, capture exact validation commands, preserve issue linkage in the final PR or commit message, and treat temporary worktree cleanup as part of completion rather than an optional follow-up.
20
+ - Output: Finish with either a linked PR or a direct pushed commit, then clean up the temporary worktree plus any matching local branch before reporting completion.
21
21
 
22
22
  ## Overview
23
23
 
@@ -89,10 +89,12 @@ python3 scripts/list_issues.py --limit 50 --state open
89
89
  - executed test commands and results
90
90
  - Include issue-closing reference (for example, `Closes #<issue-number>`) whenever a PR is opened.
91
91
 
92
- ### 8) Clean up the temporary worktree after PR creation
92
+ ### 8) Clean up the temporary worktree after PR creation or direct push
93
93
 
94
94
  - Once the PR is opened or the direct push is complete and no more work is needed in that isolated tree, remove the worktree you created for the fix.
95
95
  - Also clean up the matching local branch reference if it is no longer needed locally.
96
+ - Verify the cleanup with `git worktree list` and confirm the temporary path no longer appears before finishing.
97
+ - If the worktree cannot be removed because of uncommitted changes or a still-checked-out branch, resolve that state immediately instead of leaving cleanup for a later user request.
96
98
 
97
99
  ## Included Script
98
100
 
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Lai Tsz Kin
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Yamiyorunoshura
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
-
@@ -15,7 +15,7 @@ description: Learn and evolve the local skill library from recent Codex conversa
15
15
  ## Standards
16
16
 
17
17
  - Evidence: Extract recent Codex session history first and derive reusable lessons only from actual conversation patterns.
18
- - Execution: Inventory the current skill catalog before editing, prioritize repeated requests, user corrections, and reported errors, then prefer a focused update to the strongest related skill or create a new skill only when the overlap is weak.
18
+ - Execution: Inventory the current skill catalog before editing, prioritize repeated requests, user corrections, reported errors, and post-completion follow-up asks that reveal missing closure, then prefer a focused update to the strongest related skill or create a new skill only when the overlap is weak.
19
19
  - Quality: Take no action when there are no recent sessions, avoid unrelated broad refactors, and validate every changed skill.
20
20
  - Output: Report the analyzed sessions, extracted lessons, created or updated skills, and the reasoning behind each decision.
21
21
 
@@ -48,6 +48,8 @@ python3 ~/.codex/skills/learn-skill-from-conversations/scripts/extract_recent_co
48
48
  - Identify repeated user needs, recurring friction, and repeated manual workflows.
49
49
  - Give extra weight to moments where the user corrected the agent, rejected an earlier interpretation, or pointed out a missing preference or requirement.
50
50
  - Give extra weight to user-reported errors, regressions, or avoidable mistakes, then ask how a skill can prevent repeating that failure mode.
51
+ - Treat a user follow-up that asks for cleanup or an omitted finalization step immediately after the assistant reported completion as evidence that the workflow's done criteria were incomplete.
52
+ - When that kind of follow-up recurs, tighten the owning skill's completion checklist before considering any new-skill extraction.
51
53
  - Ignore one-off issues that do not provide reusable value.
52
54
  - Distinguish between:
53
55
  - repeated trigger intent that deserves a new skill
package/lib/cli.js CHANGED
@@ -67,8 +67,8 @@ function buildWelcomeScreen({ version, colorEnabled, stage = 4 }) {
67
67
  '',
68
68
  'This setup will configure:',
69
69
  ` ${color('*', '1;33', colorEnabled)} A managed Apollo Toolkit home in ${color('~/.apollo-toolkit', '1', colorEnabled)}`,
70
- ` ${color('*', '1;33', colorEnabled)} Symlinked skill folders for your selected targets`,
71
- ` ${color('*', '1;33', colorEnabled)} A clean install flow with target-aware linking`,
70
+ ` ${color('*', '1;33', colorEnabled)} Copied skill folders for your selected targets`,
71
+ ` ${color('*', '1;33', colorEnabled)} A clean install flow with target-aware replacement`,
72
72
  );
73
73
  }
74
74
 
@@ -178,7 +178,7 @@ function renderSelectionScreen({ output, version, cursor, selected, message, env
178
178
 
179
179
  clearScreen(output);
180
180
  output.write(`${buildBanner({ version, colorEnabled })}\n\n`);
181
- output.write('Choose where Apollo Toolkit should create symlinked skills.\n');
181
+ output.write('Choose where Apollo Toolkit should copy managed skills.\n');
182
182
  output.write(`${color('Use Up/Down', '1;33', colorEnabled)} (or ${color('j/k', '1;33', colorEnabled)}) to move, ${color('Space', '1;33', colorEnabled)} to toggle, ${color('Enter', '1;33', colorEnabled)} to continue.\n`);
183
183
  output.write(`Press ${color('a', '1;33', colorEnabled)} to toggle all, ${color('q', '1;33', colorEnabled)} to cancel.\n\n`);
184
184
 
@@ -329,7 +329,7 @@ function printSummary({ stdout, version, toolkitHome, modes, installResult, env
329
329
  stdout.write(color('Installation complete.', '1;32', colorEnabled));
330
330
  stdout.write('\n');
331
331
  stdout.write(`Apollo Toolkit home: ${toolkitHome}\n`);
332
- stdout.write(`Linked skills: ${installResult.skillNames.length}\n`);
332
+ stdout.write(`Installed skills: ${installResult.skillNames.length}\n`);
333
333
  stdout.write(`Targets: ${modes.join(', ')}\n\n`);
334
334
 
335
335
  for (const target of installResult.targets) {
package/lib/installer.js CHANGED
@@ -185,18 +185,16 @@ async function ensureDirectory(dirPath) {
185
185
  await fsp.mkdir(dirPath, { recursive: true });
186
186
  }
187
187
 
188
- async function replaceWithSymlink(sourcePath, targetPath) {
188
+ async function replaceWithCopy(sourcePath, targetPath) {
189
189
  await fsp.rm(targetPath, { recursive: true, force: true });
190
190
  await ensureDirectory(path.dirname(targetPath));
191
-
192
- const type = process.platform === 'win32' ? 'junction' : 'dir';
193
- await fsp.symlink(sourcePath, targetPath, type);
191
+ await fsp.cp(sourcePath, targetPath, { recursive: true, force: true });
194
192
  }
195
193
 
196
194
  async function installLinks({ toolkitHome, modes, env = process.env, previousSkillNames = [] }) {
197
195
  const skillNames = await listSkillNames(toolkitHome);
198
196
  const targets = await getTargetRoots(modes, env);
199
- const linkedPaths = [];
197
+ const copiedPaths = [];
200
198
  const staleSkillNames = previousSkillNames.filter((skillName) => !skillNames.includes(skillName));
201
199
 
202
200
  for (const target of targets) {
@@ -207,15 +205,15 @@ async function installLinks({ toolkitHome, modes, env = process.env, previousSki
207
205
  for (const skillName of skillNames) {
208
206
  const sourcePath = path.join(toolkitHome, skillName);
209
207
  const targetPath = path.join(target.root, skillName);
210
- await replaceWithSymlink(sourcePath, targetPath);
211
- linkedPaths.push({ target: target.label, path: targetPath, skillName });
208
+ await replaceWithCopy(sourcePath, targetPath);
209
+ copiedPaths.push({ target: target.label, path: targetPath, skillName });
212
210
  }
213
211
  }
214
212
 
215
213
  return {
216
214
  skillNames,
217
215
  targets,
218
- linkedPaths,
216
+ copiedPaths,
219
217
  };
220
218
  }
221
219
 
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Yamiyorunoshura
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Tsz Kin Lai
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 LTKSunny
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 tszkinlai
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,126 @@
1
+ ---
2
+ name: openclaw-configuration
3
+ description: Build, audit, and explain OpenClaw configuration from official documentation. Use when configuring `~/.openclaw/openclaw.json`, mapping config options, adjusting skills or secrets, generating validated snippets, or diagnosing config errors with `openclaw config`, `openclaw configure`, and `openclaw doctor`.
4
+ ---
5
+
6
+ # OpenClaw Configuration
7
+
8
+ ## Dependencies
9
+
10
+ - Required: none.
11
+ - Conditional: `answering-questions-with-research` when a request depends on newer OpenClaw docs than the bundled references cover.
12
+ - Conditional: `commit-and-push` when the user explicitly wants OpenClaw workspace changes committed and pushed after validation.
13
+ - Optional: none.
14
+ - Fallback: If the local CLI is unavailable, work from the bundled references and clearly mark any runtime behavior that was not verified on the machine.
15
+
16
+ ## Standards
17
+
18
+ - Evidence: Verify the active config file, current values, and CLI diagnostics before editing.
19
+ - Execution: Prefer the smallest safe change; use `openclaw config` for narrow edits and direct JSON edits for broad restructures.
20
+ - Quality: Keep the file schema-valid, avoid plaintext secrets when a SecretRef or env var fits, and preserve unrelated valid settings.
21
+ - Output: Return exact file paths, touched keys, validation commands, and any restart or hot-reload caveats.
22
+
23
+ ## Goal
24
+
25
+ Help another agent configure OpenClaw safely, quickly, and with citations back to the official docs.
26
+
27
+ ## Workflow
28
+
29
+ ### 1. Classify the request
30
+
31
+ Decide whether the user needs:
32
+
33
+ - a config explanation
34
+ - a new starter config
35
+ - a targeted key update
36
+ - skills loading or per-skill env setup
37
+ - workspace persona or memory customization under `~/.openclaw/workspace`
38
+ - browser, exec, or sandbox permission changes
39
+ - secrets or provider wiring
40
+ - validation or repair of a broken config
41
+
42
+ Assume the canonical config file is `~/.openclaw/openclaw.json` unless the environment proves otherwise.
43
+
44
+ ### 2. Choose the safest edit surface
45
+
46
+ - Use `openclaw onboard` or `openclaw configure` for guided setup.
47
+ - Use `openclaw config get/set/unset/validate` for precise path-based edits.
48
+ - Use direct JSON edits only when changing several related branches at once.
49
+ - If the local gateway is running, the Control UI config tab at `http://127.0.0.1:18789` can help inspect or edit the same schema-backed config.
50
+
51
+ ### 3. Load only the references you need
52
+
53
+ - Read `references/official-docs.md` first for the canonical doc map.
54
+ - Read `references/config-reference-map.md` when you need option names, CLI behavior, hot reload, skills config, env handling, or secrets rules.
55
+ - Read `references/best-practices.md` before producing a new config, touching credentials, or fixing a broken setup.
56
+
57
+ ### 4. Apply minimal, schema-safe changes
58
+
59
+ - Prefer `openclaw config set` for one-path edits.
60
+ - Prefer SecretRefs or env substitution over plaintext credentials.
61
+ - For skill-specific setup, prefer the workspace convention `~/.openclaw/workspace/skills`, then wire it through `skills.load.extraDirs`, `skills.entries.<skillKey>`, and per-skill `env` or `apiKey`.
62
+ - When the user is customizing the assistant persona or standing instructions, inspect and edit the matching workspace files such as `AGENTS.md`, `TOOLS.md`, `SOUL.md`, `USER.md`, and `memory/*.md` instead of stuffing everything into `openclaw.json`.
63
+ - When enabling automation or browser workflows, verify the actual permission path for `browser`, `exec`, and sandbox behavior rather than assuming the profile already grants them.
64
+ - Do not invent unknown root keys; OpenClaw rejects schema-invalid config.
65
+
66
+ ### 5. Validate before finishing
67
+
68
+ - Run `openclaw config validate` after edits.
69
+ - If the gateway refuses to boot, run `openclaw doctor`.
70
+ - Use `openclaw doctor --repair` only after reviewing what it will change; the tool can back up the config and remove unknown keys.
71
+ - Call out whether the change should hot-apply or may still need a restart.
72
+
73
+ ### 6. Return a concise handoff
74
+
75
+ Always include:
76
+
77
+ - the file or keys changed
78
+ - the command or JSON snippet used
79
+ - the validation command
80
+ - any secret or env prereqs
81
+ - the official doc pages that justify the change
82
+
83
+ ## Common Tasks
84
+
85
+ ### Generate a starter config
86
+
87
+ Start from the official minimal or starter shape, then add only the channels, models, or skills the user actually needs.
88
+
89
+ ### Explain config options
90
+
91
+ Summarize the relevant branch and point back to the matching official page rather than dumping the entire reference.
92
+
93
+ ### Configure skills
94
+
95
+ Use `skills.load.extraDirs` for additional skill folders and `skills.entries.<skillKey>` for per-skill enablement, env vars, or `apiKey`. When the user asks for OpenClaw workspace-local skills, default to `~/.openclaw/workspace/skills` unless the environment proves another convention.
96
+
97
+ ### Customize workspace instructions and persona
98
+
99
+ When the request is about how the assistant should behave inside OpenClaw, inspect the workspace instruction files first and keep each edit in the narrowest home:
100
+
101
+ - `AGENTS.md` for workflow rules, completion criteria, and memory discipline
102
+ - `TOOLS.md` for tool usage instructions
103
+ - `SOUL.md` for persona or relationship framing
104
+ - `USER.md` for the user's profile and durable identity details
105
+ - `memory/*.md` for durable corrections, failures, and learned preferences
106
+
107
+ If the workspace is a git repo and the user explicitly asks to persist those changes remotely, validate first and then hand off to `commit-and-push`.
108
+
109
+ ### Verify tool permissions
110
+
111
+ When the user says "make sure OpenClaw can use this tool," confirm the exact config path and runtime status for:
112
+
113
+ - `tools.*` policy entries
114
+ - sandbox mode and workspace access
115
+ - `browser.enabled` and any browser profile settings
116
+ - any profile-level defaults that may still block the tool
117
+
118
+ Report both the config edit and the runtime verification command; do not assume that a schema-valid config means the tool is actually usable.
119
+
120
+ ### Wire secrets
121
+
122
+ Prefer SecretRefs (`env`, `file`, or `exec`) for supported credential fields. Use plaintext only when the user explicitly wants a local-only quick setup and understands the tradeoff.
123
+
124
+ ### Repair a broken config
125
+
126
+ Run `openclaw config validate`, then `openclaw doctor`, and only then make the smallest correction that restores schema validity.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "OpenClaw Configuration"
3
+ short_description: "Configure and troubleshoot OpenClaw settings"
4
+ default_prompt: "Use $openclaw-configuration to explain, edit, validate, or troubleshoot OpenClaw configuration, including `~/.openclaw/openclaw.json`, `skills` settings, env vars, SecretRefs, and official OpenClaw CLI/config workflows."
@@ -0,0 +1,70 @@
1
+ # OpenClaw Configuration Best Practices
2
+
3
+ These rules are distilled from the official OpenClaw docs and adapted into a practical workflow.
4
+
5
+ ## Authoring rules
6
+
7
+ - Treat `~/.openclaw/openclaw.json` as the source of truth unless the environment proves otherwise.
8
+ - Prefer the smallest possible edit surface:
9
+ - one key: `openclaw config set`
10
+ - one subtree removal: `openclaw config unset`
11
+ - several coordinated edits: direct JSON edit plus validation
12
+ - Keep JSON structure conservative; OpenClaw rejects unknown keys.
13
+ - Use the configuration examples page as a baseline instead of inventing a new root layout.
14
+
15
+ ## Safety rules
16
+
17
+ - Never store production credentials in plaintext if a SecretRef or env var can be used.
18
+ - Avoid mixing plaintext and SecretRefs for the same credential path; the ref wins on supported fields and makes ownership clearer.
19
+ - Validate immediately after editing:
20
+ - `openclaw config validate`
21
+ - `openclaw doctor` when the gateway still behaves unexpectedly
22
+ - Use `openclaw doctor --repair` only when you are comfortable with automatic cleanup and backup behavior.
23
+
24
+ ## Environment rules
25
+
26
+ - Prefer `${VAR_NAME}` substitution for portable config shared across machines.
27
+ - Keep env var names uppercase to match the documented substitution pattern.
28
+ - Use `env.shellEnv.enabled` only when the missing-key import behavior is intentional and understood.
29
+ - Avoid scattering the same secret across the parent shell, local `.env`, and `~/.openclaw/.env`; keep precedence simple.
30
+
31
+ ## Skills rules
32
+
33
+ - For OpenClaw workspace-local skills, prefer `~/.openclaw/workspace/skills` as the first extra skill root unless the machine already uses a different proven convention.
34
+ - Put extra skill roots in `skills.load.extraDirs` instead of hard-coding ad hoc discovery logic elsewhere.
35
+ - Use `skills.entries.<skillKey>.enabled` for explicit enable or disable state.
36
+ - Use `skills.entries.<skillKey>.env` for skill-local environment variables.
37
+ - Use `skills.entries.<skillKey>.apiKey` only when the skill expects a primary env-backed API key convenience field.
38
+ - Leave `skills.load.watch` enabled while iterating on local skills unless file-watch churn becomes a confirmed problem.
39
+ - If you set `skills.install.nodeManager`, remember the official docs still recommend Node as the runtime for the gateway itself.
40
+
41
+ ## Workspace customization rules
42
+
43
+ - Do not force persona, memory, and workflow instructions into `openclaw.json` when the workspace already has dedicated files.
44
+ - Use `AGENTS.md` for task-completion and memory-management instructions.
45
+ - Use `TOOLS.md` for browser, Playwright, or wrapper command guidance.
46
+ - Use `SOUL.md` for persona framing and `USER.md` for durable user profile facts.
47
+ - When the user asks OpenClaw to remember valuable failures or corrections, store them in the workspace memory files that the current workspace already uses rather than inventing a second memory system.
48
+
49
+ ## Tool permission rules
50
+
51
+ - Treat browser and sandbox enablement as a two-part check: config policy plus runtime verification.
52
+ - After changing tool policy, verify the effective runtime state with the relevant OpenClaw command instead of trusting config shape alone.
53
+ - If a tool still fails after config edits, inspect whether profile defaults or sandbox policy override the leaf setting.
54
+
55
+ ## Troubleshooting rules
56
+
57
+ - If the gateway stops booting after a config change, assume schema breakage first and validate before changing unrelated systems.
58
+ - When troubleshooting a credentialed path, inspect both the config branch and the SecretRef provider branch.
59
+ - When a user asks for "why did this stop working," capture the exact key path and the command used to validate it.
60
+ - For broken skill loading, check both `skills.load.extraDirs` and the effective `skillKey` mapping.
61
+
62
+ ## Recommended delivery format
63
+
64
+ When answering a user or editing a machine, return:
65
+
66
+ 1. the exact file or key path
67
+ 2. the change made
68
+ 3. the validation command
69
+ 4. the secret or env prerequisites
70
+ 5. the official docs used
@@ -0,0 +1,211 @@
1
+ # OpenClaw Config Reference Map
2
+
3
+ This file condenses the official OpenClaw configuration docs into a quick operator map.
4
+
5
+ ## Main file and edit surfaces
6
+
7
+ - Canonical file: `~/.openclaw/openclaw.json`
8
+ - Guided setup:
9
+ - `openclaw onboard`
10
+ - `openclaw configure`
11
+ - Precise edits:
12
+ - `openclaw config get <path>`
13
+ - `openclaw config set <path> <value>`
14
+ - `openclaw config unset <path>`
15
+ - `openclaw config validate`
16
+ - UI editing:
17
+ - Config tab in the local Control UI at `http://127.0.0.1:18789`
18
+ - Direct editing:
19
+ - safe for broader restructures, but validate immediately afterward
20
+
21
+ ## Validation and reload behavior
22
+
23
+ - OpenClaw enforces a strict schema.
24
+ - Unknown keys, bad types, or invalid values can prevent the gateway from starting.
25
+ - The root `$schema` string is the documented exception for editor schema metadata.
26
+ - When validation fails, the docs point to diagnostic commands such as:
27
+ - `openclaw doctor`
28
+ - `openclaw logs`
29
+ - `openclaw health`
30
+ - `openclaw status`
31
+ - The gateway watches `~/.openclaw/openclaw.json` and hot-applies many changes automatically.
32
+
33
+ ## CLI behavior worth remembering
34
+
35
+ ### Paths
36
+
37
+ - Dot notation works: `agents.defaults.workspace`
38
+ - Bracket notation works: `agents.list[0].tools.exec.node`
39
+
40
+ ### Value parsing
41
+
42
+ - `openclaw config set` parses JSON5 when possible.
43
+ - Use `--strict-json` when you want parsing to be required.
44
+ - Use strings intentionally for values such as heartbeat durations.
45
+
46
+ ### Assignment modes
47
+
48
+ - Value mode: plain path/value edit
49
+ - SecretRef builder mode: build a supported ref without hand-writing JSON
50
+ - Provider builder mode: build `secrets.providers.<alias>` entries
51
+ - Batch mode: apply several edits from a JSON payload or file
52
+
53
+ ## Official namespace map
54
+
55
+ The full reference documents these major sections:
56
+
57
+ - `channels`
58
+ - `agents`
59
+ - `session`
60
+ - `messages`
61
+ - `talk`
62
+ - `tools`
63
+ - custom providers and base URLs
64
+ - `skills`
65
+ - `plugins`
66
+ - `browser`
67
+ - `ui`
68
+ - `gateway`
69
+ - `hooks`
70
+ - canvas host
71
+ - discovery
72
+ - `environment`
73
+ - `secrets`
74
+ - auth storage
75
+ - logging
76
+ - CLI
77
+ - wizard
78
+ - identity
79
+ - `cron`
80
+ - media model template variables
81
+ - config includes via `$include`
82
+
83
+ Use the official full reference when you need the exact nested shape under one of these branches.
84
+
85
+ ## Environment variables
86
+
87
+ The gateway docs describe three non-inline sources:
88
+
89
+ - env vars from the parent process
90
+ - `.env` in the current working directory
91
+ - `~/.openclaw/.env` as a global fallback
92
+
93
+ Neither `.env` file overrides variables that are already present in the parent process.
94
+
95
+ The docs also describe config-side helpers:
96
+
97
+ - inline `env` sections
98
+ - optional shell env import via `env.shellEnv.enabled`
99
+ - config string substitution with `${VAR_NAME}`
100
+
101
+ Key rules called out by the docs:
102
+
103
+ - substitution targets uppercase variable names
104
+ - missing or empty values fail at load time
105
+ - use `$${VAR}` to escape a literal placeholder
106
+
107
+ ## Secrets and credential references
108
+
109
+ OpenClaw documents a common SecretRef shape:
110
+
111
+ ```json
112
+ {
113
+ "source": "env",
114
+ "provider": "default",
115
+ "id": "OPENAI_API_KEY"
116
+ }
117
+ ```
118
+
119
+ Supported ref sources in the docs:
120
+
121
+ - `env`
122
+ - `file`
123
+ - `exec`
124
+
125
+ Operational rules confirmed by the secrets docs:
126
+
127
+ - if a supported field has both plaintext and a ref, the ref takes precedence
128
+ - `openclaw secrets audit --check` is the default preflight
129
+ - `openclaw secrets configure` helps wire providers
130
+ - a final `openclaw secrets audit --check` confirms the setup
131
+
132
+ ## Skills configuration
133
+
134
+ The official skills config page documents these fields:
135
+
136
+ - `skills.allowBundled`
137
+ - `skills.load.extraDirs`
138
+ - `skills.load.watch`
139
+ - `skills.load.watchDebounceMs`
140
+ - `skills.install.preferBrew`
141
+ - `skills.install.nodeManager`
142
+ - `skills.entries.<skillKey>.enabled`
143
+ - `skills.entries.<skillKey>.env`
144
+ - `skills.entries.<skillKey>.apiKey`
145
+
146
+ Notes confirmed by the docs:
147
+
148
+ - `skills.entries` keys default to the skill name
149
+ - if a skill defines `metadata.openclaw.skillKey`, use that key instead
150
+ - watcher-driven skill changes are picked up on the next agent turn when watching is enabled
151
+ - for workspace-scoped customization, `~/.openclaw/workspace/skills` is a practical local skill root to wire through `skills.load.extraDirs`
152
+
153
+ ## Workspace files often edited alongside config
154
+
155
+ These are not all part of the OpenClaw JSON schema, but they are common neighboring files when users ask to customize behavior:
156
+
157
+ - `~/.openclaw/workspace/AGENTS.md`
158
+ - `~/.openclaw/workspace/TOOLS.md`
159
+ - `~/.openclaw/workspace/SOUL.md`
160
+ - `~/.openclaw/workspace/USER.md`
161
+ - `~/.openclaw/workspace/memory/*.md`
162
+
163
+ Use them for persona, tool instructions, durable user profile details, and memory-management rules instead of overloading `openclaw.json`.
164
+
165
+ ## Tool and sandbox checks worth remembering
166
+
167
+ - A valid config does not prove the tool is usable at runtime.
168
+ - When enabling browser automation or sandboxed command execution, verify the effective state after editing:
169
+ - tool policy
170
+ - sandbox mode and workspace access
171
+ - browser enablement and profile selection
172
+ - Profile defaults can still block a tool even when a nearby leaf branch looks permissive, so check the effective runtime path, not only the edited key.
173
+
174
+ ## Example snippets to adapt
175
+
176
+ ### Minimal starter
177
+
178
+ ```json
179
+ {
180
+ "agents": {
181
+ "defaults": {
182
+ "workspace": "~/.openclaw/workspace"
183
+ }
184
+ },
185
+ "channels": {
186
+ "whatsapp": {
187
+ "allowFrom": ["+15555550123"]
188
+ }
189
+ }
190
+ }
191
+ ```
192
+
193
+ ### Custom skill directory plus per-skill env
194
+
195
+ ```json
196
+ {
197
+ "skills": {
198
+ "load": {
199
+ "extraDirs": ["~/skills", "~/.apollo-toolkit"]
200
+ },
201
+ "entries": {
202
+ "openclaw-configuration": {
203
+ "enabled": true,
204
+ "env": {
205
+ "OPENCLAW_CONFIG_PATH": "~/.openclaw/openclaw.json"
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }
211
+ ```
@@ -0,0 +1,40 @@
1
+ # OpenClaw Official Config Docs
2
+
3
+ Last verified: 2026-03-20
4
+
5
+ Use this file as the entry map into the official OpenClaw documentation on `docs.openclaw.ai`.
6
+
7
+ ## Canonical pages
8
+
9
+ - Gateway configuration overview: `https://docs.openclaw.ai/gateway/configuration`
10
+ - Covers the main config file path, edit surfaces, strict validation, hot reload, env vars, and links to the full reference.
11
+ - Full configuration reference: `https://docs.openclaw.ai/gateway/configuration-reference`
12
+ - Covers the major top-level namespaces such as `channels`, `agents`, `tools`, `skills`, `plugins`, `gateway`, `secrets`, `cron`, and `$include`.
13
+ - Configuration examples: `https://docs.openclaw.ai/gateway/configuration-examples`
14
+ - Provides minimal and starter-shaped configs plus common deployment patterns.
15
+ - Skills config: `https://docs.openclaw.ai/tools/skills-config`
16
+ - Covers `skills.allowBundled`, `skills.load.*`, `skills.install.*`, and `skills.entries.<skillKey>`.
17
+ - Secrets management: `https://docs.openclaw.ai/gateway/secrets`
18
+ - Covers SecretRef structure, providers, precedence, audit flow, and secure credential handling.
19
+ - CLI config command: `https://docs.openclaw.ai/cli/config`
20
+ - Covers `openclaw config get/set/unset/validate`, path syntax, parsing rules, and SecretRef builder modes.
21
+ - CLI configure command: `https://docs.openclaw.ai/cli/configure`
22
+ - Covers the guided configuration wizard.
23
+ - CLI doctor command: `https://docs.openclaw.ai/cli/doctor`
24
+ - Covers diagnostics, repair behavior, backups, and environment checks.
25
+
26
+ ## Core facts confirmed from the official docs
27
+
28
+ - The canonical config file is `~/.openclaw/openclaw.json`.
29
+ - OpenClaw supports guided edits, CLI path edits, Control UI editing, and direct file editing.
30
+ - The gateway validates the config strictly against schema; unknown keys are rejected except for the root `$schema` metadata key.
31
+ - The gateway watches the config file and hot-applies many changes automatically.
32
+ - Secrets can be supplied through env vars, files, or exec-backed SecretRefs, depending on the field.
33
+
34
+ ## When to open which doc
35
+
36
+ - Need the exact field name or namespace: open the full reference.
37
+ - Need a starting snippet or pattern: open configuration examples.
38
+ - Need to load custom skills or set per-skill env: open skills config.
39
+ - Need to wire API keys safely: open secrets management plus CLI config.
40
+ - Need to repair a broken config: open gateway configuration plus CLI doctor.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@laitszkin/apollo-toolkit",
3
- "version": "2.6.0",
4
- "description": "Apollo Toolkit npm installer for managed skill linking across Codex, OpenClaw, and Trae.",
3
+ "version": "2.8.0",
4
+ "description": "Apollo Toolkit npm installer for managed skill copying across Codex, OpenClaw, and Trae.",
5
5
  "license": "MIT",
6
6
  "author": "LaiTszKin",
7
7
  "homepage": "https://github.com/LaiTszKin/apollo-toolkit#readme",
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Lai Tsz Kin
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Yamiyorunoshura
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -12,9 +12,9 @@ Usage:
12
12
  ./scripts/install_skills.ps1 [codex|openclaw|trae|all]...
13
13
 
14
14
  Modes:
15
- codex Install links into ~/.codex/skills
16
- openclaw Install links into ~/.openclaw/workspace*/skills
17
- trae Install links into ~/.trae/skills
15
+ codex Copy skills into ~/.codex/skills
16
+ openclaw Copy skills into ~/.openclaw/workspace*/skills
17
+ trae Copy skills into ~/.trae/skills
18
18
  all Install all supported targets
19
19
 
20
20
  Optional environment overrides:
@@ -33,7 +33,7 @@ function Show-Banner {
33
33
  @"
34
34
  +------------------------------------------+
35
35
  | Apollo Toolkit |
36
- | npm installer and skill linker |
36
+ | npm installer and skill copier |
37
37
  +------------------------------------------+
38
38
  "@
39
39
  }
@@ -180,7 +180,7 @@ function Remove-PathForce {
180
180
  }
181
181
  }
182
182
 
183
- function Link-Skill {
183
+ function Copy-Skill {
184
184
  param(
185
185
  [string]$Source,
186
186
  [string]$TargetRoot
@@ -192,15 +192,8 @@ function Link-Skill {
192
192
  New-Item -ItemType Directory -Path $TargetRoot -Force | Out-Null
193
193
  Remove-PathForce -Target $target
194
194
 
195
- try {
196
- New-Item -Path $target -ItemType SymbolicLink -Target $Source -Force | Out-Null
197
- Write-Host "[linked] $target -> $Source"
198
- }
199
- catch {
200
- # Fallback for environments where symlink permission is restricted.
201
- New-Item -Path $target -ItemType Junction -Target $Source -Force | Out-Null
202
- Write-Host "[linked-junction] $target -> $Source"
203
- }
195
+ Copy-Item -LiteralPath $Source -Destination $target -Recurse -Force
196
+ Write-Host "[copied] $Source -> $target"
204
197
  }
205
198
 
206
199
  function Install-Codex {
@@ -215,7 +208,7 @@ function Install-Codex {
215
208
 
216
209
  Write-Host "Installing to codex: $target"
217
210
  foreach ($src in $SkillPaths) {
218
- Link-Skill -Source $src -TargetRoot $target
211
+ Copy-Skill -Source $src -TargetRoot $target
219
212
  }
220
213
  }
221
214
 
@@ -242,7 +235,7 @@ function Install-OpenClaw {
242
235
  $skillsDir = Join-Path $workspace.FullName "skills"
243
236
  Write-Host "Installing to openclaw workspace: $skillsDir"
244
237
  foreach ($src in $SkillPaths) {
245
- Link-Skill -Source $src -TargetRoot $skillsDir
238
+ Copy-Skill -Source $src -TargetRoot $skillsDir
246
239
  }
247
240
  }
248
241
  }
@@ -259,7 +252,7 @@ function Install-Trae {
259
252
 
260
253
  Write-Host "Installing to trae: $target"
261
254
  foreach ($src in $SkillPaths) {
262
- Link-Skill -Source $src -TargetRoot $target
255
+ Copy-Skill -Source $src -TargetRoot $target
263
256
  }
264
257
  }
265
258
 
@@ -7,9 +7,9 @@ Usage:
7
7
  ./scripts/install_skills.sh [codex|openclaw|trae|all]...
8
8
 
9
9
  Modes:
10
- codex Install symlinks into ~/.codex/skills
11
- openclaw Install symlinks into ~/.openclaw/workspace*/skills
12
- trae Install symlinks into ~/.trae/skills
10
+ codex Copy skills into ~/.codex/skills
11
+ openclaw Copy skills into ~/.openclaw/workspace*/skills
12
+ trae Copy skills into ~/.trae/skills
13
13
  all Install all supported targets
14
14
 
15
15
  Optional environment overrides:
@@ -29,7 +29,7 @@ show_banner() {
29
29
  cat <<'BANNER'
30
30
  +------------------------------------------+
31
31
  | Apollo Toolkit |
32
- | npm installer and skill linker |
32
+ | npm installer and skill copier |
33
33
  +------------------------------------------+
34
34
  BANNER
35
35
  }
@@ -74,7 +74,7 @@ collect_skills() {
74
74
  fi
75
75
  }
76
76
 
77
- replace_with_symlink() {
77
+ replace_with_copy() {
78
78
  local src="$1"
79
79
  local target_root="$2"
80
80
  local name target
@@ -86,8 +86,8 @@ replace_with_symlink() {
86
86
  if [[ -e "$target" || -L "$target" ]]; then
87
87
  rm -rf "$target"
88
88
  fi
89
- ln -s "$src" "$target"
90
- echo "[linked] $target -> $src"
89
+ cp -R "$src" "$target"
90
+ echo "[copied] $src -> $target"
91
91
  }
92
92
 
93
93
  install_codex() {
@@ -96,7 +96,7 @@ install_codex() {
96
96
 
97
97
  echo "Installing to codex: $codex_skills_dir"
98
98
  for src in "${SKILL_PATHS[@]}"; do
99
- replace_with_symlink "$src" "$codex_skills_dir"
99
+ replace_with_copy "$src" "$codex_skills_dir"
100
100
  done
101
101
  }
102
102
 
@@ -120,7 +120,7 @@ install_openclaw() {
120
120
  skills_dir="$workspace/skills"
121
121
  echo "Installing to openclaw workspace: $skills_dir"
122
122
  for src in "${SKILL_PATHS[@]}"; do
123
- replace_with_symlink "$src" "$skills_dir"
123
+ replace_with_copy "$src" "$skills_dir"
124
124
  done
125
125
  done
126
126
  }
@@ -131,7 +131,7 @@ install_trae() {
131
131
 
132
132
  echo "Installing to trae: $trae_skills_dir"
133
133
  for src in "${SKILL_PATHS[@]}"; do
134
- replace_with_symlink "$src" "$trae_skills_dir"
134
+ replace_with_copy "$src" "$trae_skills_dir"
135
135
  done
136
136
  }
137
137
 
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: shadow-api-model-research
3
+ description: Investigate gated or shadow LLM APIs by capturing real client request shapes, separating request-shape gating from auth/entitlement checks, replaying verified traffic patterns, and attributing the likely underlying model with black-box fingerprinting. Use when users ask how Codex/OpenClaw/custom-provider traffic works, want a capture proxy or replay harness, need LLMMAP-style model comparison, or want a research report on which model a restricted endpoint likely wraps.
4
+ ---
5
+
6
+ # Shadow API Model Research
7
+
8
+ ## Dependencies
9
+
10
+ - Required: `answering-questions-with-research` for primary-source web verification and code-backed explanations.
11
+ - Conditional: `openclaw-configuration` when the capture path uses OpenClaw custom providers or workspace config edits; `deep-research-topics` when the user wants a formal report, especially PDF output.
12
+ - Optional: none.
13
+ - Fallback: If you cannot inspect either the real client code path or authorized live traffic, stop and report the missing evidence instead of guessing from headers or marketing copy.
14
+
15
+ ## Standards
16
+
17
+ - Evidence: Base conclusions on actual client code, captured traffic, official docs, and controlled replay results; do not infer protocol details from memory alone.
18
+ - Execution: Split the job into request-shape capture, replay validation, and model-attribution analysis; treat each as a separate hypothesis gate.
19
+ - Quality: Distinguish request-shape compatibility, auth or entitlement requirements, system-prompt wrapping, and underlying-model behavior; never collapse them into one claim.
20
+ - Output: Return the tested providers, exact capture or replay setup, prompt set or scoring rubric, observed differences, and an explicit confidence statement plus caveats.
21
+
22
+ ## Goal
23
+
24
+ Help another agent run lawful, evidence-based shadow-API research without drifting into guesswork about what a gated endpoint checks or which model it wraps.
25
+
26
+ ## Workflow
27
+
28
+ ### 1. Classify the research ask
29
+
30
+ Decide which of these the user actually needs:
31
+
32
+ - capture the true request shape from a known client
33
+ - configure OpenClaw or another client to hit a controlled endpoint
34
+ - build a replay harness from observed traffic
35
+ - compare the endpoint against known providers with black-box prompts
36
+ - package findings into a concise report
37
+
38
+ If the user is mixing all of them, still execute in that order: capture first, replay second, attribution third.
39
+
40
+ ### 2. Verify the real client path before writing any script
41
+
42
+ - Inspect the local client code and active config first.
43
+ - For OpenClaw, load the relevant official docs or local source through `answering-questions-with-research`, and use `openclaw-configuration` if you need to rewire a custom provider for capture.
44
+ - When Codex or another official client is involved, verify current behavior from primary sources and the local installed code when available.
45
+ - Do not claim that a request shape is "Codex-compatible" or "OpenClaw-compatible" until you have either:
46
+ - captured it from the client, or
47
+ - confirmed it from the current implementation and docs.
48
+
49
+ ### 3. Capture the true request shape
50
+
51
+ - Read `references/request-shape-checklist.md` before touching the network path.
52
+ - Prefer routing the real client to a capture proxy or controlled upstream you own.
53
+ - Record, at minimum:
54
+ - method
55
+ - path
56
+ - query parameters
57
+ - headers
58
+ - body schema
59
+ - streaming or SSE frame shape
60
+ - retries, timeouts, and backoff behavior
61
+ - any client-added metadata that changes between providers or models
62
+ - Treat aborted turns or partially applied config edits as tainted state; re-check the active config before trusting a capture.
63
+
64
+ ### 4. Separate request gating from auth or entitlement
65
+
66
+ - Build explicit hypotheses for what the endpoint may be checking:
67
+ - plain OpenAI-compatible schema only
68
+ - static headers or user-agent shape
69
+ - transport details such as SSE formatting
70
+ - token claims, workspace identity, or other entitlement state
71
+ - Do not tell the user that replaying the request shape is sufficient unless the replay actually works.
72
+ - If the evidence shows the endpoint still rejects cloned traffic, report that the barrier is likely beyond the visible request shape.
73
+
74
+ ### 5. Build the replay harness only from observed facts
75
+
76
+ - Read `references/fingerprinting-playbook.md` before implementing the replay phase.
77
+ - Use `.env` or equivalent env-backed config for base URLs, API keys, and provider labels.
78
+ - Mirror only the fields that were actually observed from the client.
79
+ - Keep capture and replay scripts separate unless there is a strong reason to combine them.
80
+ - Preserve the observed stream mode; do not silently downgrade SSE to non-streaming or vice versa.
81
+
82
+ ### 6. Run black-box fingerprinting
83
+
84
+ - Compare the target endpoint against one or more control providers with known or documented models.
85
+ - Use a prompt matrix that spans:
86
+ - coding or tool-use style
87
+ - factual knowledge questions with externally verified answers
88
+ - refusal and policy behavior
89
+ - instruction-following edge cases
90
+ - long-context or truncation behavior when relevant
91
+ - When building factual question sets, verify the answer key from primary sources or fresh web research instead of relying on memory.
92
+ - If the user wants LLMMAP-style comparison, keep the benchmark inputs fixed across providers and score each response on the same rubric.
93
+
94
+ ### 7. Report with confidence and caveats
95
+
96
+ - Summarize:
97
+ - what was captured
98
+ - what replayed successfully
99
+ - which differences were protocol-level versus model-level
100
+ - the most likely underlying model family
101
+ - the confidence level and why
102
+ - If system prompts or provider-side wrappers likely distort the output, say so explicitly and lower confidence accordingly.
103
+ - If the user wants a report artifact, hand off to `deep-research-topics` after the evidence has been collected.
104
+
105
+ ## References
106
+
107
+ - `references/request-shape-checklist.md` for the capture and replay evidence checklist.
108
+ - `references/fingerprinting-playbook.md` for comparison design, scoring dimensions, and report structure.
109
+
110
+ ## Guardrails
111
+
112
+ - Keep the work on systems the user is authorized to inspect or test.
113
+ - Do not present speculation about hidden auth checks as established fact.
114
+ - Do not over-index on one response; model attribution needs repeated prompts and multiple signal types.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Shadow API Model Research"
3
+ short_description: "Capture gated client traffic and attribute likely model families"
4
+ default_prompt: "Use $shadow-api-model-research when the task is to inspect Codex/OpenClaw/custom-provider request shapes, build a capture or replay workflow, compare a restricted endpoint against control providers, or estimate the likely underlying model with black-box fingerprinting."
@@ -0,0 +1,69 @@
1
+ # Fingerprinting Playbook
2
+
3
+ Use this playbook after you have trustworthy captured traffic or a validated replay harness.
4
+
5
+ ## Comparison design
6
+
7
+ - Keep prompts, temperature-like settings, and stream mode fixed across providers.
8
+ - Prefer at least one documented control provider with a known model family.
9
+ - Run multiple prompt categories; one category is not enough for attribution.
10
+
11
+ ## Recommended prompt categories
12
+
13
+ ### 1. Factual knowledge
14
+
15
+ - Use questions with fresh, externally verifiable answers.
16
+ - Build the answer key from current primary sources or credible web verification.
17
+ - Score for correctness, completeness, and unsupported claims.
18
+
19
+ ### 2. Coding style
20
+
21
+ - Use short implementation tasks and bug-fix prompts.
22
+ - Compare code structure, caution level, and explanation style.
23
+
24
+ ### 3. Instruction following
25
+
26
+ - Use prompts with explicit formatting or ranking constraints.
27
+ - Compare compliance, stability, and unnecessary extra content.
28
+
29
+ ### 4. Refusal and policy behavior
30
+
31
+ - Use borderline prompts that should trigger a recognizable refusal or safe alternative.
32
+ - Compare refusal style, redirect wording, and partial compliance behavior.
33
+
34
+ ### 5. Long-context behavior
35
+
36
+ - Only run this when the target is expected to support larger contexts.
37
+ - Compare truncation, summarization drift, and consistency across later references.
38
+
39
+ ## Scoring dimensions
40
+
41
+ Score each response on a fixed rubric, for example:
42
+
43
+ - factual accuracy
44
+ - completeness
45
+ - instruction compliance
46
+ - reasoning clarity
47
+ - code quality
48
+ - refusal consistency
49
+ - verbosity control
50
+ - latency or throughput when that matters
51
+
52
+ Use the same rubric for every provider and every prompt.
53
+
54
+ ## Confidence discipline
55
+
56
+ - High confidence needs multiple converging signals across categories.
57
+ - Medium confidence fits cases where the target tracks one family strongly but wrappers may distort style.
58
+ - Low confidence fits cases where the protocol was captured but output signals remain mixed.
59
+
60
+ ## Suggested report structure
61
+
62
+ 1. Research objective
63
+ 2. Capture setup
64
+ 3. Replay validation status
65
+ 4. Prompt matrix and controls
66
+ 5. Scoring rubric
67
+ 6. Comparative findings
68
+ 7. Most likely model family
69
+ 8. Caveats, including wrappers and system prompts
@@ -0,0 +1,44 @@
1
+ # Request Shape Checklist
2
+
3
+ Use this checklist before claiming you understand how a gated endpoint is called.
4
+
5
+ ## 1. Capture setup
6
+
7
+ - Confirm which client will generate the traffic.
8
+ - Confirm the exact provider or model config that client is using.
9
+ - Route the client to a capture proxy, reverse proxy, or controlled upstream you can inspect.
10
+ - Freeze other moving parts when possible: same model, same prompt, same stream mode, same tool settings.
11
+
12
+ ## 2. What to record
13
+
14
+ - HTTP method
15
+ - URL path
16
+ - query string
17
+ - request headers
18
+ - body payload shape
19
+ - stream or SSE response framing
20
+ - request or response ids
21
+ - retries, reconnects, timeout handling, rebroadcast logic
22
+ - any provider-specific or model-specific metadata fields
23
+
24
+ ## 3. Environment and config evidence
25
+
26
+ - Save the effective client config that produced the capture.
27
+ - Save the exact env vars used for base URL, API key, and provider selection.
28
+ - When OpenClaw is involved, note the relevant `openclaw.json` keys and whether validation passed.
29
+
30
+ ## 4. Replay readiness gate
31
+
32
+ Do not write the replay script until you can answer all of these:
33
+
34
+ - Which fields are constant across repeated requests?
35
+ - Which fields change per request?
36
+ - Which fields come from auth or session state?
37
+ - Is the target using streaming?
38
+ - Is the target expecting OpenAI-compatible JSON or a client-specific variant?
39
+
40
+ ## 5. Replay result interpretation
41
+
42
+ - Success with cloned shape does not prove the model identity.
43
+ - Failure with cloned shape does not prove the headers are wrong; it may indicate entitlement or hidden session checks.
44
+ - If only some requests replay, compare stream mode, auth tokens, and subtle metadata differences before drawing conclusions.
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Lai Tsz Kin
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 tszkinlai
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Lai Tsz Kin
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,18 +1,21 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Yamiyorunoshura
3
+ Copyright (c) 2026 LaiTszKin
4
4
 
5
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
6
- associated documentation files (the "Software"), to deal in the Software without restriction, including
7
- without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
9
- following conditions:
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
10
11
 
11
- The above copyright notice and this permission notice shall be included in all copies or substantial
12
- portions of the Software.
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
13
14
 
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
15
- LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
16
- EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
- IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
18
- USE OR OTHER DEALINGS IN THE SOFTWARE.
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.