Nanoclaw use-native-credential-proxy
Replace OneCLI gateway with the built-in credential proxy. For users who want simple .env-based credential management without installing OneCLI. Reads API key or OAuth token from .env and injects into container API requests.
git clone https://github.com/qwibitai/nanoclaw
T=$(mktemp -d) && git clone --depth=1 https://github.com/qwibitai/nanoclaw "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/use-native-credential-proxy" ~/.claude/skills/qwibitai-nanoclaw-use-native-credential-proxy && rm -rf "$T"
.claude/skills/use-native-credential-proxy/SKILL.mdUse Native Credential Proxy
This skill replaces the OneCLI gateway with NanoClaw's built-in credential proxy. Containers get credentials injected via a local HTTP proxy that reads from
.env — no external services needed.
Phase 1: Pre-flight
Check if already applied
Check if
src/credential-proxy.ts is imported in src/index.ts:
grep "credential-proxy" src/index.ts
If it shows an import for
startCredentialProxy, the native proxy is already active. Skip to Phase 3 (Setup).
Check if OneCLI is active
grep "@onecli-sh/sdk" package.json
If
@onecli-sh/sdk appears, OneCLI is the active credential provider. Proceed with Phase 2 to replace it.
If neither check matches, you may be on an older version. Run
/update-nanoclaw first, then retry.
Phase 2: Apply Code Changes
Ensure upstream remote
git remote -v
If
upstream is missing, add it:
git remote add upstream https://github.com/qwibitai/nanoclaw.git
Merge the skill branch
git fetch upstream skill/native-credential-proxy git merge upstream/skill/native-credential-proxy || { git checkout --theirs package-lock.json git add package-lock.json git merge --continue }
This merges in:
andsrc/credential-proxy.ts
(the proxy implementation)src/credential-proxy.test.ts- Restored credential proxy usage in
,src/index.ts
,src/container-runner.ts
,src/container-runtime.tssrc/config.ts - Removed
dependency@onecli-sh/sdk - Restored
config (default 3001)CREDENTIAL_PROXY_PORT - Restored platform-aware proxy bind address detection
- Reverted setup skill to
-based credential instructions.env
If the merge reports conflicts beyond
package-lock.json, resolve them by reading the conflicted files and understanding the intent of both sides.
Update main group CLAUDE.md
Replace the OneCLI auth reference with the native proxy:
In
groups/main/CLAUDE.md, replace:
OneCLI manages credentials (including Anthropic auth) — run
.onecli --help
with:
The native credential proxy manages credentials (including Anthropic auth) via
— see.env.src/credential-proxy.ts
Validate code changes
npm install npm run build npx vitest run src/credential-proxy.test.ts src/container-runner.test.ts
All tests must pass and build must be clean before proceeding.
Phase 3: Setup Credentials
AskUserQuestion: Do you want to use your Claude subscription (Pro/Max) or an Anthropic API key?
- Claude subscription (Pro/Max) — description: "Uses your existing Claude Pro or Max subscription. You'll run
in another terminal to get your token."claude setup-token - Anthropic API key — description: "Pay-per-use API key from console.anthropic.com."
Subscription path
Tell the user to run
claude setup-token in another terminal and copy the token it outputs. Do NOT collect the token in chat.
Once they have the token, add it to
.env:
# Add to .env (create file if needed) echo 'CLAUDE_CODE_OAUTH_TOKEN=<token>' >> .env
Note:
ANTHROPIC_AUTH_TOKEN is also supported as a fallback.
API key path
Tell the user to get an API key from https://console.anthropic.com/settings/keys if they don't have one.
Add it to
.env:
echo 'ANTHROPIC_API_KEY=<key>' >> .env
After either path
If the user's response happens to contain a token or key (starts with
sk-ant- or looks like a token): write it to .env on their behalf using the appropriate variable name.
Optional: If the user needs a custom API endpoint, they can add
ANTHROPIC_BASE_URL=<url> to .env (defaults to https://api.anthropic.com).
Phase 4: Verify
- Rebuild and restart:
npm run build
Then restart the service:
- macOS:
launchctl kickstart -k gui/$(id -u)/com.nanoclaw - Linux:
systemctl --user restart nanoclaw - WSL/manual: stop and re-run
bash start-nanoclaw.sh
- Check logs for successful proxy startup:
tail -20 logs/nanoclaw.log | grep "Credential proxy"
Expected:
Credential proxy started with port and auth mode.
-
Send a test message in the registered chat to verify the agent responds.
-
Note: after applying this skill, the OneCLI credential steps in
no longer apply./setup
is now the credential source..env
Troubleshooting
"Credential proxy upstream error" in logs: Check that
.env has a valid ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN. Verify the API is reachable: curl -s https://api.anthropic.com/v1/messages -H "x-api-key: test" | head.
Port 3001 already in use: Set
CREDENTIAL_PROXY_PORT=<other port> in .env or as an environment variable.
Container can't reach proxy (Linux): The proxy binds to the
docker0 bridge IP by default. If that interface doesn't exist (e.g. rootless Docker), set CREDENTIAL_PROXY_HOST=0.0.0.0 as an environment variable.
OAuth token expired (401 errors): Re-run
claude setup-token in a terminal and update the token in .env.
Removal
To revert to OneCLI gateway:
- Find the merge commit:
git log --oneline --merges -5 - Revert it:
(undoes the skill branch merge, keeps your other changes)git revert <merge-commit> -m 1
(re-addsnpm install
)@onecli-sh/sdknpm run build- Follow
step 4 to configure OneCLI credentials/setup - Remove
/ANTHROPIC_API_KEY
fromCLAUDE_CODE_OAUTH_TOKEN.env