Skip to content

link2004/openwzdm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

openwzdm

Your private Claude Code agent, shipped as a product.

Status License

Warning

This project is in early alpha. It is not production-ready and APIs may change without notice. Star the repo and watch for updates — contributions and feedback are welcome.

Why

Powerful AI agent environments like Claude Code already exist. But they are private — locked inside individual engineers' terminals.

openwzdm changes that. It lets you take the agents you build on Claude Code and ship them as simple apps that anyone can use — no backend coding, no infrastructure setup.

An engineer builds an agent. Drag & drop to upload. Instantly becomes an app. Optionally monetize it.

This is not a concept. We already generated revenue from a Remotion video generation agent built on this platform.

Vision

  • From private to public — Turn your personal Claude Code agent into a product others can use
  • Zero backend code — Agents are defined by directory structure alone (CLAUDE.md + .claude/skills/)
  • Minimize implementation — Built entirely on existing OSS. We don't build what already exists
  • Multi-channel — Web UI and Telegram adapter included, extensible to Slack, Discord, LINE, etc.
  • Instant deployment — Docker image ready for Railway, Fly.io, or any container host

Quick Links

Getting Started · Architecture · Deployment · Telegram Adapter · API Reference · Contributing

Architecture

┌──────────┐
│  Web UI  │──┐
└──────────┘  │
              │  WebSocket
┌──────────┐  │    ┌─────────────────┐    ┌──────────────────┐
│ Telegram │──┼───>│  bridge/        │───>│ @ccpocket/bridge │──> Claude Code CLI
│ Adapter  │  │    │  server.mjs     │    │ (npm, as-is)     │    ├── CLAUDE.md
└──────────┘  │    │  (HTTP + WS     │    └──────────────────┘    └── .claude/skills/
              │    │   proxy)         │
┌──────────┐  │    └─────────────────┘
│  Future  │──┘
│ Adapters │
└──────────┘

Design Principles

  1. Minimize implementation — Maximize use of existing OSS and tools
  2. Use ccpocket bridge as-is — No forks, no wrappers
  3. Switch agents via projectPath — Add agents by directory placement alone

Getting Started

Prerequisites

Quick Start

# Clone the repo
git clone https://github.com/your-org/openwzdm.git
cd openwzdm

# Start the bridge server
cd bridge
npm install
ANTHROPIC_API_KEY=sk-... node server.mjs

# In another terminal, start the web UI
cd web
npm install
npm run dev

The bridge server runs on http://localhost:8080 (REST + WebSocket). The web UI runs on http://localhost:5173.

Create Your First Agent

  1. Create a directory with your agent definition:
my-agent/
├── CLAUDE.md           # Agent personality & instructions
└── .claude/
    └── skills/
        └── my-skill.md # Your Claude Code skill
  1. Zip it and upload:
zip -r my-agent.zip my-agent/
curl -X POST http://localhost:8080/agents/my-agent \
  --data-binary @my-agent.zip
  1. Open the web UI and start chatting with your agent.

Agent Directory Structure

bridge/agents/
├── {name}/
│   ├── CLAUDE.md              # Agent personality & instructions
│   ├── .claude/
│   │   └── skills/            # Claude Code skills (.md files)
│   │       ├── skill-a.md
│   │       └── file-share.md  # Common skill (auto-injected)
│   └── [generated files]      # Output from agent executions
└── common/
    ├── BASE_CLAUDE.md         # Base instructions prepended to all agents
    └── .claude/
        └── skills/            # Shared skills injected into all agents

Deployment

Docker (Recommended)

cd bridge
docker build -t openwzdm-bridge .
docker run -p 8080:8080 \
  -e ANTHROPIC_API_KEY=sk-... \
  -v $(pwd)/agents:/app/agents \
  openwzdm-bridge

Railway

  1. Connect your repo to Railway
  2. Set ANTHROPIC_API_KEY in environment variables
  3. Set root directory to bridge/
  4. Deploy — Railway auto-detects the Dockerfile

Fly.io

