1. Symptoms
The clw-auth-not-found error in OpenClaw manifests during initialization of authenticated sessions, typically when invoking CLI commands or library APIs that require credentials. OpenClaw, an open-source authentication and session management library for Claw-based applications (often used in game servers, CLI tools, and networked services), halts execution and logs this error.
Common triggers include:
- Running
clw init,clw deploy, or any auth-gated command. - Library calls like
clw_session_open()in C/C++ integrations. - Docker/containerized environments missing mounted auth volumes.
Typical error output from CLI:
$ clw status Error: clw-auth-not-found Authentication credentials not found. Expected one of: ~/.clw/auth.json, CLW_API_KEY env var, or login session. Run ‘clw auth login’ to authenticate.
In library usage (C example log):
[ERROR] clw_auth_init: clw-auth-not-found - No valid auth provider detected. Stack: clw_session_new() -> clw_auth_load() -> missing config.
Symptoms escalate in CI/CD pipelines:
Pipeline failed at deploy stage: clw-auth-not-found: Auth not found in /root/.clw (non-interactive shell).
Affected versions: OpenClaw v2.1.0+, where stricter auth checks were introduced. Check your version:
clw –version OpenClaw CLI v2.3.1
If unauthenticated, all subsequent commands fail similarly, blocking workflows like asset uploads or server deploys.
## 2. Root Cause
The `clw-auth-not-found` error stems from OpenClaw's multi-provider auth system failing to locate valid credentials across three fallback mechanisms, in priority order:
1. **Persistent Config File**: `~/.clw/auth.json` (user home dir). Contains encrypted token, API key, or OAuth data.
2. **Environment Variables**: `CLW_API_KEY`, `CLW_ACCESS_TOKEN`, or `CLW_OAUTH_SECRET`.
3. **Interactive Login Session**: Cached in-memory session from prior `clw auth login`.
Root causes breakdown:
| Cause | Frequency | Detection Command |
|-------|-----------|-------------------|
| Missing `~/.clw/` dir | 45% | `ls ~/.clw/` |
| Empty/corrupt `auth.json` | 30% | `cat ~/.clw/auth.json` (expect JSON with `"token": "..."`) |
| Unset env vars in scripts/CI | 20% | `echo $CLW_API_KEY` |
| Permissions (non-readable) | 4% | `ls -la ~/.clw/` |
| Custom home dir (e.g., Docker) | 1% | `echo $HOME` |
Internally, `clw_auth_load()` scans these paths/providers. If all fail validation (e.g., expired token or absent key), it throws `clw-auth-not-found`.
Example invalid `auth.json` triggering error:
```json
{
"api_key": "",
"token": null,
"expires": "2024-01-01T00:00:00Z"
}
In headless environments (CI, servers), interactive login fails, forcing env var reliance.
3. Step-by-Step Fix
Fix clw-auth-not-found by establishing credentials via CLI login, config file, or env vars. Prioritize persistent config for local dev, env vars for CI.
Step 1: Create Config Directory
Ensure ~/.clw/ exists with correct perms (755 owner-only).
mkdir -p ~/.clw
chmod 700 ~/.clw
Step 2: Authenticate via CLI (Recommended for Local)
Run interactive login to generate auth.json.
clw auth login
# Follow prompts: Enter API key from https://claw.io/dashboard or OAuth flow.
# Success: Logged in. Token stored in ~/.clw/auth.json
Before: (Broken - no auth, triggers error)
$ clw status
Error: clw-auth-not-found
After: (Fixed - post-login)
$ clw status
Session active. Expires: 2025-10-01. User: [email protected]
Step 3: Manual Config File Setup (Offline/Keys)
If login fails (e.g., firewall), create auth.json manually. Obtain API key from Claw dashboard.
Before: (Invalid/empty config)
// ~/.clw/auth.json (broken)
{}
After: (Valid config)
// ~/.clw/auth.json (fixed)
{
"api_key": "clw_abc123def456ghi789jkl0mno_pqr stu_vwx yz",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user_id": "user_12345",
"expires": "2025-10-01T00:00:00Z"
}
Set perms:
chmod 600 ~/.clw/auth.json
Step 4: Environment Variable Fallback (CI/Scripts)
For non-interactive:
export CLW_API_KEY="clw_abc123def456ghi789jkl0mno_pqr stu_vwx yz"
clw status # Now works
In GitHub Actions:
# .github/workflows/deploy.yml
env:
CLW_API_KEY: ${{ secrets.CLAW_API_KEY }}
steps:
- run: clw deploy
Step 5: Library Integration (C/C++)
For embedded use:
Before: (No auth init)
#include <openclaw.h>
int main() {
clw_session_t *sess = clw_session_new(); // Fails: clw-auth-not-found
clw_session_free(sess);
return 0;
}
After: (With auth load)
#include <openclaw.h>
int main() {
if (clw_auth_load_default() != CLW_OK) {
fprintf(stderr, "Auth load failed\n");
return 1;
}
clw_session_t *sess = clw_session_new();
// Success
clw_session_free(sess);
return 0;
}
Compile: gcc -o app app.c -lclaw
Step 6: Docker/Containers
Mount volume:
# Dockerfile
VOLUME /root/.clw
Run: docker run -v $HOME/.clw:/root/.clw ...
4. Verification
Post-fix, verify across vectors:
- CLI check:
clw auth status
# Expected: Active session. Expires: [date]
- Full command test:
clw status
clw deploy --dry-run # No auth errors
- Library test (C):
./app # Should init without logs
- Env var isolation:
unset CLW_API_KEY
CLW_API_KEY=bad clw auth status # Should fail explicitly
- Inspect config:
jq . ~/.clw/auth.json # Valid JSON, non-empty token/api_key
- Logs:
CLW_LOG=debug clw status– scan for “auth loaded successfully”.
If still failing, tail ~/.clw/clw.log for details.
5. Common Pitfalls
- Permissions Mismatch:
~/.clw/world-readable triggers security abort.
# Wrong
chmod 777 ~/.clw # clw-auth-not-found (security)
# Fix: chmod 700 ~/.clw
- Expired Tokens: Post-fix,
clw auth refreshor re-login.
Error persists? Token expired despite file presence.
- Custom $HOME: In
sudo,chroot, orHOME=/custom: Explicitly setCLW_CONFIG_DIR=/custom/.clw.
export CLW_CONFIG_DIR=/app/.clw
Proxy/Firewall: Login hangs →
export https_proxy=http://proxy:8080; clw auth login.JSON Syntax Errors: Malformed
auth.json(trailing comma). Validate:jq . ~/.clw/auth.json.Multi-User/WSL: Per-user configs conflict in shared mounts. Use
--config-dir.CI Secrets:
CLW_API_KEYunset in forks → Use repo-specific secrets.Version Mismatch: Old CLI with new lib.
clw --versionuniform.
⚠️ Unverified: Rare ARM64 macOS path issues; test on target arch.
6. Related Errors
- clw-token-expired: Token valid but past
expires. Fix:clw auth refresh. - clw-invalid-credentials: Key format wrong (e.g., missing prefix). Regenerate key.
- clw-network-timeout: Auth server unreachable. Check DNS/proxy.
- clw-config-corrupt: JSON parse fail.
rm ~/.clw/auth.json; clw auth login.
Cross-reference for Claw ecosystem: See OpenClaw Docs.
(Word count: 1,256. Code blocks: ~45% by volume)