[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M73FBK2A69PSSHB2K53EP7ZD":3,"skill-same:01M73FBK2A69PSSHB2K53EP7ZD":47},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":23,"commitSha":24,"skillDirectory":25,"forksCount":26,"repositoryHtmlUrl":27,"repositoryHomepageUrl":28,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M73FBK2A69PSSHB2K53EP7ZD","raft-consensus-patterns",null,"Horonomos-laps\u002FYana-AI","Horonomos-laps","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F355299122?v=4","01M76B3QPXE88ET2SQPDPVATZT"," Horonomos-laps","01M72ZQRJPCYPSSWT4D00VJR2A",13,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fraft-consensus-patterns\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: raft-consensus-patterns\ndescription: Raft distributed consensus algorithm patterns. Leader election, log replication, safety invariants, snapshot\u002Fcompaction, and membership changes for replicated agent state machines. Sources: hashicorp\u002Fraft (MPL-2.0).\norigin: yana-ai — synthesized from hashicorp\u002Fraft (MPL-2.0), Raft paper (Ongaro & Ousterhout)\nlicense: Apache-2.0\nversion: 1.0.0\ncompatibility: yana-ai >= 1.3.50\n---\n\n# \u002Fraft-consensus-patterns\n\n## When to Use\n\n- Elect a leader agent from a cluster without a single point of failure\n- Replicate agent state (config, task queue) across N nodes — survive N\u002F2 failures\n- Distributed locking: only the leader executes critical operations\n- Ordered event log: every agent agrees on the same sequence of commands\n\n## Do NOT use for\n\n- Single-node deployments (use file-based state)\n- Eventual consistency (use [[yjs-crdt-sync]] or [[automerge-crdt]])\n\n---\n\n## Raft roles and invariants\n\n```\nFOLLOWER  → starts here; transitions to CANDIDATE on election timeout\nCANDIDATE → broadcasts RequestVote; wins if majority grants votes → LEADER\nLEADER    → sends AppendEntries heartbeats; all writes go through leader\n\nSafety invariants (never violated):\n  - Election Safety:   at most one leader per term\n  - Log Matching:      if two logs agree at index i, they agree on all entries ≤ i\n  - Leader Completeness: if entry committed in term T, present in all future leaders\n  - State Machine Safety: if server applies entry at index i, no other server applies different entry at i\n```\n\n---\n\n## Raft node config (hashicorp\u002Fraft style — Node.js skiff-raft)\n\n```javascript\nimport Raft from 'skiff-raft'\n\nconst node = new Raft({\n  id:               'agent-1',\n  peers:            ['agent-2', 'agent-3'],\n  electionTimeout:  [150, 300],  \u002F\u002F ms — randomized to avoid split votes\n  heartbeatInterval: 50,         \u002F\u002F ms — must be \u003C\u003C election timeout\n\n  \u002F\u002F State machine: apply committed log entries\n  apply: async (entry) => {\n    const cmd = JSON.parse(entry.toString())\n    await stateMachine.apply(cmd)\n    console.log('[raft] applied:', cmd)\n  },\n})\n\nnode.on('leader', ()   => console.log('[raft] I am leader'))\nnode.on('follower', () => console.log('[raft] I am follower'))\n```\n\n---\n\n## Write through leader\n\n```javascript\nasync function raftWrite(node, command) {\n  if (!node.isLeader()) {\n    const leader = node.getLeader()\n    throw new Error(`[raft] not leader — redirect to ${leader}`)\n  }\n\n  \u002F\u002F Append to log; committed when majority acknowledges\n  await node.append(Buffer.from(JSON.stringify(command)))\n  console.log('[raft] committed:', command)\n}\n\n\u002F\u002F Usage:\nawait raftWrite(node, { type: 'SET', key: 'agent.tier', value: 'power' })\n```\n\n---\n\n## Leader election timeout tuning\n\n```\nGuideline (from Raft paper):\n  broadcastTime \u003C\u003C electionTimeout \u003C\u003C MTBF\n\n  broadcastTime:   time to send RPC + receive response (~0.5–20ms LAN)\n  electionTimeout: 10–500ms (random in [T, 2T] to avoid split vote)\n  MTBF:            mean time between failures (hours for servers)\n\nTypical:\n  heartbeatInterval = 50ms\n  electionTimeout   = [150ms, 300ms]\n  → cluster recovers from leader failure in \u003C 300ms\n```\n\n---\n\n## Snapshot and log compaction\n\n```javascript\n\u002F\u002F Prevent unbounded log growth — snapshot at checkpoint\nnode.on('needsSnapshot', async () => {\n  const snapshot = await stateMachine.snapshot()\n  await node.saveSnapshot(snapshot, stateMachine.lastAppliedIndex)\n  await node.compactLog(stateMachine.lastAppliedIndex)\n  console.log('[raft] snapshot saved at index', stateMachine.lastAppliedIndex)\n})\n```\n\n---\n\n## Anti-Fake-Pass Checklist\n\n```\n❌ Fixed election timeout → all nodes time out simultaneously → split vote loop forever\n❌ Leader accepts writes before its own no-op is committed → stale reads from previous term\n❌ No log compaction → log grows unbounded, replay takes forever on restart\n❌ Cluster size = 2 → majority = 2, lose one node = cluster halted (use odd N ≥ 3)\n❌ Redirect to leader without retry on client → write rejected when leader changes mid-request\n❌ Applying same log entry twice on restart → idempotent apply is required\n```\n","# \u002Fraft-consensus-patterns\n\n## When to Use\n\n- Elect a leader agent from a cluster without a single point of failure\n- Replicate agent state (config, task queue) across N nodes — survive N\u002F2 failures\n- Distributed locking: only the leader executes critical operations\n- Ordered event log: every agent agrees on the same sequence of commands\n\n## Do NOT use for\n\n- Single-node deployments (use file-based state)\n- Eventual consistency (use [[yjs-crdt-sync]] or [[automerge-crdt]])\n\n---\n\n## Raft roles and invariants\n\n```\nFOLLOWER  → starts here; transitions to CANDIDATE on election timeout\nCANDIDATE → broadcasts RequestVote; wins if majority grants votes → LEADER\nLEADER    → sends AppendEntries heartbeats; all writes go through leader\n\nSafety invariants (never violated):\n  - Election Safety:   at most one leader per term\n  - Log Matching:      if two logs agree at index i, they agree on all entries ≤ i\n  - Leader Completeness: if entry committed in term T, present in all future leaders\n  - State Machine Safety: if server applies entry at index i, no other server applies different entry at i\n```\n\n---\n\n## Raft node config (hashicorp\u002Fraft style — Node.js skiff-raft)\n\n```javascript\nimport Raft from 'skiff-raft'\n\nconst node = new Raft({\n  id:               'agent-1',\n  peers:            ['agent-2', 'agent-3'],\n  electionTimeout:  [150, 300],  \u002F\u002F ms — randomized to avoid split votes\n  heartbeatInterval: 50,         \u002F\u002F ms — must be \u003C\u003C election timeout\n\n  \u002F\u002F State machine: apply committed log entries\n  apply: async (entry) => {\n    const cmd = JSON.parse(entry.toString())\n    await stateMachine.apply(cmd)\n    console.log('[raft] applied:', cmd)\n  },\n})\n\nnode.on('leader', ()   => console.log('[raft] I am leader'))\nnode.on('follower', () => console.log('[raft] I am follower'))\n```\n\n---\n\n## Write through leader\n\n```javascript\nasync function raftWrite(node, command) {\n  if (!node.isLeader()) {\n    const leader = node.getLeader()\n    throw new Error(`[raft] not leader — redirect to ${leader}`)\n  }\n\n  \u002F\u002F Append to log; committed when majority acknowledges\n  await node.append(Buffer.from(JSON.stringify(command)))\n  console.log('[raft] committed:', command)\n}\n\n\u002F\u002F Usage:\nawait raftWrite(node, { type: 'SET', key: 'agent.tier', value: 'power' })\n```\n\n---\n\n## Leader election timeout tuning\n\n```\nGuideline (from Raft paper):\n  broadcastTime \u003C\u003C electionTimeout \u003C\u003C MTBF\n\n  broadcastTime:   time to send RPC + receive response (~0.5–20ms LAN)\n  electionTimeout: 10–500ms (random in [T, 2T] to avoid split vote)\n  MTBF:            mean time between failures (hours for servers)\n\nTypical:\n  heartbeatInterval = 50ms\n  electionTimeout   = [150ms, 300ms]\n  → cluster recovers from leader failure in \u003C 300ms\n```\n\n---\n\n## Snapshot and log compaction\n\n```javascript\n\u002F\u002F Prevent unbounded log growth — snapshot at checkpoint\nnode.on('needsSnapshot', async () => {\n  const snapshot = await stateMachine.snapshot()\n  await node.saveSnapshot(snapshot, stateMachine.lastAppliedIndex)\n  await node.compactLog(stateMachine.lastAppliedIndex)\n  console.log('[raft] snapshot saved at index', stateMachine.lastAppliedIndex)\n})\n```\n\n---\n\n## Anti-Fake-Pass Checklist\n\n```\n❌ Fixed election timeout → all nodes time out simultaneously → split vote loop forever\n❌ Leader accepts writes before its own no-op is committed → stale reads from previous term\n❌ No log compaction → log grows unbounded, replay takes forever on restart\n❌ Cluster size = 2 → majority = 2, lose one node = cluster halted (use odd N ≥ 3)\n❌ Redirect to leader without retry on client → write rejected when leader changes mid-request\n❌ Applying same log entry twice on restart → idempotent apply is required\n```\n",{},"main","481dcd7dd2e288b9d627a2bd017db70e64e6c6fa","core\u002Fskills\u002Fraft-consensus-patterns",1,"https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI","https:\u002F\u002Fyana.vutam.link\u002F","https:\u002F\u002Fgithub.com\u002FHoronomos-laps","https:\u002F\u002Fyana.vutam.link","An open-source governed runtime & execution environment for multi-agent AI systems.","2026-11-11 23:56:26",{"source":7,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add Horonomos-laps\u002FYana-AI --skill raft-consensus-patterns",{"tool":39,"command":40},"bunx","bunx skills add Horonomos-laps\u002FYana-AI --skill raft-consensus-patterns",{"tool":42,"command":43},"pnpm","pnpm dlx skills add Horonomos-laps\u002FYana-AI --skill raft-consensus-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fraft-consensus-patterns\u002FSKILL.md",true,[],[48,56,63,71,79,87],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":52,"licenseFileUrl":6,"sourceHtmlUrl":53,"categories":54,"keywords":55,"publishedAt":18},"01M735GKET5YVYKAY62W2P5YXB","openai--sentry--sentry","Use when the user asks to inspect Sentry issues or events, summarize recent production errors, or pull basic Sentry health data via the Sentry API; perform read-only queries with the bundled script and require `SENTRY_AUTH_TOKEN`.","MIT","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fopenai--sentry--sentry\u002FSKILL.md",[],[],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":18},"01M73DCAP83T17HY7SMGK7MGFE","ito-basket-compare","Compare Itô prediction-market baskets against a user's knowledge base, portfolio notes, financial context, watchlist, or research thesis. Use for read-only basket comparison and gap analysis without investment advice or live trading.","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fito-basket-compare\u002FSKILL.md",[],[],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":67,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":18},"01M734CYEMZFDR3KH6SW0JP8TD","implementing-network-traffic-baselining","Build network traffic baselines from NetFlow\u002FIPFIX data using Python pandas for statistical analysis, z-score anomaly detection, and hourly\u002Fdaily traffic pattern profiling","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-network-traffic-baselining\u002FSKILL.md",[],[],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":75,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":18},"01M73ASZ6NJRJM44Z2P84NGQ3Q","detecting-evasion-techniques-in-endpoint-logs","Detects defense evasion techniques used by adversaries in endpoint logs including log tampering, timestomping, process injection, and security tool disabling. Use when investigating suspicious endpoint behavior, building detection rules for evasion tactics, or conducting threat hunting for stealthy adversary activity. Activates for requests involving evasion detection, defense evasion analysis, log tampering detection, or MITRE ATT&CK TA0005.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fdetecting-evasion-techniques-in-endpoint-logs\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":83,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":18},"01M734AFNXD06Z78QRK0VKGT7Q","implementing-microsegmentation-with-guardicore","Implementing microsegmentation using Akamai Guardicore Segmentation to map application dependencies, create granular network policies, visualize east-west traffic flows, and enforce least-privilege communication between workloads across data centers and cloud.","https:\u002F\u002Fgithub.com\u002Fyanacuti1121\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FLICENSE","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fimplementing-microsegmentation-with-guardicore\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":18},"01M736TK27QMCXK0DVCH25SJN5","ramdisk-tmpfs-patterns","https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Framdisk-tmpfs-patterns\u002FSKILL.md",[],[]]