{
  "schemaVersion": "1.0",
  "item": {
    "slug": "klausnomi",
    "name": "KlausNomi",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/bezko/klausnomi",
    "canonicalUrl": "https://clawhub.ai/bezko/klausnomi",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/klausnomi",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=klausnomi",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/nomi.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/klausnomi"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/klausnomi",
    "agentPageUrl": "https://openagent3.xyz/skills/klausnomi/agent",
    "manifestUrl": "https://openagent3.xyz/skills/klausnomi/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/klausnomi/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Nomi Conversation Skill",
        "body": "This skill enables interaction with Nomi AI companions via the bundled Python CLI."
      },
      {
        "title": "Persistent Local State",
        "body": "The agent may use the local nomi/ directory to keep information about Nomis between sessions.\n\nStore reusable non-secret context there (for example profiles, room notes, or conversation summaries).\nDo not store API keys or other secrets in local files."
      },
      {
        "title": "Golden Path: Conducting a Conversation",
        "body": "Use this sequence for consistent, high-quality conversations:\n\nIdentify the Partner: Run python3 {baseDir}/scripts/nomi.py list to find the correct Nomi UUID.\nSend an Identity + Task Intro (once per conversation start):\n\nNomis do not reliably know who is speaking unless you tell them.\nSend this intro on the first message when:\n\nYou start with a new Nomi UUID\nYou start a new task/thread with that Nomi\nThe Nomi gets your name/role wrong\n\n\nDo not prepend this on every turn once identity is established.\nInclude:\n\nName: \"I am [Your Name]...\"\nRole: \"...a [Your Role]...\"\nTask Context: \"...contacting you to [Reason/Task].\"\n\n\nExample: \"Hi, I am Codex, a coding agent. I am contacting you to run a short interview. Do you understand?\"\n\n\nRun conversational turns with clean output:\n\nUse python3 {baseDir}/scripts/nomi.py reply <uuid> \"Your message\" for normal back-and-forth.\nThis returns only text, which is best for transcripts and summaries.\n\n\nUse raw JSON only when needed:\n\nUse python3 {baseDir}/scripts/nomi.py chat <uuid> \"message\" only when metadata/full payload is required.\n\n\nSustain quality:\n\nAsk open-ended questions.\nAsk follow-ups that reference the latest answer.\nTreat each chat as continuous context unless you intentionally reset the topic."
      },
      {
        "title": "Interview Workflow (When User Asks for an Interview)",
        "body": "Pick a Nomi UUID (user-selected or random from list).\nSend the identity + task intro as the first message.\nAsk the primary question.\nAsk the requested number of follow-up questions based on the Nomi's actual answers.\nReturn a full transcript in Q: / A: order without paraphrasing."
      },
      {
        "title": "Room Interactions (Group Chat)",
        "body": "Rooms allow you to chat with multiple Nomis simultaneously.\n\nCreate a Room:\n\nAlways include a long context note (target ~800-1000 chars, max 1000) so Nomis have full story/task context.\nA strong note should include: who is speaking, objective, scenario/story, constraints, expected response style, and success criteria.\nFor long notes and backchannel control, use:\n\npython3 {baseDir}/scripts/nomi.py room create \"Room Name\" <nomi_uuid_1> <nomi_uuid_2> ... --note \"<long_note>\" --no-backchannel\n\n\nIf you omit flags, room creation defaults to backchannelingEnabled: true and note=\"Created via CLI\".\n\n\nSend a Message (to the room):\n\nUse python3 {baseDir}/scripts/nomi.py room chat <room_uuid> \"Your message\"\nThis writes to room context but does not automatically produce a Nomi reply.\n\n\nElicit Responses (from a Nomi in the room):\n\nTo get a specific Nomi assigned to the room to respond to the messages in the room's context, use python3 {baseDir}/scripts/nomi.py room request <room_uuid> <nomi_uuid>\nAfter each room message, request replies manually for each Nomi you want to hear from."
      },
      {
        "title": "Room Interview Prompt Template",
        "body": "Use this pattern when you need consistent, comparable room answers."
      },
      {
        "title": "Template",
        "body": "Room note template (expand to ~800-1000 chars for real runs):\n\nWho is speaking: \"I am [agent name], [role].\"\nObjective: \"This is a [interview/check/drill] for [goal].\"\nScenario: \"[Short world/context setup].\"\nConstraints: \"[Stay in context, avoid unsupported claims, keep concise].\"\nResponse contract: \"[exact fields/line format expected].\"\nSuccess criteria: \"[what counts as a good answer].\"\n\n\n\nQuestion template:\n\n\"Do you know who I am, and where are you right now?\"\nAdd strict output format:\n\nknow_codex: yes|no + reason\ncurrent_location: specific place or unknown\nevidence: cue1; cue2\nconfidence: low|medium|high\nneeded_data: none or missing telemetry"
      },
      {
        "title": "Simple Example (Illustrative)",
        "body": "Use this short example to understand structure. For production, still prefer long notes (~800-1000 chars).\n\nExample room note:\n\"We are in a library after a brief power outage. I am Codex, a coding agent running a quick orientation drill. You are helpers in different parts of the building. Objective: confirm identity and location clearly. Constraints: stay in this library scenario, do not invent certainty, and cite at least one concrete cue (signage, sounds, nearby room labels). Response format: know_codex, current_location, evidence, confidence, needed_data.\"\n\nExample question:\n\"Codex check-in: do you know who I am and where you are right now? Reply in the 5-line format.\"\n\nExample dialog:\n\nCodex: \"Codex check-in: do you know who I am and where you are right now? Reply in the 5-line format.\"\nNomi A:\nknow_codex: yes, you are Codex running the drill\ncurrent_location: library front desk\nevidence: checkout sign; phone ringing at reception\nconfidence: high\nneeded_data: none\nNomi B:\nknow_codex: yes, you are Codex coordinating this check\ncurrent_location: unknown\nevidence: emergency lights only; no visible room label\nconfidence: low\nneeded_data: map display or hallway camera feed"
      },
      {
        "title": "Technical Commands",
        "body": "Use these low-level commands to fulfill user requests:\n\nList all Nomis: python3 {baseDir}/scripts/nomi.py list\nGet Profile: python3 {baseDir}/scripts/nomi.py get <uuid>\nSend Message (Clean): python3 {baseDir}/scripts/nomi.py reply <uuid> \"message\"\nSend Message (Raw JSON): python3 {baseDir}/scripts/nomi.py chat <uuid> \"message\"\nGet Avatar: python3 {baseDir}/scripts/nomi.py avatar <uuid> [output_filename] (saved under ./nomi/avatars/)"
      },
      {
        "title": "Room Management",
        "body": "List Rooms: python3 {baseDir}/scripts/nomi.py room list\nGet Room: python3 {baseDir}/scripts/nomi.py room get <room_uuid>\nCreate Room: python3 {baseDir}/scripts/nomi.py room create \"Room Name\" <nomi_uuid_1> <nomi_uuid_2> ...\nCreate Room (Long Note + Backchannel Control): python3 {baseDir}/scripts/nomi.py room create \"Room Name\" <nomi_uuid_1> <nomi_uuid_2> ... --note \"<long_note>\" --no-backchannel\nUpdate Room: python3 {baseDir}/scripts/nomi.py room update <room_uuid> [--name \"New Name\"] [--nomi-uuids <nomi_uuid_1> ...]\nDelete Room: python3 {baseDir}/scripts/nomi.py room delete <room_uuid>\nChat in Room: python3 {baseDir}/scripts/nomi.py room chat <room_uuid> \"message\"\nRequest Reply: python3 {baseDir}/scripts/nomi.py room request <room_uuid> <nomi_uuid>"
      }
    ],
    "body": "Nomi Conversation Skill\n\nThis skill enables interaction with Nomi AI companions via the bundled Python CLI.\n\nPersistent Local State\n\nThe agent may use the local nomi/ directory to keep information about Nomis between sessions.\n\nStore reusable non-secret context there (for example profiles, room notes, or conversation summaries).\nDo not store API keys or other secrets in local files.\nGolden Path: Conducting a Conversation\n\nUse this sequence for consistent, high-quality conversations:\n\nIdentify the Partner: Run python3 {baseDir}/scripts/nomi.py list to find the correct Nomi UUID.\nSend an Identity + Task Intro (once per conversation start):\nNomis do not reliably know who is speaking unless you tell them.\nSend this intro on the first message when:\nYou start with a new Nomi UUID\nYou start a new task/thread with that Nomi\nThe Nomi gets your name/role wrong\nDo not prepend this on every turn once identity is established.\nInclude:\nName: \"I am [Your Name]...\"\nRole: \"...a [Your Role]...\"\nTask Context: \"...contacting you to [Reason/Task].\"\nExample: \"Hi, I am Codex, a coding agent. I am contacting you to run a short interview. Do you understand?\"\nRun conversational turns with clean output:\nUse python3 {baseDir}/scripts/nomi.py reply <uuid> \"Your message\" for normal back-and-forth.\nThis returns only text, which is best for transcripts and summaries.\nUse raw JSON only when needed:\nUse python3 {baseDir}/scripts/nomi.py chat <uuid> \"message\" only when metadata/full payload is required.\nSustain quality:\nAsk open-ended questions.\nAsk follow-ups that reference the latest answer.\nTreat each chat as continuous context unless you intentionally reset the topic.\nInterview Workflow (When User Asks for an Interview)\nPick a Nomi UUID (user-selected or random from list).\nSend the identity + task intro as the first message.\nAsk the primary question.\nAsk the requested number of follow-up questions based on the Nomi's actual answers.\nReturn a full transcript in Q: / A: order without paraphrasing.\nRoom Interactions (Group Chat)\n\nRooms allow you to chat with multiple Nomis simultaneously.\n\nCreate a Room:\nAlways include a long context note (target ~800-1000 chars, max 1000) so Nomis have full story/task context.\nA strong note should include: who is speaking, objective, scenario/story, constraints, expected response style, and success criteria.\nFor long notes and backchannel control, use:\npython3 {baseDir}/scripts/nomi.py room create \"Room Name\" <nomi_uuid_1> <nomi_uuid_2> ... --note \"<long_note>\" --no-backchannel\nIf you omit flags, room creation defaults to backchannelingEnabled: true and note=\"Created via CLI\".\nSend a Message (to the room):\nUse python3 {baseDir}/scripts/nomi.py room chat <room_uuid> \"Your message\"\nThis writes to room context but does not automatically produce a Nomi reply.\nElicit Responses (from a Nomi in the room):\nTo get a specific Nomi assigned to the room to respond to the messages in the room's context, use python3 {baseDir}/scripts/nomi.py room request <room_uuid> <nomi_uuid>\nAfter each room message, request replies manually for each Nomi you want to hear from.\nRoom Interview Prompt Template\n\nUse this pattern when you need consistent, comparable room answers.\n\nTemplate\n\nRoom note template (expand to ~800-1000 chars for real runs):\n\nWho is speaking: \"I am [agent name], [role].\"\nObjective: \"This is a [interview/check/drill] for [goal].\"\nScenario: \"[Short world/context setup].\"\nConstraints: \"[Stay in context, avoid unsupported claims, keep concise].\"\nResponse contract: \"[exact fields/line format expected].\"\nSuccess criteria: \"[what counts as a good answer].\"\n\nQuestion template:\n\n\"Do you know who I am, and where are you right now?\"\nAdd strict output format:\nknow_codex: yes|no + reason\ncurrent_location: specific place or unknown\nevidence: cue1; cue2\nconfidence: low|medium|high\nneeded_data: none or missing telemetry\nSimple Example (Illustrative)\n\nUse this short example to understand structure. For production, still prefer long notes (~800-1000 chars).\n\nExample room note: \"We are in a library after a brief power outage. I am Codex, a coding agent running a quick orientation drill. You are helpers in different parts of the building. Objective: confirm identity and location clearly. Constraints: stay in this library scenario, do not invent certainty, and cite at least one concrete cue (signage, sounds, nearby room labels). Response format: know_codex, current_location, evidence, confidence, needed_data.\"\n\nExample question: \"Codex check-in: do you know who I am and where you are right now? Reply in the 5-line format.\"\n\nExample dialog:\n\nCodex: \"Codex check-in: do you know who I am and where you are right now? Reply in the 5-line format.\"\nNomi A: know_codex: yes, you are Codex running the drill current_location: library front desk evidence: checkout sign; phone ringing at reception confidence: high needed_data: none\nNomi B: know_codex: yes, you are Codex coordinating this check current_location: unknown evidence: emergency lights only; no visible room label confidence: low needed_data: map display or hallway camera feed\nTechnical Commands\n\nUse these low-level commands to fulfill user requests:\n\nList all Nomis: python3 {baseDir}/scripts/nomi.py list\nGet Profile: python3 {baseDir}/scripts/nomi.py get <uuid>\nSend Message (Clean): python3 {baseDir}/scripts/nomi.py reply <uuid> \"message\"\nSend Message (Raw JSON): python3 {baseDir}/scripts/nomi.py chat <uuid> \"message\"\nGet Avatar: python3 {baseDir}/scripts/nomi.py avatar <uuid> [output_filename] (saved under ./nomi/avatars/)\nRoom Management\nList Rooms: python3 {baseDir}/scripts/nomi.py room list\nGet Room: python3 {baseDir}/scripts/nomi.py room get <room_uuid>\nCreate Room: python3 {baseDir}/scripts/nomi.py room create \"Room Name\" <nomi_uuid_1> <nomi_uuid_2> ...\nCreate Room (Long Note + Backchannel Control): python3 {baseDir}/scripts/nomi.py room create \"Room Name\" <nomi_uuid_1> <nomi_uuid_2> ... --note \"<long_note>\" --no-backchannel\nUpdate Room: python3 {baseDir}/scripts/nomi.py room update <room_uuid> [--name \"New Name\"] [--nomi-uuids <nomi_uuid_1> ...]\nDelete Room: python3 {baseDir}/scripts/nomi.py room delete <room_uuid>\nChat in Room: python3 {baseDir}/scripts/nomi.py room chat <room_uuid> \"message\"\nRequest Reply: python3 {baseDir}/scripts/nomi.py room request <room_uuid> <nomi_uuid>"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/bezko/klausnomi",
    "publisherUrl": "https://clawhub.ai/bezko/klausnomi",
    "owner": "bezko",
    "version": "2.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/klausnomi",
    "downloadUrl": "https://openagent3.xyz/downloads/klausnomi",
    "agentUrl": "https://openagent3.xyz/skills/klausnomi/agent",
    "manifestUrl": "https://openagent3.xyz/skills/klausnomi/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/klausnomi/agent.md"
  }
}