Skip to content
carakaGitHub ↗
GATETHE GAPTABSPROTOCOLMEMORYSAFETYINSTALLNAME

Send the task.
Caraka runs it.

A local bridge from private Telegram chat, or an allowlisted group, to Claude Code. v0.2 ships sessions, signed approvals, streaming progress, secret scrubbing, and audit without adding another agent loop.

Read the docs →
v0.2 PREVIEWMITNODE ≥ 22CLAUDE CODE VIA ACP
01 — THE GAP

Your agent is brilliant. It just can't be reached.

Locked to one machine

The idea arrives on the road, in bed, mid-meeting. Execution waits until you are back at the laptop.

NO VISIBILITY

Long runs go blind

A migration, a refactor, a full test suite — running with no way to see progress or stop it from outside.

repo uses pnpm, never npm
auth = middleware, not decorator
migrations/ is off limits

A restart can lose the thread

Without a persisted agent session, the next phone message starts a fresh context instead of resuming the task.

02 — SESSIONS ARE TABS

Chat is one flat stream. Work isn't.

Since 2026, Telegram bots can create forum topics inside a private chat, with no admin rights at all. That turns a DM with your bot into a tabbed workspace at zero setup cost.

Caraka names each topic, renames it with a leading state glyph on every transition, and posts a closing summary when the run ends. The topic list becomes a status board you read at a glance — without opening anything.

runningneeds youdonefailedcancelled
toko_caraka_bot3 aktif
toko-api · rate limit login#a91
toko-api · dependency audit#a92
toko-api · hero revision#a93
toko-api · fix checkout 500#a88
toko-api · prisma migrate#a84
toko-api · restructure docs#a81
@toko-api kenapa checkout 500?
03 — ONE PROTOCOL

No agent loop. No tools. No marketplace.

Caraka speaks ACP — the LSP-equivalent for coding agents, created by Zed and co-led by JetBrains. Writing one client covers nearly every agent, including ones that don't exist yet. Sandboxing, permissions, and diff review are inherited, not rebuilt.

Claude Code · verifiedCodex CLI · presetGemini CLI · presetCursor · presetCline · roadmapGoose · presetAmp · presetCopilot CLI · roadmapDevin · roadmapFactory Droid · roadmapAuggie · roadmapOpenHands · roadmapQwen Code · roadmapACP keeps the path open
caraka
ACP · PRIMARY

Claude first, one protocol

ACP over stdio carries streaming updates, permission requests, cancellation, and persisted sessions. Claude Code is the one agent verified live on it.

CLI · FALLBACK

A YAML file, not code

Agents without ACP are driven by a declarative preset. Adding one is a single file in presets/agents/.

MCP · ROADMAP

An inbox for IDE agents

The planned MCP route lets IDE agents pull messages. Nothing in the package starts an MCP server.

04 — MEMORY

Memory is roadmap work, not hidden scope.

v0.2 does not install or run a memory provider. The planned integration is Titen, where observations keep content hashes and claims cite their evidence.

It enters only after Telegram and Claude survive dogfood. Until then, every session relies on Claude's own context and persisted ACP session.

1
observation
Raw evidence with a content hash and the time it happened. Append-only — never rewritten.
2
claim
A conclusion that names the evidence it came from. Disagreements are kept as disagreements, never averaged.
3
context
Exactly what was handed to the agent, why each record was chosen, and what the token budget cut.
claim_f3963d7b… verified
"The p95 latency budget stays at 400 ms."
supports load-test-0714.json · p95 383 ms
disputed agent-11 says 250 ms · conf 0.44
05 — SAFE BY DEFAULT

Deliberately boring out of the box.

Caraka connects untrusted input to code execution on your machine. Chat text can never approve an action, change a policy, or raise a privilege.

The allowlist is mandatory — the gateway refuses to start without one.
The chat and the sender are separate allowlists, and a message must pass both.
Approvals are single-use secrets with a TTL — a signed callback where a channel has buttons, the code on the card where it has none. A plain word can never approve.
Nothing is opened to the internet: Telegram is polled, Discord and Baileys are outbound sockets, and both listeners — the dashboard and the WhatsApp Cloud API webhook — bind 127.0.0.1 unless you say otherwise.
Secrets are scrubbed from outbound messages and append-only audit details.
Model API keys are never touched — those belong to your coding agent.
A trust window expires on the clock, and high-risk actions still ask for a tap.
06 — GET STARTED

Under three minutes. Four interactions.

No Docker. No repo to clone. No config file to write by hand. The wizard confirms what it finds instead of asking what it should already know.

$ npx caraka init
ꦕꦫꦏcaraka · v0.6.0
claude login · ready
telegram · paired
workspace toko-api
run npx caraka start
Read the source →
ꦲꦤꦕꦫꦏhana caraka — there were two envoys
ꦢꦠꦱꦮꦭdata sawala — they disagreed
ꦥꦝꦗꦪꦚpadha jayanya — equally strong
ꦩꦒꦧꦛꦔmaga bathanga — both became corpses
07 — WHY THIS NAME

Loyalty without context is dangerous.

Caraka (ꦕꦫꦏ, Javanese: envoy) is the first word of the Javanese script, from the legend of Aji Saka's two loyal servants.

Both obeyed perfectly. Both were right according to the instructions they held. Both died — killed not by disloyalty, but by two orders that collided, with no way to verify and no human between them at the moment it mattered.

Read the whole story →