Stele

io.github.leocelis由 GitHub 账号 leocelis 发布v18.16.2更新于 Nov 6, 2026

Governed agent memory: lessons stay out of search until another actor promotes them with evidence.

已验证STDIO仅桌面知识与记忆AI 与机器学习

概览

AI 生成的概览

面向 AI 代理的本地受治理记忆账本:记录任务经验,仅在有外部证据时晋升,并可检索复用。

可以做什么
  • 新增、批量新增、更新与删除账本条目,新条目先进入隔离区等待晋升
  • 依据外部证据晋升、取代、置顶条目并记录使用效果
  • 检索已晋升条目、按时间点查询信念,并查看链接、关联条目、时间线与血缘
  • 审查争议条目、过期条目、卫生候选与受污染嫌疑,并以有证据的取代方式解决冲突
  • 执行完整性与健康检查,导出或导入脱敏包,快照与比对存储,并按来源清除
适用场景
适合希望代理跨会话、跨代理积累可审计经验教训,且要求未经核实的自我反思不进入检索结果的场景。也适合需要对已存经验做过期跟踪、冲突复核、擦除与来源核查的团队。
运行要求
以本地 stdio 进程运行,从 PyPI 安装 stele-mcp(配合 stele-core),需要 Python 与 Model Context Protocol Python SDK 1.x。存储位置由环境变量 STELE_STORE 指定,默认 ./.stele-store。本地服务未声明认证。
安装前请注意
这些工具会写入、晋升、取代并永久删除条目,清除与快照操作作用于整个存储,建议将 STELE_STORE 指向专用目录。导出与包虽标注为脱敏,仍应确认外发内容。README 另述需 Bearer 密钥的托管 HTTP 版本,请勿将此类密钥或 DSN 写入共享文件。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Stele,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Stele
The governed experiential-memory ledger for AI agents — log what worked and what failed, promote only oracle-verified lessons, and let any agent build solid context from real experience.


What is Stele?

A stele is a stone raised to record what happened — deeds, laws, warnings — for those who come after. Stele is the same idea for AI agents: a centralized ledger of task experience. Agents automatically log what worked and what failed on each task; a governance gate promotes only lessons backed by external evidence; and any agent — today's or a future one — retrieves the distilled experience through one protocol before its next task.

Status: v18.16.1. Design locked in stele_system_intent.yaml. Packages: stele-core (zero runtime deps; optional [mysql]) + stele-mcp (stdio + hosted HTTP) + stele CLI.

Why Stele (research-backed)

ProblemEvidenceStele answer
Recall wins ≠ better actionsMemoryArena (arXiv:2602.16313)Task-outcome harnesses, not recall@k marketing
Self-reflection poisons storesSurvey (arXiv:2603.07670)Quarantine + external oracle only
Every framework is a silomemorywire (arXiv:2606.01138)JSON Schema + projection helpers
Stale lessons misleadLongMemEval (arXiv:2410.10813)Bi-temporal supersede + stale_policy

Full research: docs/research/ · patterns: docs/patterns/.

Install

bash
pip install stele-core stele-mcp

From git (contributors):

bash
python3.11 -m venv .venvsource .venv/bin/activatepip install -r requirements-dev.txtpip install -e packages/stele-core -e packages/stele-mcpmake check   # ruff + mypy + pytestmake proof   # end-to-end PASS/FAIL proof

Quick path: docs/QUICKSTART.md · comparison: docs/COMPARISON.md.

Quick start (library)

