| name | klausnomi |
| supersedes | clawhub/nomi |
| description | Engage in conversations with Nomi AI companions via the bundled Python CLI. |
| user-invocable | true |
| metadata | {"openclaw":{"homepage":"https://github.com/openclaw/klausnomi","requires":{"bins":["python3"],"env":["NOMI_API_KEY"]},"primaryEnv":"NOMI_API_KEY"}} |
Nomi Conversation Skill
This skill enables interaction with Nomi AI companions via the bundled Python CLI.
Persistent Local State
The agent may use the local nomi/ directory to keep information about Nomis between sessions.
- Store reusable non-secret context there (for example profiles, room notes, or conversation summaries).
- Do not store API keys or other secrets in local files.
Golden Path: Conducting a Conversation
Use this sequence for consistent, high-quality conversations:
- Identify the Partner: Run
python3 {baseDir}/scripts/nomi.py list to find the correct Nomi UUID.
- Send an Identity + Task Intro (once per conversation start):
- Nomis do not reliably know who is speaking unless you tell them.
- Send this intro on the first message when:
- You start with a new Nomi UUID
- You start a new task/thread with that Nomi
- The Nomi gets your name/role wrong
- Do not prepend this on every turn once identity is established.
- Include:
- Name: "I am [Your Name]..."
- Role: "...a [Your Role]..."
- Task Context: "...contacting you to [Reason/Task]."
- Example: "Hi, I am Codex, a coding agent. I am contacting you to run a short interview. Do you understand?"
- Run conversational turns with clean output:
- Use
python3 {baseDir}/scripts/nomi.py reply <uuid> "Your message" for normal back-and-forth.
- This returns only text, which is best for transcripts and summaries.
- Use raw JSON only when needed:
- Use
python3 {baseDir}/scripts/nomi.py chat <uuid> "message" only when metadata/full payload is required.
- Sustain quality:
- Ask open-ended questions.
- Ask follow-ups that reference the latest answer.
- Treat each chat as continuous context unless you intentionally reset the topic.
Interview Workflow (When User Asks for an Interview)
- Pick a Nomi UUID (user-selected or random from
list).
- Send the identity + task intro as the first message.
- Ask the primary question.
- Ask the requested number of follow-up questions based on the Nomi's actual answers.
- Return a full transcript in
Q: / A: order without paraphrasing.
Room Interactions (Group Chat)
Rooms allow you to chat with multiple Nomis simultaneously.
- Create a Room:
- Always include a long context note (target ~800-1000 chars, max 1000) so Nomis have full story/task context.
- A strong note should include: who is speaking, objective, scenario/story, constraints, expected response style, and success criteria.
- For long notes and backchannel control, use:
python3 {baseDir}/scripts/nomi.py room create "Room Name" <nomi_uuid_1> <nomi_uuid_2> ... --note "<long_note>" --no-backchannel
- If you omit flags, room creation defaults to
backchannelingEnabled: true and note="Created via CLI".
- Send a Message (to the room):
- Use
python3 {baseDir}/scripts/nomi.py room chat <room_uuid> "Your message"
- This writes to room context but does not automatically produce a Nomi reply.
- Elicit Responses (from a Nomi in the room):
- To 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>
- After each room message, request replies manually for each Nomi you want to hear from.
Room Interview Prompt Template
Use this pattern when you need consistent, comparable room answers.
Template
-
Room note template (expand to ~800-1000 chars for real runs):
- Who is speaking: "I am [agent name], [role]."
- Objective: "This is a [interview/check/drill] for [goal]."
- Scenario: "[Short world/context setup]."
- Constraints: "[Stay in context, avoid unsupported claims, keep concise]."
- Response contract: "[exact fields/line format expected]."
- Success criteria: "[what counts as a good answer]."
-
Question template:
- "Do you know who I am, and where are you right now?"
- Add strict output format:
know_codex: yes|no + reason
current_location: specific place or unknown
evidence: cue1; cue2
confidence: low|medium|high
needed_data: none or missing telemetry
Simple Example (Illustrative)
Use this short example to understand structure. For production, still prefer long notes (~800-1000 chars).
Example 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."
Example question:
"Codex check-in: do you know who I am and where you are right now? Reply in the 5-line format."
Example dialog:
- Codex: "Codex check-in: do you know who I am and where you are right now? Reply in the 5-line format."
- Nomi 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
- Nomi 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
Technical Commands
Use these low-level commands to fulfill user requests:
- List all Nomis:
python3 {baseDir}/scripts/nomi.py list
- Get Profile:
python3 {baseDir}/scripts/nomi.py get <uuid>
- Send Message (Clean):
python3 {baseDir}/scripts/nomi.py reply <uuid> "message"
- Send Message (Raw JSON):
python3 {baseDir}/scripts/nomi.py chat <uuid> "message"
- Get Avatar:
python3 {baseDir}/scripts/nomi.py avatar <uuid> [output_filename] (saved under ./nomi/avatars/)
Room Management
- List Rooms:
python3 {baseDir}/scripts/nomi.py room list
- Get Room:
python3 {baseDir}/scripts/nomi.py room get <room_uuid>
- Create Room:
python3 {baseDir}/scripts/nomi.py room create "Room Name" <nomi_uuid_1> <nomi_uuid_2> ...
- Create 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
- Update Room:
python3 {baseDir}/scripts/nomi.py room update <room_uuid> [--name "New Name"] [--nomi-uuids <nomi_uuid_1> ...]
- Delete Room:
python3 {baseDir}/scripts/nomi.py room delete <room_uuid>
- Chat in Room:
python3 {baseDir}/scripts/nomi.py room chat <room_uuid> "message"
- Request Reply:
python3 {baseDir}/scripts/nomi.py room request <room_uuid> <nomi_uuid>