memoh

module
v0.20.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 15, 2026 License: AGPL-3.0

README

Memoh

Memoh

Give every AI agent its own cloud computer. Open source.
Desktop, browser, network, and long-term memory — always on, even when your laptop is closed.

Memoh Cloud · Deploy to Server · Docs · Website · X

Memoh

What is Memoh?

Memoh is an open-source multi-agent platform. Each agent gets its own cloud computer — a dedicated workspace with a filesystem, desktop, browser, network, and long-term memory. Your agents stay online 24/7, even when your laptop is closed.

Use your own API keys to run Memoh's built-in agent, or host your existing Claude Code and Codex agents inside Memoh workspaces.

Talk to them through Telegram, Discord, Lark, WeChat, Web UI, and more. They remember context across sessions and platforms, drive a browser, call MCP tools, and run scheduled tasks. Run one for yourself, assign one to each team member, or spin up a fleet.

Get Started

Memoh Cloud

[!TIP] Memoh Cloud is coming soon — zero setup, always-on agents in the cloud. Join the waitlist at memoh.ai/waitlist.

Deploy to Server

Self-host the full stack on your own infrastructure.

curl -fsSL https://memoh.sh | sh
More deployment options

Manual deployment:

git clone --depth 1 --recurse-submodules --shallow-submodules https://github.com/felinics/Memoh.git
cd Memoh
cp conf/app.docker.toml config.toml
# Edit config.toml
export MEMOH_INTERNAL_RPC_SHARED_SECRET="$(openssl rand -hex 32)"
docker compose up -d

The Compose stack runs Server and Channel as separate services. Keep the internal RPC secret private and use the same value whenever the stack is recreated.

Running without Docker (or upgrading an existing bare-metal install)? Leave internal_rpc.shared_secret empty in config.toml: the server then embeds the channel runtime and keeps running as a single all-in-one process — external channels, email, and webhook endpoints included — with no memoh-channel process required. Setting the secret opts into the split two-process deployment.

Existing setup checkouts can keep using git pull: the post-merge hook initializes the new submodule, and setup enables recursive updates for future pulls. If that hook was never installed, run mise run submodule-init once after upgrading. GitHub's automatic “Source code” archives omit submodule contents. For a buildable release archive, use the attached Memoh-<version>-source.zip or .tar.gz asset instead.

Use CN mirror for slow image pulls:

curl -fsSL https://memoh.sh | USE_CN_MIRROR=true sh

Do not run the whole installer with sudo. The installer will use sudo docker internally if Docker requires it.

See DEPLOYMENT.md for custom configuration and production setup.

Why Memoh?

  • Every agent gets its own computer: An isolated workspace with its own filesystem, network, desktop, and browser.
  • Multi-user, multi-bot: Run one for yourself, deploy one for each family member, run a fleet on a single machine.
  • Lightweight: Self-host the server on your own infrastructure, or connect through Memoh Cloud.

Features

  • Multi-bot & multi-user: Multiple bots that chat privately, in groups, or with each other. Cross-platform identity binding.
  • Isolated workspaces: Each bot has a dedicated filesystem, network, tools, and desktop.
  • Built-in memory: Long-term memory across sessions and platforms, out of the box. Also supports Mem0, OpenViking.
  • 10+ channels: Telegram, Discord, Lark, WeChat, QQ, Email, and more.
  • MCP: Connect external tool servers. Each bot manages its own connections.
  • Agent Hosting: Host external agents inside Memoh workspaces via ACP. Currently supports Codex and Claude Code, configured per bot.
  • Browser Use: Drive a browser inside the workspace.
  • Computer Use: Operate the workspace desktop for GUI workflows.
  • Skills & Supermarket: Modular skills, install curated templates from Supermarket, delegate to sub-agents.
  • Automation: Scheduled tasks for recurring workflows.

Sub-projects

  • Twilight AI — A lightweight, idiomatic AI SDK for Go, inspired by Vercel AI SDK. Provider-agnostic (OpenAI, Anthropic, Google), with first-class streaming, tool calling, MCP, and embeddings.
  • Connect It — A self-hosted connector gateway that securely stores SaaS credentials and gives agents access to integrations through a single MCP endpoint.
  • UI — A Vue 3 design system for AI agent management interfaces, including a component library, design tokens, and skills that teach agents how to use them.