python
from pathlib import Pathfrom stele_core import Stele
s = Stele.open(Path(".stele-store"), store_id="demo", now="2026-08-20T12:00:00Z")added = s.add({    "layer": "failure_lesson",    "title": "Pin cache keys to calendar buckets",    "body": "Day-scoped keys prevent stale cross-day reads.",    "scope": "project:demo",    "temporal": {"valid_from": "2026-08-20T12:00:00Z", "last_verified": "2026-08-20T12:00:00Z"},    "provenance": {        "agent": "agent-a", "task": "cache-fix", "environment": "local",        "subject_id": "subj-1", "source": "session:abc",        "written_at": "2026-08-20T12:00:00Z",    },})# → {"id": "se_…", "state": "quarantined"}  — not searchable yet
s.promote(added["id"], [{    "type": "test_result", "issuer": "ci", "ref": "tests/test_cache.py",    "observed_at": "2026-08-20T12:00:00Z", "verdict": "supports",    "command": "pytest -q", "exit_status": 0,}], actor="ci", ts="2026-08-20T12:00:00Z")
print(s.search("cache buckets", consumer_scope="project:demo"))print(s.doctor(now="2026-08-20T12:00:00Z")["ok"])

CLI

bash
stele init ./.stele-store --store-id demostele doctor ./.stele-store --now 2026-08-20T12:00:00Zstele hygiene ./.stele-store --now 2026-08-20T12:00:00Zstele entangled ./.stele-store --source web_page --now 2026-08-20T12:00:00Zstele forget-check ./.stele-store --scope project:demo --subject-id subj-x --probe-query secret --now 2026-08-20T12:00:00Zstele schema --out docs/schemas/entry.schema.jsonstele snapshot ./.stele-store /tmp/stele-backup --now 2026-08-20T12:00:00Z --actor ops

MCP (stdio)

Requires the Model Context Protocol Python SDK 1.x (mcp>=1.0,<2). mcp 2.x removed mcp.server.fastmcp and will not boot this server.

Default (stele-mcp): 35 governed-ledger tools — add, promote, search, doctor, export, …

bash
export STELE_STORE=./.stele-storestele-mcp

Full research library (~2000 PEFT/agent-pattern tools): stele-mcp-full.

MCP (hosted HTTP)

Same tools over HTTPS (SSE + streamable HTTP). Two independent tool surfaces, same process, same auth, same store:

SurfaceSSEStreamable HTTPTools
Full/sse/mcp2003 (ledger + PEFT/pattern research library)
Core (governed ledger only)/core/sse/core/mcp35 — see list below

Production:

Local run (dev):

bash
bash deploy/build.shSTELE_API_KEYS=stl_local_dev STELE_AUTH_DISABLED=false \  STELE_STORE=./.stele-store \  python deploy/wsgi.py --port 8080
  • GET /health — unauthenticated; reports tool_counts: {full, core}
  • /sse + /mcp (full) and /core/sse + /core/mcp (ledger-only) — both Bearer via STELE_API_KEYS
  • Hosted durable SoT: STELE_STORE_DSN + TLS CA (DSN wins over file path)
  • Never commit API keys, DSNs, or PEMs
json
{  "mcpServers": {    "stele": {      "url": "https://stele.leocelis.com/core/sse",      "headers": { "Authorization": "Bearer YOUR_KEY_HERE" }    }  }}

35 governed-ledger tools (TECH_SPEC §7.1-7.9 — everything create_core_app() exposes): add · update · promote · supersede · delete · search · reflect · link · list_contested · resolve_contested · verify · reviewer_corrections · hydrate · export · record_outcome · pin · stale_report · reverify · related · stats · timeline · verify_pack · attach · snapshot · doctor · entry_schema · purge_by_provenance · diff_stores · add_batch · entangled_suspects · hygiene_candidates · forget_compliance · lineage · belief_at · conflict_surface

Architecture

See docs/ARCHITECTURE.md. Planes: Contract · Tools · Governance · Retrieval · Export · Living ledger · Ops.

DocLink
OSS guide (start here)docs/OSS_GUIDE.md
Quickstartdocs/QUICKSTART.md
PRDdocs/PRD.md
TECH_SPEC v1.1docs/TECH_SPEC.md
Entry JSON Schemadocs/schemas/entry.schema.json
Intent (C1–C8)stele_system_intent.yaml

License

MIT · Copyright (c) 2026 Stele contributors

来源:README.md,提交 e9aa604

工具

35

stele_add

ADD a distilled structured entry into quarantine. Pass entry as JSON object string.

输入参数tsentry_json必填

stele_add_batch

