Skip to content
carakaGitHub ↗
GATETHE GAPTABSPROTOCOLMEMORYSAFETYINSTALLNAME

Send the task.
Caraka runs it.

A local bridge from Telegram, Discord, or WhatsApp to the coding agent already on your machine. v1.5 ships sessions, single-use approvals, memory, secret scrubbing, and audit without adding another agent loop. Progress arrives as one message edited as the answer grows, where the chat app allows an edit.

Read the docs →
Caraka - Run your coding agent from Telegram, Discord, or WhatsApp | Product Hunt
v1.5.10MITNODE ≥ 229 PRESETS
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 · verifiedGemini CLI · presetCursor · presetCline · roadmapGoose · verifiedAmp · 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, goose, and opencode are verified live on it.

CLI · FALLBACK

A YAML file, not code

Agents without ACP are driven by a declarative preset, one file in presets/agents/. Codex, aider, and Claude Code are verified here.

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 that names its evidence.

Since v0.3 a run leaves observations behind and the next prompt carries them, through Titen, through a local SQLite provider, or not at all. Observations keep content hashes and claims cite their evidence.

A compile that fails, or takes longer than 500 ms, is skipped and audited; the run continues without it. The Titen adapter answered a live Titen for the first time in v1.2, and what it does there is write: reading back needs claims, which nothing here creates. The local provider needs nothing but the database Caraka already keeps.

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 # your coding agent hands this one to you
ꦕꦫꦏcaraka · v1.5.10
agent · found on PATH
telegram · paired
workspace toko-api
back to the agent: npx caraka doctor, then 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 →