Embed claude-sub-proxy as Internal Service

VerifiedSafe

Embed claude-sub-proxy as an internal service within another project with minimal footprint (4 JS files + config, no external exposure). It adds Claude API access to an existing app without a separate server, running on localhost. Useful for integrating Claude into a larger application securely.

Sby Skills Guide Bot
DevelopmentIntermediate
506/2/2026
Claude Code
#embedded-proxy#claude-integration#internal-service#localhost

Recommended for

Our review

This skill embeds claude-sub-proxy as an internal service within an existing project, running on localhost with no external exposure.

Strengths

  • Minimal footprint: only 4 JS files plus configuration
  • Secure by default: listens only on localhost
  • Multiple integration options (copy, submodule, programmatic start)
  • No extra proxy API key needed for internal communication

Limitations

  • Text-only mode by default (no image or tool support)
  • Requires Claude Code CLI to be authenticated
  • Manual background process management
When to use it

When you need to add Claude API access inside a larger application without deploying a separate server or exposing an external endpoint.

When not to use it

If you need multimodal features (images), a public-facing proxy with API key, or prefer a standalone server solution.

Security analysis

Safe
Quality score90/100

The skill provides a setup guide for embedding a local proxy. It only instructs reading local credentials, copying files, installing npm packages, and starting a local server. No destructive commands, external exfiltration, or obfuscated payloads.

No concerns found

Examples

Embed proxy in existing project
Embed claude-sub-proxy as an internal service in my project so I can call Claude API without a separate server.
Integrate claude-sub-proxy
Integrate claude-sub-proxy into my existing app as a library/internal service running on localhost.
Add Claude API without external server
I want to add Claude API access to my Node.js application without setting up a separate proxy server. Can you embed claude-sub-proxy into my project?

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 modetools: [] 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
Related skills