Atomic multi-ADD under one lock.

输入参数tsactorentries_json必填

stele_attach

Content-address bytes (base64); optionally LINK to an entry (FF-6).

输入参数tskindactor必填entry_iddata_base64必填

stele_belief_at

Bi-temporal point-in-time belief inventory or SEARCH.

输入参数as_of必填querybudgetconsumer_scope必填principal_scopes_json

stele_conflict_surface

Conflict-preserving contested pairs — no auto-collapse.

输入参数body_max_chars

stele_delete

DELETE by entry_id or subject_id (true erase + index rebuild).

输入参数tsactor必填reasonentry_idsubject_id

stele_diff_stores

Diff this store vs another root (e.g. snapshot) by entry id sets.

输入参数other_root必填

stele_doctor

Operator health report: verify + stats + contested + stale.

输入参数now

stele_entangled_suspects

Human-review queue for LINK-entangled poison (report only).

输入参数limitseed_ids_jsonuntrusted_agents_jsonuntrusted_sources_json

stele_entry_schema

JSON Schema 2020-12 for Stele entries (interop).

无需输入参数。

stele_export

Export a redacted, audience-tiered pack (storage ≠ pack).

输入参数dest必填scope必填expiry必填purpose必填audience必填created_atsubject_allowlist_json

stele_forget_compliance

Post-erasure active-forgetting probe (GateMem-shaped).

输入参数subject_idprobe_queryconsumer_scope必填entry_ids_jsonforbidden_substrings_json

stele_hydrate

Import a redacted pack (ADD; optional promote with external evidence).

输入参数tsactor必填promotepack_dir必填evidence_json

stele_hygiene_candidates

Zombie / net-harm hygiene report — no auto-delete.

输入参数nowlimitunused_before

stele_lineage

Supersede chain + journal audit lineage (TOKI-shaped).

输入参数entry_id必填

stele_list_contested

List contested entries awaiting evidenced resolution (TECH_SPEC Q5).

无需输入参数。

stele_pin

Pin or unpin a promoted lesson for SEARCH priority.

输入参数tsactor必填pinnedentry_id必填

stele_promote

PROMOTE a quarantined entry with external-oracle evidence (JSON array).

输入参数tsactor必填entry_id必填evidence_json必填block_injection_suspects

stele_purge_by_provenance

Provenance recovery: dry-run or purge entries from untrusted source/agent.

输入参数tsactor必填dry_rununtrusted_agents_jsonuntrusted_sources_json

stele_record_outcome

Record helpful/harmful/ignored after using a lesson; helpful refreshes last_verified.

输入参数tsnoteactor必填outcome必填entry_id必填

stele_reflect

REFLECT: dedupe, expire, surface conflicts (no auto-resolve).

输入参数tsactor必填stale_before

stele_resolve_contested

Resolve a contested pair by evidenced supersede — never auto-merge.

输入参数tsactor必填loser_id必填winner_id必填evidence_json必填

stele_reverify

Batch-refresh last_verified with external oracle evidence.

输入参数tsactor必填evidence_json必填entry_ids_json必填

stele_reviewer_corrections

Bounded contested-first correction slice for reviewer roles.

输入参数limitinclude_contested

stele_snapshot

Cold-copy SoT (manifest, journal, entries, attachments) to dest.

输入参数tsdest必填actor必填

stele_stale_report

List promoted entries past the staleness horizon.

输入参数now

stele_stats

Store health dashboard: counts by state/layer/scope.

输入参数now

stele_supersede

SUPERSEDE an old lesson with a new quarantined entry (history kept).

输入参数tsactor必填old_id必填new_entry_json必填

stele_timeline

Journal history for one entry.

输入参数entry_id必填

stele_update

UPDATE non-state fields on an existing entry.

输入参数tsactor必填entry_id必填patch_json必填

stele_verify

C4 integrity report: dual-location, schema, journal parse.

无需输入参数。

stele_verify_pack

Offline pack integrity: stamps + secret scan.

输入参数pack_dir必填

版本历史

1
  1. v18.16.2最新Nov 6, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分