[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M73FBNTXZXM681MYNWM3ACYN":3,"skill-same:01M73FBNTXZXM681MYNWM3ACYN":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},"01M73FBNTXZXM681MYNWM3ACYN","raft-node-js-impl",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-node-js-impl\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: raft-node-js-impl\ndescription: Node.js-native Raft consensus implementation for embedding distributed consensus directly into agent processes. In-process leader election, log replication via TCP, and state machine callbacks without external services. Sources: skiff-project\u002Fskiff (MIT).\norigin: yana-ai — synthesized from skiff-project\u002Fskiff (MIT)\nlicense: Apache-2.0\nversion: 1.0.0\ncompatibility: yana-ai >= 1.3.50\n---\n\n# \u002Fraft-node-js-impl\n\n## When to Use\n\n- Embed Raft consensus inside the Node.js agent process — no external etcd\u002FZooKeeper\n- Yamtam Swarm: elect a coordinator agent from a cluster of 3+ agents in-process\n- Lightweight: no JVM, no separate binary — pure Node.js TCP-based Raft\n- Prototype consensus behavior before committing to a full distributed database\n\n## Do NOT use for\n\n- Production clusters requiring battle-tested Raft (use [[etcd-distributed-config]])\n- Cross-language clusters (this is Node.js only)\n\n---\n\n## Skiff node setup\n\n```javascript\nimport Skiff from 'skiff'\n\n\u002F\u002F Each agent runs one Skiff node\nconst node = Skiff('agent-1', {\n  \u002F\u002F Persistent storage path for this node's log\n  location: '.\u002Fdata\u002Fraft\u002Fagent-1',\n\n  \u002F\u002F Cluster members (must be same across all nodes)\n  peers: [\n    { id: 'agent-2', hostname: '10.0.0.2', port: 9001 },\n    { id: 'agent-3', hostname: '10.0.0.3', port: 9001 },\n  ],\n\n  \u002F\u002F TCP transport settings\n  transport: {\n    connections: {\n      hostname: '0.0.0.0',\n      port:     9001,\n    },\n  },\n\n  \u002F\u002F Election timeout (ms) — randomize to avoid split votes\n  electionTimeout:   { from: 150, to: 300 },\n  heartbeatInterval: 50,\n})\n```\n\n---\n\n## State machine: apply committed commands\n\n```javascript\n\u002F\u002F Commands applied to the state machine after Raft commits them\nnode.on('applied', (entry) => {\n  const cmd = JSON.parse(entry.toString())\n  console.log('[raft-node] applied:', cmd)\n\n  switch (cmd.type) {\n    case 'SET':\n      stateStore.set(cmd.key, cmd.value)\n      break\n    case 'DELETE':\n      stateStore.delete(cmd.key)\n      break\n  }\n})\n\nnode.on('leader', ()   => console.log('[raft-node] became leader'))\nnode.on('follower', () => console.log('[raft-node] became follower'))\nnode.on('candidate', () => console.log('[raft-node] election in progress'))\n```\n\n---\n\n## Write through the cluster\n\n```javascript\n\u002F\u002F Only the leader can commit writes\nasync function clusterWrite(key: string, value: unknown) {\n  if (!node.is('leader')) {\n    \u002F\u002F Forward to leader or wait for election\n    throw new Error(`[raft-node] not leader — current leader: ${node.leader()}`)\n  }\n\n  await new Promise\u003Cvoid>((resolve, reject) => {\n    const cmd = JSON.stringify({ type: 'SET', key, value })\n    node.command(Buffer.from(cmd), (err) => {\n      if (err) reject(err)\n      else     resolve()\n    })\n  })\n}\n\n\u002F\u002F Write (safe even across leader changes via retry)\nasync function safeWrite(key: string, value: unknown, retries = 3) {\n  for (let i = 0; i \u003C retries; i++) {\n    try {\n      await clusterWrite(key, value)\n      return\n    } catch (err: any) {\n      if (i === retries - 1) throw err\n      await new Promise(r => setTimeout(r, 200))  \u002F\u002F wait for election\n    }\n  }\n}\n```\n\n---\n\n## Cluster startup sequence\n\n```javascript\n\u002F\u002F Start the node (begins listening for peers)\nawait node.start()\n\n\u002F\u002F Wait for cluster to stabilize (leader elected)\nawait new Promise\u003Cvoid>((resolve) => {\n  const check = () => {\n    if (node.leader()) { resolve(); return }\n    setTimeout(check, 100)\n  }\n  check()\n})\n\nconsole.log('[raft-node] cluster ready, leader:', node.leader())\n```\n\n---\n\n## Anti-Fake-Pass Checklist\n\n```\n❌ Only 2 nodes → majority = 2, one failure = cluster halted; always use odd N ≥ 3\n❌ Same port on all nodes on one machine → bind conflict; use distinct ports per node\n❌ node.command() before node.start() → commands silently dropped\n❌ No retry on write → leader election mid-write returns error; must retry after election\n❌ Not handling 'leader' event to update routing table → clients still writing to old leader\n❌ location path not persisted → node restarts with empty log, rejoins as fresh peer, replays from peers\n```\n","# \u002Fraft-node-js-impl\n\n## When to Use\n\n- Embed Raft consensus inside the Node.js agent process — no external etcd\u002FZooKeeper\n- Yamtam Swarm: elect a coordinator agent from a cluster of 3+ agents in-process\n- Lightweight: no JVM, no separate binary — pure Node.js TCP-based Raft\n- Prototype consensus behavior before committing to a full distributed database\n\n## Do NOT use for\n\n- Production clusters requiring battle-tested Raft (use [[etcd-distributed-config]])\n- Cross-language clusters (this is Node.js only)\n\n---\n\n## Skiff node setup\n\n```javascript\nimport Skiff from 'skiff'\n\n\u002F\u002F Each agent runs one Skiff node\nconst node = Skiff('agent-1', {\n  \u002F\u002F Persistent storage path for this node's log\n  location: '.\u002Fdata\u002Fraft\u002Fagent-1',\n\n  \u002F\u002F Cluster members (must be same across all nodes)\n  peers: [\n    { id: 'agent-2', hostname: '10.0.0.2', port: 9001 },\n    { id: 'agent-3', hostname: '10.0.0.3', port: 9001 },\n  ],\n\n  \u002F\u002F TCP transport settings\n  transport: {\n    connections: {\n      hostname: '0.0.0.0',\n      port:     9001,\n    },\n  },\n\n  \u002F\u002F Election timeout (ms) — randomize to avoid split votes\n  electionTimeout:   { from: 150, to: 300 },\n  heartbeatInterval: 50,\n})\n```\n\n---\n\n## State machine: apply committed commands\n\n```javascript\n\u002F\u002F Commands applied to the state machine after Raft commits them\nnode.on('applied', (entry) => {\n  const cmd = JSON.parse(entry.toString())\n  console.log('[raft-node] applied:', cmd)\n\n  switch (cmd.type) {\n    case 'SET':\n      stateStore.set(cmd.key, cmd.value)\n      break\n    case 'DELETE':\n      stateStore.delete(cmd.key)\n      break\n  }\n})\n\nnode.on('leader', ()   => console.log('[raft-node] became leader'))\nnode.on('follower', () => console.log('[raft-node] became follower'))\nnode.on('candidate', () => console.log('[raft-node] election in progress'))\n```\n\n---\n\n## Write through the cluster\n\n```javascript\n\u002F\u002F Only the leader can commit writes\nasync function clusterWrite(key: string, value: unknown) {\n  if (!node.is('leader')) {\n    \u002F\u002F Forward to leader or wait for election\n    throw new Error(`[raft-node] not leader — current leader: ${node.leader()}`)\n  }\n\n  await new Promise\u003Cvoid>((resolve, reject) => {\n    const cmd = JSON.stringify({ type: 'SET', key, value })\n    node.command(Buffer.from(cmd), (err) => {\n      if (err) reject(err)\n      else     resolve()\n    })\n  })\n}\n\n\u002F\u002F Write (safe even across leader changes via retry)\nasync function safeWrite(key: string, value: unknown, retries = 3) {\n  for (let i = 0; i \u003C retries; i++) {\n    try {\n      await clusterWrite(key, value)\n      return\n    } catch (err: any) {\n      if (i === retries - 1) throw err\n      await new Promise(r => setTimeout(r, 200))  \u002F\u002F wait for election\n    }\n  }\n}\n```\n\n---\n\n## Cluster startup sequence\n\n```javascript\n\u002F\u002F Start the node (begins listening for peers)\nawait node.start()\n\n\u002F\u002F Wait for cluster to stabilize (leader elected)\nawait new Promise\u003Cvoid>((resolve) => {\n  const check = () => {\n    if (node.leader()) { resolve(); return }\n    setTimeout(check, 100)\n  }\n  check()\n})\n\nconsole.log('[raft-node] cluster ready, leader:', node.leader())\n```\n\n---\n\n## Anti-Fake-Pass Checklist\n\n```\n❌ Only 2 nodes → majority = 2, one failure = cluster halted; always use odd N ≥ 3\n❌ Same port on all nodes on one machine → bind conflict; use distinct ports per node\n❌ node.command() before node.start() → commands silently dropped\n❌ No retry on write → leader election mid-write returns error; must retry after election\n❌ Not handling 'leader' event to update routing table → clients still writing to old leader\n❌ location path not persisted → node restarts with empty log, rejoins as fresh peer, replays from peers\n```\n",{},"main","481dcd7dd2e288b9d627a2bd017db70e64e6c6fa","core\u002Fskills\u002Fraft-node-js-impl",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-node-js-impl",{"tool":39,"command":40},"bunx","bunx skills add Horonomos-laps\u002FYana-AI --skill raft-node-js-impl",{"tool":42,"command":43},"pnpm","pnpm dlx skills add Horonomos-laps\u002FYana-AI --skill raft-node-js-impl","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FHoronomos-laps\u002FYana-AI\u002Fblob\u002Fmain\u002Fcore\u002Fskills\u002Fraft-node-js-impl\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",[],[]]