Ruflo
Agent teams, swarms, memory and hooks for Claude Code and Codex, served over MCP.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Embedded memory for AI agents with SQLite, pgvector, and Neo4j graph search.
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ผลตรวจผ่าน 2/2 · ทำงานบนเครื่องคุณ
ขั้นแรก: คุณใช้ AI ตัวไหน
เลือกแอปที่คุณใช้ ขั้นตอนจะขึ้นด้านล่าง
ต่อกับ Claude ได้ แต่ต้องเตรียมก่อน
ต้องมีคีย์ของ Memwright (สมัครที่เว็บของผู้ทำ อาจมีค่าใช้จ่าย) · ต้องลง Python (uv) ในเครื่องก่อน (ทำครั้งเดียว) · ใช้ได้เฉพาะแอป Claude บนคอม (Windows หรือ Mac) ไม่ใช่บนเว็บหรือมือถือ
ทำครั้งเดียว ใช้ได้กับทุกตัวที่ต้องใช้ Python (uv)
เปิดเว็บของผู้ทำ สมัครบัญชีแล้วสร้างคีย์ (API key) เก็บไว้ ใช้ในขั้นถัดไป อาจมีค่าใช้จ่าย
วิธีขอคีย์อยู่ใน README ของผู้ทำด้านล่าง
SettingsDeveloperEdit Config
{
"mcpServers": {
"memwright": {
"command": "uvx",
"args": [
"memwright"
],
"env": {
"PG_CONNECTION_STRING": "ใส่ค่าของคุณ",
"NEO4J_PASSWORD": "ใส่ค่าของคุณ",
"OPENROUTER_API_KEY": "ใส่ค่าของคุณ",
"OPENAI_API_KEY": "ใส่ค่าของคุณ"
}
}
}
}วางคีย์ในช่องของแอปเท่านั้น อย่าวางในแชตหรือส่งให้ใคร
ใช้ Memwright บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Claude บอกว่ากำลังใช้ Memwright หรือมีชื่อเครื่องมือของ Memwright ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Anthropic เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ChatGPT ยังต่อ Memwright ไม่ได้
Memwright ต้องติดตั้งในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะตัวที่ทำงานบนเว็บ
ก · ใช้แอปที่ต่อ Memwright ได้
ข · ตัวอื่นในหมวด ค้นข้อมูลและความจำของ AI ที่ต่อกับ ChatGPT ได้
เลือกจากตัวที่ใช้มากในหมวดเดียวกัน เฉพาะตัวที่ต่อด้วยที่อยู่ได้โดยไม่ต้องใส่คีย์
ต่อกับ Claude Code ได้ แต่ต้องเตรียมก่อน
ต้องมีคีย์ของ Memwright (สมัครที่เว็บของผู้ทำ อาจมีค่าใช้จ่าย) · ต้องลง Python (uv) ในเครื่องก่อน (ทำครั้งเดียว)
ทำครั้งเดียว ใช้ได้กับทุกตัวที่ต้องใช้ Python (uv)
เปิดเว็บของผู้ทำ สมัครบัญชีแล้วสร้างคีย์ (API key) เก็บไว้ ใช้ในขั้นถัดไป อาจมีค่าใช้จ่าย
วิธีขอคีย์อยู่ใน README ของผู้ทำด้านล่าง
Mac: กด Command+Space พิมพ์ Terminal · Windows: เปิด PowerShell
claude mcp add memwright --env PG_CONNECTION_STRING='ใส่ค่าของคุณ' --env NEO4J_PASSWORD='ใส่ค่าของคุณ' --env OPENROUTER_API_KEY='ใส่ค่าของคุณ' --env OPENAI_API_KEY='ใส่ค่าของคุณ' -- uvx memwrightแก้ “ใส่ค่าของคุณ” เป็นคีย์ของคุณก่อนกด Enter
วางคีย์ในช่องของแอปเท่านั้น อย่าวางในแชตหรือส่งให้ใคร
ต้องเห็น Memwright ในรายการและขึ้นว่าเชื่อมต่อแล้ว
ใช้ Memwright บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Claude Code บอกว่ากำลังใช้ Memwright หรือมีชื่อเครื่องมือของ Memwright ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Anthropic เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ต่อกับ Cursor ได้ แต่ต้องเตรียมก่อน
ต้องมีคีย์ของ Memwright (สมัครที่เว็บของผู้ทำ อาจมีค่าใช้จ่าย) · ต้องลง Python (uv) ในเครื่องก่อน (ทำครั้งเดียว)
ทำครั้งเดียว ใช้ได้กับทุกตัวที่ต้องใช้ Python (uv)
เปิดเว็บของผู้ทำ สมัครบัญชีแล้วสร้างคีย์ (API key) เก็บไว้ ใช้ในขั้นถัดไป อาจมีค่าใช้จ่าย
วิธีขอคีย์อยู่ใน README ของผู้ทำด้านล่าง
ในค่าตั้งของ Memwright ช่อง PG_CONNECTION_STRING, NEO4J_PASSWORD, OPENROUTER_API_KEY, OPENAI_API_KEY ยังว่าง ใส่คีย์ของคุณแล้วบันทึก
วางคีย์ในช่องของแอปเท่านั้น อย่าวางในแชตหรือส่งให้ใคร
ใช้ Memwright บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า Cursor บอกว่ากำลังใช้ Memwright หรือมีชื่อเครื่องมือของ Memwright ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ Cursor เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
ต่อกับ VS Code ได้ แต่ต้องเตรียมก่อน
ต้องมีคีย์ของ Memwright (สมัครที่เว็บของผู้ทำ อาจมีค่าใช้จ่าย) · ต้องลง Python (uv) ในเครื่องก่อน (ทำครั้งเดียว)
ทำครั้งเดียว ใช้ได้กับทุกตัวที่ต้องใช้ Python (uv)
เปิดเว็บของผู้ทำ สมัครบัญชีแล้วสร้างคีย์ (API key) เก็บไว้ ใช้ในขั้นถัดไป อาจมีค่าใช้จ่าย
วิธีขอคีย์อยู่ใน README ของผู้ทำด้านล่าง
ในค่าตั้งของ Memwright ช่อง PG_CONNECTION_STRING, NEO4J_PASSWORD, OPENROUTER_API_KEY, OPENAI_API_KEY ยังว่าง ใส่คีย์ของคุณแล้วบันทึก
วางคีย์ในช่องของแอปเท่านั้น อย่าวางในแชตหรือส่งให้ใคร
ใช้ Memwright บอกหน่อยว่าทำอะไรให้ฉันได้บ้าง แล้วลองทำให้ดูหนึ่งอย่าง✓ ถ้า VS Code บอกว่ากำลังใช้ Memwright หรือมีชื่อเครื่องมือของ Memwright ขึ้นในคำตอบ แปลว่าต่อสำเร็จ
ชื่อเมนูตรวจกับหน้าช่วยเหลือของ VS Code เมื่อ 11 พ.ย. 2569 · หน้าจอของคุณอาจต่างเล็กน้อยตามรุ่นของแอป
Claude Code
claude mcp add memwright --env PG_CONNECTION_STRING='ใส่ค่าของคุณ' --env NEO4J_PASSWORD='ใส่ค่าของคุณ' --env OPENROUTER_API_KEY='ใส่ค่าของคุณ' --env OPENAI_API_KEY='ใส่ค่าของคุณ' -- uvx memwrightClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"memwright": {
"command": "uvx",
"args": [
"memwright"
],
"env": {
"PG_CONNECTION_STRING": "ใส่ค่าของคุณ",
"NEO4J_PASSWORD": "ใส่ค่าของคุณ",
"OPENROUTER_API_KEY": "ใส่ค่าของคุณ",
"OPENAI_API_KEY": "ใส่ค่าของคุณ"
}
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"memwright": {
"command": "uvx",
"args": [
"memwright"
],
"env": {
"PG_CONNECTION_STRING": "ใส่ค่าของคุณ",
"NEO4J_PASSWORD": "ใส่ค่าของคุณ",
"OPENROUTER_API_KEY": "ใส่ค่าของคุณ",
"OPENAI_API_KEY": "ใส่ค่าของคุณ"
}
}
}
}VS Code (mcp.json)
{
"servers": {
"memwright": {
"type": "stdio",
"command": "uvx",
"args": [
"memwright"
],
"env": {
"PG_CONNECTION_STRING": "ใส่ค่าของคุณ",
"NEO4J_PASSWORD": "ใส่ค่าของคุณ",
"OPENROUTER_API_KEY": "ใส่ค่าของคุณ",
"OPENAI_API_KEY": "ใส่ค่าของคุณ"
}
}
}
}PG_CONNECTION_STRING envNEO4J_PASSWORD ความลับ envOPENROUTER_API_KEY ความลับ envOPENAI_API_KEY ความลับ envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
pypi: memwrightดูจากแบบการต่อของ server ตัวนี้ และเอกสารของผู้ทำโปรแกรมแต่ละตัว ตรวจเมื่อ 10 พ.ย. 2569
ติดตั้งบนเครื่องได้ใน
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 12 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub bolnet ซึ่งเป็นเจ้าของ repo
มีการแก้โค้ดล่าสุด 2 เดือนที่ผ่านมา
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
ถาม แชร์เคล็ดลับ หรือแจ้งว่าใช้ไม่ได้ เรียงตามที่คนกดว่ามีประโยชน์
ยังไม่มีใครโพสต์ ถามหรือแชร์เป็นคนแรกได้เลย
ข้อความในส่วนนี้เขียนโดยผู้ใช้ ไม่ใช่ทีม PopNx
ยังไม่มีรีวิว
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 2 จาก 2 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: NEO4J_PASSWORD, OPENROUTER_API_KEY, OPENAI_API_KEY
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด 2 เดือนที่ผ่านมา และส่งรุ่นล่าสุด (0.1.3) เข้า registry 8 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Ruflo, Context7, Metabase
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Agent teams, swarms, memory and hooks for Claude Code and Codex, served over MCP.
ส่งคู่มือการใช้ไลบรารีและเฟรมเวิร์กรุ่นล่าสุดให้ AI อ่านก่อนตอบ ช่วยให้โค้ดที่ AI เขียนไม่ใช้คำสั่งเก่าที่เลิกใช้แล้ว
Lets AI clients search, explore, query, and visualize data in a Metabase instance.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
Governed memory for multi-agent production meshes.
Attestor is no longer "memory for your coding assistant." Three things happened: the editor vendors shipped memory for free, the benchmark race became a race about which LLM answers the question, and every serious conversation about a memory layer was about something else entirely: when many agents share one memory, who is allowed to write, who is allowed to forget, and can you prove it afterwards. So that is what Attestor is now.
When many agents share one memory, recall is the easy part. The hard part is who may write, who may forget, what an answer was built from, and whether you can prove all of it later. Attestor is a self-hosted memory service that makes those properties enforceable in code rather than in policy documents: role-based access at the AgentContext layer, provenance on every memory (optionally Ed25519-signed), per-agent token budgets and write quotas, a deterministic ranking path with no LLM in it, temporal supersession you can query as of any past moment, hard tenant isolation across all three storage roles, an auditable, audit-first forget-user path with declarative retention, and governance jobs that run as durable Temporal workflows: retried by policy, resumed after a crash, visible in an operator UI, and never on the read path. It runs as a Python library, a REST sidecar, or an MCP server with the same API. Role enforcement is an AgentContext guarantee and runs in process. The REST and MCP surfaces call the store directly and rely on their own auth.
ctx = AgentContext(agent_id="reviewer-1", role=AgentRole.REVIEWER, namespace="acme-prod")
ctx.add_memory("...") # PermissionError: REVIEWER lacks 'write' mem.recall("...", context=ctx, as_of=last_friday) # what the mesh believed then — nothing is deleted
pip install attestor
| Version | 4.1.11 (stable; greenfield rebuild — no v3 migration path) |
| PyPI | attestor |
| Import | attestor |
| Live site | https://attestor.dev/ |
| Repo | https://github.com/bolnet/attestor |
| License | MIT |
Designed and built by [Surendra Singh](https://www.linkedin.com/in/singhsurendra/) — building auditable infrastructure for multi-agent AI, with fifteen years of production-systems discipline brought to the memory layer. Companion projects:
claude-finance(Claude-powered financial analytics) ·private-equity(PE × AI workshop). Reach out if you're hiring senior IC for AI infrastructure.
Attestor is the memory layer for an agent mesh that has to answer to someone — a security review, a regulator, a customer, or the engineer paged at 3 a.m. Every memory is stored once in Postgres (the source of truth) and derived into Pinecone (vectors) and Neo4j (graph). Every read and write goes through an AgentContext that carries identity, role, namespace, and budget, and the store keeps enough history that any past state can be reconstructed.
Each guarantee below is a property of the code, not a roadmap item. File references point at the enforcing implementation.
| Guarantee | What the code does | Where |
|---|---|---|
| Role-based access, six roles | ORCHESTRATOR = read + write + forget; PLANNER / EXECUTOR / RESEARCHER = read + write; REVIEWER / MONITOR = read only. read_only=True is an independent kill switch that strips write + forget regardless of role. Violations raise PermissionError before any backend is touched. | attestor/context.py — ROLE_PERMISSIONS, _require_permission |
| Provenance on every memory | Every write carries agent_id, session_id, namespace, and role; child contexts accumulate an agent_trail, so "which agent said this, on whose behalf" is answerable. source_episode_id is set by the episode consolidation path, not by every write. Supersession never deletes. Rows leave only through an explicit forget_user() (audited first), a retention delete policy (audited after), or compact() (not audited). Optional Ed25519 signing of id ‖ agent_id ‖ t_created ‖ content_hash, verified with verify_memory(). | attestor/context.py, attestor/identity/signing.py |
| Per-agent budgets and write quotas | token_budget bounds what recall() packs for one AgentContext; it never limits writes. max_writes_per_agent is an in-memory counter on the context and resets with a new context. set_quota() sets a per-user daily write limit enforced on add(); it is per user, not per agent. | attestor/context.py, attestor/core/quota_service.py, attestor/core/agent_memory.py |
| Deterministic read path | Ranking is vector → BM25 → RRF → graph → MMR → budget fit, with no LLM in scoring by default. Same query, same order, unit-testable and replayable. Query-expansion lanes (HyDE, multi-query) are YAML flags that add candidates; they never touch scoring. An optional reranker (bge, cohere, or llm provider) can re-score candidates; it is off by default. | attestor/retrieval/orchestrator/core.py, attestor/retrieval/scorer.py, attestor/retrieval/reranker.py |
| Temporal supersession, `as_of` replay | Contradictions supersede older facts; supersession never deletes. Every fact carries valid time (valid_from, valid_until) and transaction time (t_created, t_expired). recall(as_of=...) filters candidates on transaction time at document hydration and in the BM25 lane; the Pinecone lane ignores as_of and logs a warning. | attestor/temporal/manager.py, attestor/store/schema.sql, attestor/store/pinecone_backend.py |
| Hard tenant isolation, all three roles | Tenant is the user. Postgres: row-level security keyed to attestor.current_user_id, with namespace stamped into metadata. Pinecone: one index, partitioned by namespace= on every call. Neo4j: namespace property with a composite (key, namespace) constraint and namespace-scoped traversal; the PageRank projection is global and is a ranking signal only. | attestor/store/schema.sql, attestor/store/pinecone_backend.py, attestor/store/neo4j_backend.py |
| Auditable forget-user and retention | forget_user() writes an RLS-exempt, append-only by convention forget_audit row *before* deleting, then walks document → state → vector → graph and reports per-backend counts so partial success is visible, never silent. Declarative retention policies (archive / delete, filtered by namespace, category, layer, tags, age) apply first and write a forget_audit row after; only forget_user() is audit-first. Full export for subject-access requests. | attestor/compliance/retention.py, attestor/core/agent_memory.py — export_user, purge_user, deletion_audit_log |
| Durable governance jobs | Consolidation, derived-state repair (attestor durable rebuild), the audit-first forget-user saga, and retention / session sweeps run as Temporal workflows with explicit retry policies and an operator UI. The forget saga writes the audit row, deletes document rows, then runs vector, graph, and state concurrently; it retries each backend independently and reports partial state as a failure. Opt-in extra (attestor[durable]); the read path and the Claude Code hooks never touch it. | attestor/durable/, docs/INSTALL.md (Ch. 04) |
The nearest neighbours are the temporal-knowledge-graph memory layers (Zep, Graphiti). For a production mesh the useful comparison is not benchmark accuracy — it is whether the memory layer *itself* enforces roles, budgets, tenancy, provenance, and auditable deletion, or leaves each of those to the calling application. The table above is Attestor's answer; hold any alternative to the same checklist, with file references.
Try it locally in one command.
pipx install attestor && attestor quickstartbrings up Postgres + Pinecone Local + Neo4j in Docker and wires the Claude Code MCP server + hooks so you can watch the governance layer work on a real project. Details in Quick start and Install for Claude Code below.
pip install attestor # or: pipx install attestor
Or pull the container (introspection-grade image, single layer over python:3.12-slim, currently linux/amd64):
docker pull ghcr.io/bolnet/attestor:latest # recommended — anonymous pull, mirrored to all registries below
Same image is mirrored to:
| Registry | Pull address |
|---|---|
| GHCR | ghcr.io/bolnet/attestor:latest |
| Docker Hub | bolnet2025/attestor:latest |
| Quay | quay.io/bolnet/attestor:latest |
| AWS ECR Public | public.ecr.aws/m6h5j7o3/attestor:latest |
| GCP AR | us-central1-docker.pkg.dev/coral-marker-452616-n4/attestor/attestor:latest |
(An internal Azure ACR mirror exists at memwright.azurecr.io/attestor but is private — Azure customers should use az acr import from one of the public registries above.)
The image's default entrypoint is attestor mcp (MCP server over stdio). For full production use, point the container at an external Postgres + Neo4j via env vars (or compose them with attestor/infra/local/docker-compose.yml); override the entrypoint to run attestor doctor, attestor api, etc.
attestor quickstart
attestor quickstart does the whole local install non-interactively and prints every step: it writes ~/.attestor/{config.toml,attestor.yaml,.env}, brings up the three-role local stack in Docker, uses a local Ollama `bge-m3` embedder (no cloud key), wires the Claude Code MCP server (./.mcp.json) + lifecycle hooks, and runs attestor doctor.
Prerequisites: Docker running, and Ollama serving bge-m3 (ollama pull bge-m3). quickstart runs a preflight that scans the ports/tools and tells you if anything is missing — it never prompts.
| Container | Ro