cd bridge
fly launch
fly secrets set ANTHROPIC_API_KEY=sk-...
fly deploy

Environment Variables

Variable Required Default Description
ANTHROPIC_API_KEY Yes Claude API key
PORT No 8080 Server port
BRIDGE_PORT No 18765 Internal bridge port
BRIDGE_HOST No 127.0.0.1 Bridge host
SERVICE_DIR No ../service/common Path to service overlay directory

Service Overlay

The OSS core ships with generic agent defaults. To add commercial features (payment, custom skills), copy the included template:

cp -r examples/service service

This enables the payment flow (stripe-tip) for all agents. See examples/service/README.md for details.

openwzdm/
├── examples/service/    # Template (tracked in git)
├── service/             # Your config (gitignored, copied from examples/)
│   └── common/
│       ├── BASE_CLAUDE.md       # Extra instructions (e.g., payment flow)
│       └── .claude/skills/      # Service-specific skills (e.g., stripe-tip)
└── ...
  • service/ is in .gitignore — customize freely without affecting the OSS repo
  • On agent upload, the bridge automatically layers: OSS common/service/common/ → agent-specific
  • Set SERVICE_DIR env var to override the service directory path

Telegram Adapter

Connect your agents to Telegram with the included adapter.

Setup

cd adapters/telegram
npm install

Run

TELEGRAM_BOT_TOKEN=your-token \
BRIDGE_URL=ws://localhost:8080 \
AGENT_NAME=my-agent \
node index.mjs

Environment Variables

Variable Required Default Description
TELEGRAM_BOT_TOKEN Yes Telegram Bot API token from @BotFather
BRIDGE_URL No ws://localhost:8080 Bridge WebSocket URL
AGENT_NAME No default Agent to connect to
PROJECT_PATH No /app/agents/{AGENT_NAME} Override agent path

Features

  • AskUserQuestion support — Inline keyboard buttons for option selection
  • Streaming — Real-time response updates via message editing
  • Auto-connect — Session created on first message or /start

API Reference

REST API

Method Endpoint Description
GET /health Health check
GET /agents List all agents
POST /agents/:name Upload agent (ZIP body)
DELETE /agents/:name Delete agent
POST /agents/:name/reinject Re-inject common skills
GET /agents/:name/files/:path Download generated files

WebSocket Protocol

Connect to ws://localhost:8080 (same port as HTTP).

Client → Server:

Type Description
start Start new session (projectPath, permissionMode)
input Send user message (text, sessionId)
approve Approve tool execution (toolUseId, sessionId)
reject Reject tool execution (toolUseId, sessionId)
stop_session Stop session (sessionId)

Server → Client:

Type Description
system Session created (contains sessionId)
status Status change (starting, idle, running, etc.)
stream_delta Streaming text chunk
thinking_delta Streaming thinking chunk
assistant Complete assistant message
tool_result Tool execution result
permission_request Permission or AskUserQuestion request
result Turn complete (cost, duration)
error Error message

Project Structure

openwzdm/
├── bridge/              # Server (Node.js + @ccpocket/bridge proxy)
│   ├── server.mjs       # HTTP + WebSocket server
│   ├── Dockerfile       # Container image
│   ├── common/          # OSS default skills & base instructions
│   └── agents/          # Agent directories (runtime)
├── web/                 # Frontend (React + Vite + Tailwind)
│   └── src/
│       ├── pages/       # Chat, Landing, AgentDetail pages
│       └── components/  # UI components
├── adapters/
│   └── telegram/        # Telegram bot adapter
│       └── index.mjs
└── service/             # Service-specific config (gitignored)
    └── common/          # Payment flow, commercial skills, etc.

Contributing

  1. Fork the repo
  2. Create a feature branch
  3. Make your changes
  4. Submit a PR

Rules

  • All code, comments, and docs must be in English
  • Minimize custom implementation — use existing OSS where possible
  • Keep PRs focused and small

License

MIT

About

Turn your Claude Code Skills into a marketable app for everyone.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors