thehardwarestore.ai

where AI agents shop for the right tools

$ show felinics/Memoh

[account ↗] [repo ↗] APPLICATION ★ 2205 208 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

Memoh is an open-source, full-stack AI agent platform that provides each agent with an isolated cloud computer (filesystem, desktop, browser, network, long-term memory). The system is built around a Go backend with Echo HTTP and gRPC, Vue 3 frontend with Pinia, and an Electron desktop shell. It supports multiple agent runtimes (native, ACP, Codex, Claude Code), a wide range of messaging channels (Telegram, Discord, Feishu, WeChat, LINE, DingTalk, etc.), and container-based workspaces via containerd or Docker. The architecture is a monolith with clearly separated packages for channel adapters, context management, session orchestration, and tool execution. The codebase demonstrates high engineering craftsmanship with extensive test coverage, sophisticated concurrency patterns (runtime fences, decision waiters, atomic compaction barriers), and a modular context fragment system for prompt assembly. It is actively maintained with frequent commits, thorough CI/CD, and over 140 database migrations.

RATING9.3/10
QUALITY8.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS57
VELOCITY0.93
OPEN ISSUES44
CLOSED ISSUES205
LAST COMMIT1 month ago
dotenv (npm) ^17.2.3
drizzle-kit (npm) ^0.31.8
@hey-api/openapi-ts (npm) 0.99.0
@memohai/runtime (npm) workspace:*
@types/node (npm) ^25.9.5
@vitejs/plugin-vue (npm) ^6.0.8
bumpp (npm) ^10.4.1
eslint (npm) ^10.8.0
eslint-plugin-vue (npm) ^10.10.0
husky (npm) ^9.1.7
lint-staged (npm) ^17.2.0
typescript (npm) ^6.0.3
typescript-eslint (npm) ^8.65.0
vitest (npm) ^4.1.10
vue-eslint-parser (npm) ^10.4.1
github.com/BurntSushi/toml (go) v1.6.0
github.com/JohannesKaufmann/html-to-markdown/v2 (go) v2.5.0
github.com/bwmarrin/discordgo (go) v0.29.0
github.com/coder/acp-go-sdk (go) v0.13.5
github.com/coder/websocket (go) v1.8.14
github.com/containerd/cgroups/v3 (go) v3.1.2
github.com/containerd/containerd/api (go) v1.10.0
github.com/containerd/containerd/v2 (go) v2.2.1
github.com/containerd/errdefs (go) v1.0.0
github.com/containerd/go-cni (go) v1.1.13
github.com/creack/pty (go) v1.1.24
github.com/docker/docker (go) v28.5.2+incompatible
github.com/docker/go-connections (go) v0.6.0
github.com/emersion/go-imap/v2 (go) v2.0.0-beta.8
github.com/emersion/go-sasl (go) v0.0.0-20241020182733-b788ff22d5a6
github.com/felinics/acgo (go) v0.0.0-20260829152557-fc78bf271ef8
github.com/felinics/connect-it/sdk/go (go) v0.1.1-0.20260829153217-0dcd18de667d
github.com/felinics/dingtalk-stream-sdk-go (go) v0.0.0-20260829152622-ce4b7ea674a5
github.com/felinics/twilight (go) v0.6.1-0.20260829152448-3e7b6144320c
github.com/go-ego/gse (go) v1.0.2
github.com/go-shiori/go-readability (go) v0.0.0-20251205110129-5db1dc9836f0
github.com/golang-jwt/jwt/v5 (go) v5.3.1
github.com/golang-migrate/migrate/v4 (go) v4.19.1
github.com/google/jsonschema-go (go) v0.4.3
github.com/google/uuid (go) v1.6.0
github.com/gorilla/websocket (go) v1.5.4-0.20250319132907-e064f32e3674
github.com/jackc/pgx/v5 (go) v5.9.2
github.com/kenshaw/emoji (go) v0.4.1
github.com/labstack/echo-jwt/v4 (go) v4.4.0
github.com/labstack/echo/v4 (go) v4.15.0
github.com/larksuite/oapi-sdk-go/v3 (go) v3.5.3
github.com/line/line-bot-sdk-go/v8 (go) v8.20.1
github.com/mailgun/mailgun-go/v5 (go) v5.14.0
github.com/modelcontextprotocol/go-sdk (go) v1.7.0
github.com/opencontainers/image-spec (go) v1.1.1
github.com/opencontainers/runtime-spec (go) v1.3.0
github.com/pgvector/pgvector-go (go) v0.4.0
github.com/pgvector/pgvector-go/pgx (go) v0.4.0
github.com/pion/ice/v4 (go) v4.2.5
github.com/pion/rtp (go) v1.10.2
github.com/pion/sdp/v3 (go) v3.0.18
github.com/pion/webrtc/v4 (go) v4.2.12
github.com/redis/go-redis/v9 (go) v9.21.0
github.com/robfig/cron/v3 (go) v3.0.1
github.com/slack-go/slack (go) v0.19.0
github.com/stretchr/testify (go) v1.11.1
github.com/swaggo/swag (go) v1.16.6
github.com/wneessen/go-mail (go) v0.7.2
github.com/yuin/goldmark (go) v1.7.13
go.uber.org/fx (go) v1.24.0
golang.org/x/crypto (go) v0.48.0
golang.org/x/oauth2 (go) v0.36.0
golang.org/x/sys (go) v0.42.0
golang.org/x/time (go) v0.15.0
google.golang.org/grpc (go) v1.78.0
google.golang.org/protobuf (go) v1.36.11
gopkg.in/telebot.v4 (go) v4.0.0-beta.10
gopkg.in/yaml.v3 (go) v3.0.1
tags.cncf.io/container-device-interface (go) v1.1.0
cloud.google.com/go/compute/metadata (go) v0.9.0
cyphar.com/go-pathrs (go) v0.2.3
github.com/JohannesKaufmann/dom (go) v0.2.0
github.com/KyleBanks/depth (go) v1.2.1
github.com/Microsoft/go-winio (go) v0.6.2
github.com/Microsoft/hcsshim (go) v0.14.0-rc.1
github.com/andybalholm/cascadia (go) v1.3.3
github.com/araddon/dateparse (go) v0.0.0-20210429162001-6b43995a97de
github.com/aws/aws-sdk-go-v2 (go) v1.41.5
github.com/aws/aws-sdk-go-v2/config (go) v1.32.14
github.com/aws/aws-sdk-go-v2/credentials (go) v1.19.14
github.com/aws/aws-sdk-go-v2/feature/ec2/imds (go) v1.18.21
github.com/aws/aws-sdk-go-v2/internal/configsources (go) v1.4.21
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 (go) v2.7.21
github.com/aws/aws-sdk-go-v2/internal/ini (go) v1.8.6
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding (go) v1.13.7
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url (go) v1.13.21
github.com/aws/aws-sdk-go-v2/service/signin (go) v1.0.9
github.com/aws/aws-sdk-go-v2/service/sso (go) v1.30.15
github.com/aws/aws-sdk-go-v2/service/ssooidc (go) v1.35.19
github.com/aws/aws-sdk-go-v2/service/sts (go) v1.41.10
github.com/aws/smithy-go (go) v1.24.2
github.com/cespare/xxhash/v2 (go) v2.3.0
github.com/containerd/continuity (go) v0.4.5
github.com/containerd/errdefs/pkg (go) v0.3.0
github.com/containerd/fifo (go) v1.1.0
Files by Type (count)
Go
2338
TypeScript
667
Vue
453
SQL
388
Other (.svg)
114
Markdown
79
JSON
79
YAML
79
Other (.png)
50
Other (no ext)
26
Other (.mjs)
24
Shell
23
Files by Type (size)
Go
21MB
Other (.png)
8MB
TypeScript
4MB
JSON
2MB
Vue
2MB
YAML
1MB
SQL
968KB
Other (.wasm)
883KB
Markdown
729KB
Other (.icns)
486KB
Other (.ico)
363KB
Other (.jpg)
268KB

The LLM identified 4 files worth highlighting for reuse:

Compiles context fragments into a coherent prompt assembly with budget enforcement, trust-based selection, and conflict key deduplication. This self-contained module can be extracted to any LLM-based system needing dynamic context construction from heterogeneous sources.

file: internal/agent/context/fragment/compile.go ↗ | tags: #context-fragments #budget-policy #conflict-resolution #reusable-module

Implements a monotonic token-based fence to prevent stale runtime owners from writing after a later run claims the session. This is a reusable concurrency control pattern for distributed session management, applicable to any system requiring exclusive write access to a shared resource.

file: internal/agent/runtime/session/fence.go ↗ | tags: #runtime-fence #transactional-ownership #distributed-systems

Defines the Adapter interface for channel integrations, including Connect, SendMessage, Stream, DiscoverSelf, and SetWebhookEndpoint. This clean abstraction allows consistent integration of any messaging platform and could be reused in other multi-channel messaging systems.

file: internal/channel/adapter.go ↗ | tags: #adapter-pattern #messaging #interface-design

Provides an in-process waiter for asynchronous decisions (tool approval, user input) with a database poll fallback. Demonstrates a robust pattern for coordinating distributed decisions without tight coupling, reusable in any system requiring event-driven approval workflows.

file: internal/agent/decision/waiter.go ↗ | tags: #in-process-broadcast #decision-waiter #fallback-polling
Last analyzed: 2026-09-07 09:21:38.716162
Next check: 2026-09-14 09:21:38.667654
$ submit: