Skip to content

feat(outbound): A2A server + Vercel deploy for Bio marketplace - #467

Open
bioanywhere wants to merge 1 commit into
gethouston:mainfrom
bioanywhere:feat/outbound-a2a-server
Open

feat(outbound): A2A server + Vercel deploy for Bio marketplace#467
bioanywhere wants to merge 1 commit into
gethouston:mainfrom
bioanywhere:feat/outbound-a2a-server

Conversation

@bioanywhere

Copy link
Copy Markdown

What this adds

A complete local-tunnel architecture so the Outbound agent can accept calls from the Bio marketplace and any A2A-compatible caller — while still running on the user's machine with full access to their locally configured Composio integrations (Apify, Airtable, Apollo, Instantly).

New files

store/agents/outbound/server/

File Purpose
index.js Express server + full Claude agent loop. Exposes bash, read_file, write_file tools so Claude can follow SKILL.md procedures and call Composio CLI exactly as it does interactively in Houston.
launch.ps1 One-click launcher: kills port 3001, starts the server, starts a Cloudflare Tunnel, waits for the trycloudflare.com URL, then updates the Vercel env var and redeploys — all automatically.
start.bat Double-click entry point for Windows (calls launch.ps1).
update-tunnel.js Updates LOCAL_AGENT_URL on the Vercel project and triggers a redeploy each time the tunnel URL changes.
package.json Dependencies: express, @anthropic-ai/sdk.
README.md Full architecture docs, setup guide, A2A protocol reference, troubleshooting.

store/agents/outbound/deploy/

File Purpose
api/index.js Vercel serverless forwarder — reads LOCAL_AGENT_URL env var, proxies the A2A POST to the local server. Returns a 503 with a clear message if the tunnel is down.
.well-known/agent-card.json A2A-spec agent card. Bio reads this for health checks and skill discovery.
index.html Human-readable landing page at the root URL.
vercel.json CORS headers + Vercel project config.

Architecture

Bio marketplace / external caller
        │  HTTPS POST (A2A JSON-RPC)
        ▼
Vercel  outbound-agent-iota.vercel.app/api   ← stable public URL
        │  HTTP forward  (LOCAL_AGENT_URL env var)
        ▼
Cloudflare Tunnel  *.trycloudflare.com       ← free, no account needed
        │  localhost:3001
        ▼
Express server  (this folder)
        │  reads CLAUDE.md → Claude agent loop → tool_use
        ▼
Anthropic API  →  bash / Composio CLI / workspace files

Why local tunnel instead of a cloud server

The LinkedIn outreach pipeline takes 30–60 minutes — well beyond Vercel's 300s function timeout. A cloud server would also require re-configuring all Composio integrations server-side. The tunnel approach keeps the agent running on the user's machine with zero credential duplication.

Tested on

  • Windows 11, Node 20, Vercel CLI 54.6.x, cloudflared 2026.5.2
  • Full end-to-end: Bio → Vercel → tunnel → local server → Anthropic API → response ✓
  • Bio marketplace health check: ok

Also synced

Latest CLAUDE.md and all 8 SKILL.md files from the Workshop Bogotá session where this was developed and tested.

Adds a complete local-tunnel architecture so the Outbound agent
is reachable from the Bio marketplace (and any A2A-compatible caller)
while running on the user's machine with full access to local
Composio integrations.

What's new
----------
store/agents/outbound/server/
  index.js        — Express server + Claude agent loop (bash/read/write tools)
  launch.ps1      — One-click launcher: kills port, starts server, starts
                    Cloudflare Tunnel, captures URL, updates Vercel, redeploys
  start.bat       — Double-click entry point (calls launch.ps1)
  update-tunnel.js — Updates LOCAL_AGENT_URL env var on Vercel and redeploys
  package.json    — express, @anthropic-ai/sdk
  README.md       — Full architecture docs, setup guide, troubleshooting

store/agents/outbound/deploy/
  api/index.js    — Vercel serverless forwarder (reads LOCAL_AGENT_URL, proxies)
  .well-known/agent-card.json — A2A-spec agent card for Bio health checks
  index.html      — Human-readable landing page
  vercel.json     — CORS headers + project config

Also syncs latest CLAUDE.md and all 8 SKILL.md files from the
Workshop Bogotá run where this was developed and tested end-to-end.

Architecture
------------
Bio → Vercel (stable URL) → Cloudflare Tunnel → localhost:3001
→ Claude agent loop → Composio CLI → Apify / Airtable / Apollo / Instantly

The tunnel URL changes on each restart; launch.ps1 updates Vercel
automatically so Bio always has a valid endpoint.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant