MYR — Methodological Yield Reports
A pistis-native intelligence compounding system. Every meaningful OODA cycle (Observe, Orient, Decide, Act) produces yield — techniques, insights, falsifications, patterns. MYR captures it cryptographically signed so it compounds across sessions, agents, and nodes.
Repo: https://github.com/JordanGreenhall/myr-system
Required Outputs
For every MYR operation, return:
- 1. Action performed
- Artifact IDs affected
- Verification result
- Next recommended step
Installation (New Node)
One-step install (recommended)
CODEBLOCK0
This clones the repo, installs dependencies, generates your keypair, prompts for a node ID, runs the five-command ping test, and adds MYR_HOME to your shell. Node is operational when it completes.
If you already have the repo cloned:
CODEBLOCK1
Manual install
CODEBLOCK2
Edit config.json:
- - Set unique
node_id (short, e.g. n2, north-star) — must not be n1 - Set
port (default: 3719, choose any open port) - Set
node_url to your externally reachable address (Tailscale IP recommended — see Network section) - Confirm paths and key locations are writable
Generate keys:
CODEBLOCK3
Set environment:
CODEBLOCK4
Node Identity
Every node must have a unique node_id and a node_uuid. These are set during keygen and enforced at runtime.
All scripts refuse to run if node_id is still the default "n1". You will get an error with remediation steps and exit 1.
INLINECODE12 generates your keypair and writes node_uuid to config.json automatically. Verify your identity:
CODEBLOCK5
Output:
CODEBLOCK6
Verify Installation (Ping Test)
Run all five. All must succeed.
CODEBLOCK7
If all five succeed, node is operational.
HTTP Server (Live Peer Sync)
MYR includes an HTTP server for live peer-to-peer synchronization. Peers sync automatically on a schedule — no manual package exchange required.
Start the server
CODEBLOCK8
Output:
CODEBLOCK9
Run as a persistent service (macOS launchd)
Create ~/Library/LaunchAgents/com.myr.server.plist:
CODEBLOCK10
CODEBLOCK11
Verify:
CODEBLOCK12
Server endpoints
| Endpoint | Auth | Purpose |
|---|
| INLINECODE16 | None | Node discovery (protocol version, public key, capabilities) |
| INLINECODE17 |
None | Health check (status, peer count, report count) |
|
GET /myr/reports | Peer key | List shareable reports (supports
since,
limit params) |
|
GET /myr/reports/:signature | Peer key | Fetch individual report |
|
POST /myr/peers/announce | None | Peer announces itself for pairing |
Network reachability
Peers must be able to reach each other's server. Options:
- - Tailscale (recommended): Install Tailscale on both nodes, set
node_url to your Tailscale IP (e.g. http://100.x.x.x:3719). Private, encrypted, no port forwarding needed. - VPN: Any shared VPN works the same way.
- Public internet: Set
node_url to your public IP/domain with port forwarding. Less recommended.
Peer Management
The bin/myr.js CLI manages live peers.
Add a peer by URL
CODEBLOCK13
This fetches the peer's discovery document, registers their public key, and sets trust to pending.
Exchange fingerprints out-of-band (required)
Before approving any peer, verify their fingerprint through a separate channel (voice, Signal, in-person):
CODEBLOCK14
Do not approve a peer without confirming fingerprints out-of-band. This is the trust anchor.
Approve or reject
CODEBLOCK15
List peers
CODEBLOCK16
Manual sync (on demand)
CODEBLOCK17
Automatic sync runs every 15 minutes for all trusted peers once the server is running.
Mark reports as shareable
Only reports explicitly marked share_network=1 are served to peers. Mark your verified reports:
CODEBLOCK18
Connecting to an Existing Peer (Full Flow)
- 1. Start your server and confirm it's reachable at your INLINECODE29
- Get peer's URL — their Tailscale IP and port
- Add them: INLINECODE30
- Exchange fingerprints out-of-band — call, Signal, in-person
- Approve: INLINECODE31
- Ask peer to approve you — they run the same steps from their side
- Verify sync:
node bin/myr.js sync <peer-node-id> — should return reports - Mark your reports shareable (see above) so peers can pull from you
Peer Verification (v1.2.0)
MYR v1.2.0 introduces in-band fingerprint verification during the announce flow. When a peer announces to your node, a 3-way check runs automatically:
- 1. The announced fingerprint matches the fingerprint computed from the announced public key.
- The peer's discovery document is fetched from their URL.
- The discovery document fingerprint matches both the announced and computed fingerprints.
Peers passing all three checks are marked verified-pending-approval. Peers failing any check are rejected with evidence stored for audit.
Verify a remote peer (CLI)
CODEBLOCK19
Returns verified status, operator name, fingerprint, and latency. Exit code 1 on failure.
Announce to a peer
When adding a peer with myr peer add --url <url>, MYR fetches the peer's discovery document and sends an introduce request. In v1.2.0, the announce body includes fingerprint, node_uuid, and protocol_version fields for in-band verification.
Auto-approve verified peers
Set auto_approve_verified_peers: true in your node config (~/.myr/config.json or config.json) to automatically trust peers that pass 3-way fingerprint verification:
CODEBLOCK20
When enabled:
- - Peers announcing with protocol version ≥
auto_approve_min_protocol_version (default 1.2.0) that pass 3-way verification are immediately trusted. - A reciprocal announce is sent automatically so both sides can establish trust in a single round-trip.
- The
auto_approved flag is recorded in the peer record for audit.
Security note: Only enable auto-approve on nodes where you trust the network environment. On untrusted networks, keep manual approval (auto_approve_verified_peers: false, the default) and verify fingerprints out-of-band.
Capturing Yield
CODEBLOCK21
Yield types:
- -
technique — reusable method that works - INLINECODE47 — orientation-changing understanding
- INLINECODE48 — proof something does not work (high value)
- INLINECODE49 — recurring structure across cycles
Searching Prior Yield
CODEBLOCK22
Use before known-domain work, architecture decisions, and when asked "what do we know about X?"
Verification and Rating Policy
- - Rating scale is 1–5.
- Only designated operators may assign final ratings.
- A MYR is "network-eligible" only after at least 1 operator review with rating ≥ 3.
- Node join criterion: at least 10 MYRs, average operator rating ≥ 3.0 over the most recent 10 reviewed MYRs.
CODEBLOCK23
Weekly Digest
CODEBLOCK24
Manual Package Exchange (Alternative to Live Sync)
If live server sync is not available, export/import signed packages manually.
Export
CODEBLOCK25
Produces signed JSON in $MYR_HOME/exports/.
Import
CODEBLOCK26
Import errors:
- -
"You are importing your own artifacts" — nodeid and nodeuuid match your node. Exit 2. - INLINECODE52 — nodeid matches but nodeuuid differs. Peer must set a unique node_id and re-export. Exit 2.
- Key mismatch: import exits 3 with remediation. No silent key overwrite.
Cross-Node Synthesis
CODEBLOCK27
Identifies convergent findings, divergences, and unique contributions across nodes.
Signing and Trust Requirements
- - Every exported MYR bundle must include a detached signature and signer ID.
- Import must fail closed on signature verification failure.
- Never merge unsigned or unverifiable MYRs into trusted datasets.
Memory-System Integration (Async)
- - MYR capture must be fire-and-forget from the primary agent flow.
- Do not block user response on MYR persistence.
- On persistence failure, log the error and surface a non-fatal warning.
ID Format
INLINECODE53 — example: INLINECODE54
Architecture
For network protocol and scale roadmap, see:
INLINECODE55
MYR — 方法论产出报告
一个基于pistis原生的智能复合系统。每个有意义的OODA循环(观察、定向、决策、行动)都会产生产出——技术、洞察、证伪、模式。MYR以加密签名方式捕获这些产出,使其在会话、代理和节点之间持续复合。
仓库: https://github.com/JordanGreenhall/myr-system
必需输出
对于每个MYR操作,返回:
- 1. 执行的操作
- 受影响的工件ID
- 验证结果
- 下一步建议
安装(新节点)
一键安装(推荐)
bash
curl -fsSL https://raw.githubusercontent.com/JordanGreenhall/myr-system/main/install.sh | bash
此操作会克隆仓库、安装依赖、生成密钥对、提示输入节点ID、运行五项命令的ping测试,并将MYR_HOME添加到您的shell中。完成后节点即可运行。
如果您已经克隆了仓库:
bash
bash install.sh
手动安装
bash
git clone https://github.com/JordanGreenhall/myr-system.git
cd myr-system
npm install
cp config.example.json config.json
编辑config.json:
- - 设置唯一的nodeid(简短,例如n2、north-star)——不能为n1
- 设置port(默认:3719,选择任意开放端口)
- 将nodeurl设置为外部可访问的地址(推荐使用Tailscale IP——参见网络部分)
- 确认路径和密钥位置可写
生成密钥:
bash
node scripts/myr-keygen.js
设置环境变量:
bash
export MYR_HOME=/绝对路径/to/myr-system
节点身份
每个节点必须有唯一的nodeid和nodeuuid。这些在密钥生成时设置,并在运行时强制执行。
如果node_id仍为默认的n1,所有脚本将拒绝运行。 您将收到包含修复步骤的错误信息并退出(exit 1)。
myr-keygen生成您的密钥对,并自动将node_uuid写入config.json。验证您的身份:
bash
node $MYR_HOME/scripts/myr-identity.js
输出:
MYR 节点身份
─────────────────────────────────────────
node_id: n2
node_uuid: 0c12b56f-0e44-44df-82a9-53d32dd0b1f3
key: SHA256:212a98c0e6f6b3c9…
指纹: n2 / 0c12b56f / SHA256:212a98c0e6f6b3c9…
─────────────────────────────────────────
验证安装(Ping测试)
运行全部五项。必须全部成功。
bash
cd $MYR_HOME
node scripts/myr-store.js --intent 安装测试 --type technique \
--question MYR在此节点上是否正常工作? --evidence 存储成功 \
--changes MYR已可运行 --tags test
node scripts/myr-search.js --query 安装测试
node scripts/myr-verify.js --queue
node scripts/myr-sign.js --all
node scripts/myr-export.js --all
如果全部五项成功,节点即可运行。
HTTP服务器(实时对等同步)
MYR包含一个用于实时点对点同步的HTTP服务器。对等节点按计划自动同步——无需手动交换包。
启动服务器
bash
cd $MYR_HOME
node server/index.js
输出:
MYR节点服务器正在监听端口3719
发现:http://<您的IP>:3719/.well-known/myr-node
健康:http://<您的IP>:3719/myr/health
作为持久服务运行(macOS launchd)
创建~/Library/LaunchAgents/com.myr.server.plist:
xml
Label
com.myr.server
ProgramArguments
/usr/local/bin/node
/path/to/myr-system/server/index.js
WorkingDirectory
/path/to/myr-system
EnvironmentVariables
MYR_HOME
/path/to/myr-system
RunAtLoad
KeepAlive
StandardOutPath
/path/to/myr-system/logs/server.log
StandardErrorPath
/path/to/myr-system/logs/server-error.log
bash
mkdir -p $MYR_HOME/logs
launchctl load ~/Library/LaunchAgents/com.myr.server.plist
验证:
bash
curl http://localhost:<端口>/myr/health
服务器端点
| 端点 | 认证 | 用途 |
|---|
| GET /.well-known/myr-node | 无 | 节点发现(协议版本、公钥、能力) |
| GET /myr/health |
无 | 健康检查(状态、对等节点数、报告数) |
| GET /myr/reports | 对等节点密钥 | 列出可共享报告(支持since、limit参数) |
| GET /myr/reports/:signature | 对等节点密钥 | 获取单个报告 |
| POST /myr/peers/announce | 无 | 对等节点自我宣告以进行配对 |
网络可达性
对等节点必须能够相互访问对方的服务器。选项:
- - Tailscale(推荐): 在两个节点上安装Tailscale,将nodeurl设置为您的Tailscale IP(例如http://100.x.x.x:3719)。私有、加密、无需端口转发。
- VPN: 任何共享VPN的工作方式相同。
- 公共互联网: 将nodeurl设置为您的公共IP/域名并配置端口转发。不太推荐。
对等节点管理
bin/myr.js CLI管理实时对等节点。
通过URL添加对等节点
bash
node $MYR_HOME/bin/myr.js add-peer http://<对等节点Tailscale IP>:<端口>
此操作获取对等节点的发现文档,注册其公钥,并将信任状态设置为pending。
带外交换指纹(必需)
在批准任何对等节点之前,通过独立渠道(语音、Signal、面对面)验证其指纹:
bash
您的指纹——与您的对等节点分享此信息
node $MYR_HOME/bin/myr.js fingerprint
对等节点的指纹——确认这与他们告诉您的信息一致
node $MYR_HOME/bin/myr.js peer-fingerprint <对等节点ID>
未经带外确认指纹,不要批准对等节点。 这是信任锚点。
批准或拒绝
bash
node $MYR_HOME/bin/myr.js approve-peer <节点ID或URL>
node $MYR_HOME/bin/myr.js reject-peer <节点ID或URL>
列出对等节点
bash
node $MYR_HOME/bin/myr.js peers
手动同步(按需)
bash
node $MYR_HOME/bin/myr.js sync <对等节点ID>
服务器运行后,自动同步每15分钟对所有受信任的对等节点执行一次。
将报告标记为可共享
只有明确标记share_network=1的报告才会提供给对等节点。标记您已验证的报告:
sql
-- 在您的MYR数据库中(db/myr.db)
BEGIN IMMEDIATE;
UPDATE myrreports SET sharenetwork=1
WHERE nodeid=<您的节点ID> AND operatorrating >= 3 AND verified_at IS NOT NULL;
COMMIT;
连接到现有对等节点(完整流程)
- 1. 启动您的服务器并确认在您的node_url处可访问
- 获取对等节点的URL——他们的Tailscale IP和端口
- 添加他们: node bin/myr.js add-peer <对等节点URL>
- 带外交换指纹——电话、Signal、面对面
- 批准: node bin/myr.js approve-peer <对等节点ID>
- 请对等节点批准