Project Status

License Last Commit Commit Activity Issues Pull Requests

Star History

Star History Chart

Contributors

Community


LICENSE: AGPLv3

Made with ❤️ by MemohAI Team,

Copyright (C) 2026 MemohAI (memoh.ai). All rights reserved.

Directories

Path Synopsis
cmd
agent command
bridge command
channel command
cmd/channel hosts external channel adapters, email receivers, and webhook endpoints as a standalone service.
cmd/channel hosts external channel adapters, email receivers, and webhook endpoints as a standalone service.
gen-bridge-mtls command
gen-codex-protocol command
Command gen-codex-protocol regenerates the Go types for the codex app-server v2 protocol from the vendored JSON Schema snapshot in internal/agent/runtime/codex/protocolgen/schema.
Command gen-codex-protocol regenerates the Go types for the codex app-server v2 protocol from the vendored JSON Schema snapshot in internal/agent/runtime/codex/protocolgen/schema.
internal/channel
Package channel assembles the shared command-side Channel module: registry/manager/processor, discuss pipeline, email, and webhook tunnel.
Package channel assembles the shared command-side Channel module: registry/manager/processor, discuss pipeline, email, and webhook tunnel.
internal/core
Package core assembles the shared command-side domain and agent runtime providers used by the Memoh binaries (all-in-one, channel).
Package core assembles the shared command-side domain and agent runtime providers used by the Memoh binaries (all-in-one, channel).
synccaps command
Command synccaps enriches the hand-maintained conf/providers templates with reasoning capabilities (thinking_mode + reasoning_efforts) derived from the LiteLLM model registry.
Command synccaps enriches the hand-maintained conf/providers templates with reasoning capabilities (thinking_mode + reasoning_efforts) derived from the LiteLLM model registry.
internal
acl
agent/adapter/acpprofile
Package acpprofile adapts the ACP runtime profile registry to the stable turn contract consumed by Channel.
Package acpprofile adapts the ACP runtime profile registry to the stable turn contract consumed by Channel.
agent/adapter/agentsession
Package agentsession adapts Chat thread metadata to the minimal descriptor consumed by the ACP runtime.
Package agentsession adapts Chat thread metadata to the minimal descriptor consumed by the ACP runtime.
agent/adapter/channelcontact
Package channelcontact adapts Channel routes to Agent messaging contacts.
Package channelcontact adapts Channel routes to Agent messaging contacts.
agent/adapter/channelidentity
Package channelidentity adapts Channel configuration data to the neutral platform identity projection consumed by Agent application orchestration.
Package channelidentity adapts Channel configuration data to the neutral platform identity projection consumed by Agent application orchestration.
agent/adapter/channelmessaging
Package channelmessaging adapts Agent-owned messaging ports to the Channel delivery runtime.
Package channelmessaging adapts Agent-owned messaging ports to the Channel delivery runtime.
agent/adapter/channelqueue
Package channelqueue adapts channel queue controls to the application service without exposing queue storage types to channels or RPC.
Package channelqueue adapts channel queue controls to the application service without exposing queue storage types to channels or RPC.
agent/application
Package application orchestrates agent turns, including context assembly, persistence, memory, compaction, approvals, and runtime invocation.
Package application orchestrates agent turns, including context assembly, persistence, memory, compaction, approvals, and runtime invocation.
agent/background
Package background implements a background task manager for long-running commands and subagent work.
Package background implements a background task manager for long-running commands and subagent work.
agent/context/fragment
Package contextfrag defines the typed intermediate representation used to describe context before it is rendered into provider-specific SDK inputs.
Package contextfrag defines the typed intermediate representation used to describe context before it is rendered into provider-specific SDK inputs.
agent/decision
Package decision holds app-layer decision DTOs and shared waiting primitives.
Package decision holds app-layer decision DTOs and shared waiting primitives.
agent/decision/feedback
Package feedback defines stable user-facing External Agent errors.
Package feedback defines stable user-facing External Agent errors.
agent/decision/input
Package-shared MCP form-elicitation core: translates an MCP elicitation requestedSchema into the strict ask_user question payload and maps the submitted answers back into schema-conformant content.
Package-shared MCP form-elicitation core: translates an MCP elicitation requestedSchema into the strict ask_user question payload and maps the submitted answers back into schema-conformant content.
agent/event
Package event defines the stream events shared by agent runtimes and the conversation layer.
Package event defines the stream events shared by agent runtimes and the conversation layer.
agent/event/payload
Package payload defines the on-wire shapes for agent-emitted events published to the chat event hub.
Package payload defines the on-wire shapes for agent-emitted events published to the chat event hub.
agent/runtime/acp
Driver adapts the ACP session pool to the external runtime port, so ACP sits at the same level as the other out-of-process external agent runtimes (codex, claude-code) and the application keeps one turn orchestration for all of them.
Driver adapts the ACP session pool to the external runtime port, so ACP sits at the same level as the other out-of-process external agent runtimes (codex, claude-code) and the application keeps one turn orchestration for all of them.
agent/runtime/acp/client
Package client manages Agent Control Protocol processes, sessions, and events.
Package client manages Agent Control Protocol processes, sessions, and events.
agent/runtime/agentprocess
Package agentprocess provides the shared bridge-backed stdio process used by direct External Agent drivers.
Package agentprocess provides the shared bridge-backed stdio process used by direct External Agent drivers.
agent/runtime/agentstate
Package agentstate defines the External Agent persistence contract for native session checkpoints: JSONL trees owned by an out-of-process runtime (an ACP agent, codex, claude-code) that Memoh snapshots to and restores from the database without making their opaque records part of the canonical chat timeline.
Package agentstate defines the External Agent persistence contract for native session checkpoints: JSONL trees owned by an out-of-process runtime (an ACP agent, codex, claude-code) that Memoh snapshots to and restores from the database without making their opaque records part of the canonical chat timeline.
agent/runtime/claudecode
Database checkpointing for Claude Code sessions.
Database checkpointing for Claude Code sessions.
agent/runtime/claudecode/claudecfg
Package claudecfg holds the Bot Agent configuration contract for the direct Claude Code runtime.
Package claudecfg holds the Bot Agent configuration contract for the direct Claude Code runtime.
agent/runtime/codex
Package codex implements the direct codex app-server runtime driver: it speaks the v2 protocol (internal/agent/runtime/codex/protocol) to a pinned codex CLI running inside the bot workspace, with no ACP adapter in between.
Package codex implements the direct codex app-server runtime driver: it speaks the v2 protocol (internal/agent/runtime/codex/protocol) to a pinned codex CLI running inside the bot workspace, with no ACP adapter in between.
agent/runtime/codex/codexcfg
Package codexcfg holds the Bot Agent configuration contract for the direct codex runtime.
Package codexcfg holds the Bot Agent configuration contract for the direct codex runtime.
agent/runtime/codex/protocol
Package protocol implements the wire contract Memoh speaks with the codex app-server: JSON-RPC 2.0 semantics over newline-delimited JSON on stdio, with the `jsonrpc` version field omitted, as the app-server does.
Package protocol implements the wire contract Memoh speaks with the codex app-server: JSON-RPC 2.0 semantics over newline-delimited JSON on stdio, with the `jsonrpc` version field omitted, as the app-server does.
agent/runtime/codex/protocolgen
Package protocolgen generates the Go types for the codex app-server v2 protocol from the vendored JSON Schema snapshot under schema/.
Package protocolgen generates the Go types for the codex app-server v2 protocol from the vendored JSON Schema snapshot under schema/.
agent/runtime/external
Package external defines the neutral port between the agent application layer and out-of-process runtimes: Codex, Claude Code, and ACP agents.
Package external defines the neutral port between the agent application layer and out-of-process runtimes: Codex, Claude Code, and ACP agents.
agent/runtime/session/ledger
Package ledger is the durable half of the session runtime: the record of which runs were admitted, who owns them, and how they ended.
Package ledger is the durable half of the session runtime: the record of which runs were admitted, who owns them, and how they ended.
agent/runtime/toolmount
Package toolmount serves the Memoh tool gateway (HTTP MCP) into a bot workspace over the bridge's reverse-HTTP stream, so an external agent runtime inside the container reaches Memoh tools at the workspace-local proxy URL.
Package toolmount serves the Memoh tool gateway (HTTP MCP) into a bot workspace over the bridge's reverse-HTTP stream, so an external agent runtime inside the container reaches Memoh tools at the workspace-local proxy URL.
agent/turn
Package turn defines the application-level contract for starting and observing agent turns.
Package turn defines the application-level contract for starting and observing agent turns.
agentcredential
Package agentcredential stores Agent credentials encrypted at rest.
Package agentcredential stores Agent credentials encrypted at rest.
apps
App apps installs Supermarket Apps into bot workspaces.
App apps installs Supermarket Apps into bot workspaces.
audio/adapter/alibabacloud
Package alibabacloud implements DashScope's OpenAI-compatible Qwen ASR API.
Package alibabacloud implements DashScope's OpenAI-compatible Qwen ASR API.
botbackup/secure
Package secure provides passphrase-based authenticated encryption for bot backup bundles.
Package secure provides passphrase-based authenticated encryption for bot backup bundles.
capabilities
Package capabilities derives model reasoning capabilities (thinking mode and effort tiers) from the LiteLLM model registry.
Package capabilities derives model reasoning capabilities (thinking mode and effort tiers) from the LiteLLM model registry.
channel
Package channel provides a unified abstraction for multi-platform messaging channels.
Package channel provides a unified abstraction for multi-platform messaging channels.
channel/adapters/dingtalk
Package dingtalk implements the DingTalk channel adapter.
Package dingtalk implements the DingTalk channel adapter.
channel/adapters/feishu
Package feishu implements the Feishu (Lark) channel adapter.
Package feishu implements the Feishu (Lark) channel adapter.
channel/adapters/feishu/wsclient
Package wsclient is a Feishu/Lark long-connection websocket client.
Package wsclient is a Feishu/Lark long-connection websocket client.
channel/adapters/local
Package local implements the CLI and Web channel adapters for local development.
Package local implements the CLI and Web channel adapters for local development.
channel/adapters/misskey
Package misskey implements the Misskey channel adapter.
Package misskey implements the Misskey channel adapter.
channel/adapters/telegram
Package telegram implements the Telegram channel adapter.
Package telegram implements the Telegram channel adapter.
channel/common
Package common provides shared utilities for channel adapters.
Package common provides shared utilities for channel adapters.
channel/partsfixture
Package partsfixture exposes the canonical Message.Parts fixture used by the cross-platform rendering regression tests.
Package partsfixture exposes the canonical Message.Parts fixture used by the cross-platform rendering regression tests.
channel/publicmedia
Package publicmedia defines signed public image media paths shared by channel adapters and HTTP handlers.
Package publicmedia defines signed public image media paths shared by channel adapters and HTTP handlers.
channelaccess
Package channelaccess wires together the global account binding (channel identity <-> web user) and the per-bot Manage capability, resolving the effective Manage as "local override ?? inherited from bound web member".
Package channelaccess wires together the global account binding (channel identity <-> web user) and the per-bot Manage capability, resolving the effective Manage as "local override ?? inherited from bound web member".
chat/timeline
Package timeline implements the Deterministic Context Pipeline (DCP) for assembling LLM context from canonical IM events.
Package timeline implements the Deterministic Context Pipeline (DCP) for assembling LLM context from canonical IM events.
connectors
Package connectors manages bot-scoped bindings to the trusted Connect-It deployment.
Package connectors manages bot-scoped bindings to the trusted Connect-It deployment.
db
httpx
Package httpx holds tiny echo-boundary helpers shared by the server shell and HTTP handlers.
Package httpx holds tiny echo-boundary helpers shared by the server shell and HTTP handlers.
i18n
Package i18n provides a tiny, zero-dependency localization catalog for the IM command UI (slash commands, inline-keyboard buttons, renderer chrome).
Package i18n provides a tiny, zero-dependency localization catalog for the IM command UI (slash commands, inline-keyboard buttons, renderer chrome).
mcp
media/lottie
Package lottie rasterises Lottie animations — Telegram animated stickers in particular — without cgo, a native library or a helper process.
Package lottie rasterises Lottie animations — Telegram animated stickers in particular — without cgo, a native library or a helper process.
memory/migrate
Package migrate contains utilities that convert existing markdown-backed memory content into the PostgreSQL wiki/graph schema (memory_nodes + memory_edges).
Package migrate contains utilities that convert existing markdown-backed memory content into the PostgreSQL wiki/graph schema (memory_nodes + memory_edges).
memory/segment
Package segment tokenises memory text for lexical scoring, with first-class support for CJK (Chinese/Japanese) text.
Package segment tokenises memory text for lexical scoring, with first-class support for CJK (Chinese/Japanese) text.
memory/wikistore
Package wikistore provides a graph store over the memory_nodes / memory_edges tables.
Package wikistore provides a graph store over the memory_nodes / memory_edges tables.
reasoning
Package reasoning owns every decision about extended thinking: what a user may select for a model, and what a call actually sends upstream.
Package reasoning owns every decision about extended thinking: what a user may select for a model, and what a call actually sends upstream.
rpc
runtimekind
Package runtimekind is the single owner of the session runtime vocabulary and of the capability table that says what each runtime kind supports.
Package runtimekind is the single owner of the session runtime vocabulary and of the capability table that says what each runtime kind supports.
storage
Package storage defines the Provider interface for object storage backends.
Package storage defines the Provider interface for object storage backends.
storage/providers/containerfs
Package containerfs implements storage.Provider for bot containers backed by gRPC calls to the in-container MCP service.
Package containerfs implements storage.Provider for bot containers backed by gRPC calls to the in-container MCP service.
storage/providers/fallback
Package fallback implements storage.Provider that tries a primary provider first (e.g.
Package fallback implements storage.Provider that tries a primary provider first (e.g.
storage/providers/localfs
Package localfs implements storage.Provider backed by the host filesystem.
Package localfs implements storage.Provider backed by the host filesystem.
team
Package team holds the default team identity used by self-hosted Memoh.
Package team holds the default team identity used by self-hosted Memoh.
testutil/sessionledger
Package sessionledger supplies a shared in-memory ledger for runtime and application tests.
Package sessionledger supplies a shared in-memory ledger for runtime and application tests.
testutil/sessionruntime
Package sessiontest creates admitted runtimes for tests outside the runtime package.
Package sessiontest creates admitted runtimes for tests outside the runtime package.
toolcontext
Package toolcontext owns the request-scoped identity and lifecycle shared by every Memoh tool transport.
Package toolcontext owns the request-scoped identity and lifecycle shared by every Memoh tool transport.
workdir
Package workdir manages named per-bot working directories.
Package workdir manages named per-bot working directories.
workspace/bridge
Package bridge provides a gRPC client for the workspace container bridge service.
Package bridge provides a gRPC client for the workspace container bridge service.
workspace/vpath
Package vpath resolves user-supplied paths under a virtual workspace root without consulting the host filesystem.
Package vpath resolves user-supplied paths under a virtual workspace root without consulting the host filesystem.
workspacedeps
Package workspacedeps manages catalog dependencies inside each bot's isolated workspace.
Package workspacedeps manages catalog dependencies inside each bot's isolated workspace.
workspacedeps/catalog
Package catalog validates immutable workspace dependency definitions.
Package catalog validates immutable workspace dependency definitions.
Package spec Code generated by swaggo/swag.
Package spec Code generated by swaggo/swag.
Package templates holds the built-in files seeded into every agent workspace on first boot: the AGENTS.md persona scaffold, memory notes, and the default .memoh directory (hooks, built-in skills).
Package templates holds the built-in files seeded into every agent workspace on first boot: the AGENTS.md persona scaffold, memory notes, and the default .memoh directory (hooks, built-in skills).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL