Best use case
Skill: setup-embedded is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
## Description
Teams using Skill: setup-embedded should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
$curl -o ~/.claude/skills/setup-embedded/SKILL.md --create-dirs "https://raw.githubusercontent.com/Ring8688/claude-sub-proxy/main/.claude/skills/setup-embedded/SKILL.md"
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/setup-embedded/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How Skill: setup-embedded Compares
| Feature / Agent | Skill: setup-embedded | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
## Description
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 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:
```bash
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):**
```bash
# 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:**
```bash
git submodule add <repo-url> claude-proxy
```
### Step 3: Install Dependency
```bash
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:**
```json
// package.json
{
"scripts": {
"start": "concurrently \"node claude-proxy/server.js\" \"your-app-start-command\""
}
}
```
```bash
npm install concurrently --save-dev
```
**Option B — Programmatic start:**
```js
import { startServer } from './claude-proxy/server.js';
startServer();
```
**Option C — PM2:**
```bash
pm2 start claude-proxy/server.js --name claude-proxy
```
### Step 6: Connect from Your App
**Node.js:**
```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:**
```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:**
```bash
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
```bash
# 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 dependencyRelated Skills
We are still matching the closest adjacent skills for this page. In the meantime, continue through the full directory.