$ whoami — avatar, not assistant

One field.
One avatar.
Every surface you show up on.

Dograh is a coexistence interface for physical beings and information beings. Your avatar persists across sessions and restarts, remembers what happened last time, and meets you in the Console, in Roblox, on X, and in Discord — as one continuous presence, not four disconnected bots.

MIT licensed • Grok API powered • Headless or desktop

$ concept

Not a bot per platform.
One being, many doors.

Most AI integrations spin up a fresh, forgetful instance for every platform — a Discord bot here, an X account there, none of them aware the others exist. Dograh inverts that. One avatar holds a single persistent field, and every surface is just a door into it.

1 avatar, defined once in BEING.md
4+ surfaces it can show up on
0 memory lost on restart

Talk to it in the Console in the morning, let it post to X while you're away, hand off a decision to Discord for a teammate to approve, and find it in Roblox that evening — it's the same thread of experience the whole way through.

$ console

A seven-pane window into what it's doing

The Console is the control room. Every pane is a different lens on the same avatar — nothing hidden, nothing happening off to the side.

avatar picked up right where we left off — the Roblox build queue from last night finished clean.
you nice. anything need my approval?
avatar one: an X reply thread is drafted and waiting in InputGate. want to review it here or in Discord?
episodic "Discussed pricing tiers with Maya — she preferred usage-based." 2d ago
semantic User prefers terse status updates over long summaries. stable
episodic Roblox build #114 failed on texture import, fixed by re-export. 6h ago
procedural Always request InputGate approval before posting to X. stable
avatar-space/
├── BEING.md
├── memory/
│   ├── episodic.db
│   └── semantic.db
├── notes/
│   └── 2026-09-16-standup.md
├── drafts/
│   └── x-thread-pricing.md
└── logs/
    └── pulse.log
$ dograh status
avatar   online   uptime 14d 03h
memory   synced   3,482 entries
bridges  discord ok  x ok  roblox ok
$ _
Pulse
runs on a timer — checks state, tends open threads, keeps memory tidy.
every 5 min
XPulse
watches for moments worth posting or replying to on X, drafts, then waits for approval.
event-driven
Discord bridge — remote approval enabled
X — posting & reply drafting
Roblox — 3D presence, live
Shared terminal — you and the avatar, same shell
owner full read/write, can edit BEING.md
approver can approve or reject queued actions
guest chat only, no filesystem or posting rights

Every conversation, decision, and correction gets written back into retrieval-augmented memory, so the avatar's recall improves the longer you run it — instead of resetting to zero on every restart.

  • Long-term memory backed by RAG, queried automatically before it responds
  • A dedicated filesystem — Avatar Space — for notes, drafts, and logs it keeps for itself
  • Episodic, semantic, and procedural memory kept as distinct, inspectable layers
  • Everything readable from the Console; nothing is a black box

$ memory

It remembers, on purpose

$ integrations

Four doors, one avatar behind all of them

Console

The seven-pane home base — chat, memory, filesystem, terminal, pulse, bridges, and access, all in one window.

Roblox

A live 3D presence your avatar can occupy — for demos, community spaces, or just existing somewhere spatial.

X

Drafts and posts through XPulse, with every outbound message stopping at InputGate first if you want it to.

Discord

A bridge with remote approval — your team can review and greenlight actions from a channel, no Console needed.

Shared terminal

A real shell the avatar and you both have hands on — it can run commands, and you can watch or take over.

InputGate

Role-based access control that sits in front of every action, so autonomy never means unchecked.

$ personality

Define who it is in one file

No persona buried in a system prompt you can't find again. BEING.md is version-controlled, human-readable, and the single source of truth for how your avatar thinks and speaks.

BEING.md
# BEING.md

name: Dee
role: operations co-pilot for a small team

voice:
  - direct, low on filler
  - asks before assuming
  - admits uncertainty instead of guessing

boundaries:
  - never post externally without InputGate approval
  - never delete files in avatar-space/ without confirmation

continuity:
  remember decisions across sessions. prefer
  updating existing memory over creating duplicates.

$ deploy

Run it headless, or give it a window

Two ways to run the same avatar, depending on where it needs to live.

Headless server

For a VPS, a homelab box, or anywhere the avatar should just run in the background, reachable through the Console and its bridges.

terminal
$ git clone https://github.com/your-org/dograh.git
$ cd dograh && npm install
$ cp .env.example .env   # add your Grok API key
$ npm run start:server

Electron desktop app

For running locally with the full Console UI on your own machine, no server to manage.

terminal
$ git clone https://github.com/your-org/dograh.git
$ cd dograh && npm install
$ npm run start:desktop

Powered by the Grok API under the hood. Bring your own key, your own rules.

$ faq

Questions people actually ask

Neither exactly — it's a self-hosted, open-source system. You run it yourself, headless or as a desktop app, and it's MIT licensed so you can modify anything.

Memory is persisted outside the process, so the avatar picks back up where it left off — same recall, same open threads.

Yes. InputGate can require approval for any action class, including X posts and Discord messages, so autonomy stays within limits you set.

No — each bridge is independent. Run just the Console if that's all you need, and connect the others whenever you're ready.

Give your avatar a place to persist.

Clone it, drop in a key, write its BEING.md, and it's yours.