setup-embedded
// Embed claude-sub-proxy as an internal service within another project. Minimal footprint — 4 JS files + config, running on localhost with no external exposure.
Skill: setup-embedded
Description
Embed claude-sub-proxy as an internal service within another project. Minimal footprint — 4 JS files + config, running on localhost with no external exposure.
Trigger
Trigger this skill when the user wants to:
- Embed the proxy inside another project
- Use claude-sub-proxy as a library/internal service
- Add Claude API access to an existing app without a separate server
- "Integrate claude-sub-proxy into my project"
Setup Guide
Step 1: Verify Claude Code CLI
Check that credentials exist:
cat ~/.claude/.credentials.json
# Should contain claudeAiOauth.accessToken
If not authenticated, run claude to log in.
Step 2: Choose Integration Method
Option A — Copy source files (recommended):
# From the claude-sub-proxy repo, copy these files into your project:
mkdir -p your-project/claude-proxy
cp src/server.js src/claude-executor.js src/format-bridge.js src/logger.js src/config.txt your-project/claude-proxy/
Option B — Git submodule:
git submodule add <repo-url> claude-proxy
Step 3: Install Dependency
npm install @anthropic-ai/claude-agent-sdk
Step 4: Configure via Environment Variables
For embedded use, set these environment variables in your app's startup:
| Variable | Recommended Value | Description |
|---|---|---|
CSP_PORT | 42069 (or any free port) | Proxy listening port |
CSP_HOST | 127.0.0.1 | Localhost only — no external exposure |
CSP_LOG_LEVEL | WARN | Quiet logging for embedded use |
No CSP_PROXY_API_KEY needed — the proxy runs on localhost as an internal service.
Step 5: Start the Proxy
Option A — Background process in your start script:
// package.json
{
"scripts": {
"start": "concurrently \"node claude-proxy/server.js\" \"your-app-start-command\""
}
}
npm install concurrently --save-dev
Option B — Programmatic start:
import { startServer } from './claude-proxy/server.js';
startServer();
Option C — PM2:
pm2 start claude-proxy/server.js --name claude-proxy
Step 6: Connect from Your App
Node.js:
const response = await fetch('http://127.0.0.1:42069/v1/messages', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
model: 'claude-sonnet-4-6',
max_tokens: 1024,
messages: [{ role: 'user', content: 'Hello!' }]
})
});
const data = await response.json();
Python:
import anthropic
client = anthropic.Anthropic(
base_url="http://127.0.0.1:42069",
api_key="not-needed"
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello!"}]
)
curl:
curl -X POST http://127.0.0.1:42069/v1/messages \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-4-6","max_tokens":256,"messages":[{"role":"user","content":"Hello"}]}'
Step 7: Verify
# Health check
curl -s http://127.0.0.1:42069/health
# → {"status":"ok","server":"claude-sub-proxy","timestamp":...}
# Auth check
curl -s http://127.0.0.1:42069/auth/status
# → {"authenticated":true,"source":"claude_credentials","expires_at":"..."}
Key Points
- Localhost only — default
CSP_HOST=127.0.0.1, no external exposure - Text-only mode —
tools: []by default, pure API proxy - No proxy_api_key needed — inter-process communication on localhost is trusted
- Minimal footprint — 4 JS files + 1 config file + 1 npm dependency