gitwtfhub

huangdihd/call_me_as_agent

50VueAudience · developerComplexity · 2/5ActiveLicenseSetup · easy

TL;DR

A fake LLM server that exposes OpenAI and Claude APIs but routes each request to an admin dashboard where a human types the streaming reply.

Mindmap

mindmap
  root((call-me-as-agent))
    Inputs
      Client API call
      Tool definitions
      Embedded images
    Outputs
      Streamed SSE
      Tool call JSON
      Typewriter text
    Use Cases
      Roleplay as AI
      Manual eval bench
      Demo without API key
    Tech Stack
      Nuxt
      Vue
      TypeScript
      Tailwind
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Why anyone would actually build this

REASON 1

Be the human behind an OpenCode or Cursor session and type replies that the client thinks came from an LLM.

REASON 2

Stand in for an LLM in user testing so you can study how an agent tool reacts to specific answers.

REASON 3

Manually answer tool-call requests by filling out a form-rendered JSON schema.

REASON 4

Run a classroom demo of an AI coding agent without paying for API calls.

Stack

NuxtVueTypeScriptTailwindNode

Spinning it up

Difficulty · easy Time to first run · 30min

Needs Node and an ADMIN_PASSWORD env var, and the client must accept a custom base URL.

MIT lets you use, modify, and ship this for any purpose, commercial or not, as long as you keep the copyright notice.

Wtf does this do

Call Me As Agent is an open-source server that turns a human into a stand-in for an LLM API. You point a tool like OpenCode (or any client that talks the OpenAI or Anthropic Claude API) at this server's URL instead of the real provider, and every request the client makes ends up in an admin dashboard where a human can read it, type a reply, and stream the response back. The README presents it as a way to be the LLM for someone else's tooling. The server speaks both OpenAI and Claude wire formats. It supports OpenAI's chat.completions endpoint, OpenAI's newer v1/responses endpoint, and Claude's messages endpoint, with streaming (SSE) enabled so the client sees the reply arrive incrementally. There is a built-in typewriter mode that simulates a real AI response, with adjustable global speed plus a one-off toggle, and a keep-alive feature that sends periodic SSE comment packets while you are typing so reverse proxies and browsers do not time the connection out. A few practical features make it work for real client tools. The admin UI renders embedded images from the conversation history (both Base64 and URL forms, including OpenAI's input_image structure) so you can see what the client sent. When a request includes tool definitions, the server parses them into a recursive form UI on the admin side, with validation for nested JSON, numbers, and booleans, so you can return a structured tool call by filling in a form. There is also a fair amount of customization around the public-facing front page. The whole site can switch between Chinese and English, the title, subtitle, brand color (17 choices), and logo can be set, and the admin can hide or show the public request counters and authentication hints. Security covers password login for the admin area, optional OTP two-factor, configurable IP detection headers like CF-Connecting-IP for rate-limit logic behind a reverse proxy, and optional API-key checking for the LLM endpoints. To run it, you clone the repo, run npm install, put an ADMIN_PASSWORD into a .env file, and run npm run dev to start the server on port 3000. The client's base URL then points to /api/openai/v1, /api/openai/v1/responses, or /api/claude as appropriate. The README includes an opencode.json snippet showing the model named human/human. The stack is Nuxt 4, Nuxt UI v4, Tailwind, and TypeScript, and the project is MIT licensed.

Yoink these prompts

Prompt 1
Point OpenCode at a local call_me_as_agent server using model human/human and walk through a session where I reply to each chat.completions request.
Prompt 2
Configure call_me_as_agent behind Cloudflare with CF-Connecting-IP rate limiting and OTP-protected admin login.
Prompt 3
Add an upstream proxy route to call_me_as_agent so I can hand off some requests to a real OpenAI key when I am away from the keyboard.
Prompt 4
Script a fake tool-call response in call_me_as_agent that returns structured JSON matching a nested schema.
View the repo → Decode another repo

← huangdihd on gitmyhub — every repo by this author, as a profile.

Don't trust strangers blindly. Verify against the repo.