KlausNomi
Verified@bezko
npx machina-cli add skill @bezko/klausnomi --openclawNomi 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 listto 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
- Use raw JSON only when needed:
- Use
python3 {baseDir}/scripts/nomi.py chat <uuid> "message"only when metadata/full payload is required.
- Use
- 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: trueandnote="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.
- Use
- 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.
- To get a specific Nomi assigned to the room to respond to the messages in the room's context, use
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 + reasoncurrent_location: specific place or unknownevidence: cue1; cue2confidence: low|medium|highneeded_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 drillcurrent_location: library front deskevidence: checkout sign; phone ringing at receptionconfidence: highneeded_data: none - Nomi B:
know_codex: yes, you are Codex coordinating this checkcurrent_location: unknownevidence: emergency lights only; no visible room labelconfidence: lowneeded_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>
Overview
KlausNomi lets you converse with Nomi AI companions using the bundled Python CLI. It preserves non-secret context locally to support multi-session conversations, while keeping API keys secure. The workflow starts with identifying a Nomi, sending an identity + task intro once per conversation, and then exchanging turns with clean, transcript-friendly output.
How This Skill Works
Install and run the bundled CLI commands to interact with Nomis. First, identify a Nomi with python3 {baseDir}/scripts/nomi.py list to obtain a UUID, then send an identity + task intro on the first message. For ongoing dialogue, use python3 {baseDir}/scripts/nomi.py reply <uuid> "Your message" to get plain-text responses, or python3 {baseDir}/scripts/nomi.py chat <uuid> "message" for full metadata. Conversations store non-secret context in the local nomi/ directory, and NOMI_API_KEY must be set in the environment to authorize requests.
When to Use It
- When you need to brief a Nomi with your name, role, and task context at the start of a new conversation.
- When you require clean, transcript-friendly outputs for documentation or auditing.
- When managing long-running conversations and preserving context across sessions.
- When coordinating discussions involving multiple Nomis in a shared Room.
- When starting a new Nomi task and avoiding repeated identity intro in every turn.
Quick Start
- Step 1: Identify the Nomi UUID with python3 {baseDir}/scripts/nomi.py list
- Step 2: Send the identity + task intro on the first message, e.g. 'Hi, I am [Your Name], a [Your Role]. I am contacting you to [Reason/Task]. Do you understand?'
- Step 3: Run conversational turns with python3 {baseDir}/scripts/nomi.py reply <uuid> "Your message"
Best Practices
- Use the identity + task intro only once per conversation start, not on every turn.
- Store non-secret context locally in the nomi/ directory and never save API keys there.
- Prefer the reply command for regular turns and the chat command only when metadata is needed.
- Ask open-ended questions and build on the Nomi's latest answer to sustain flow.
- Keep transcripts or summaries for future reference and QA.
Example Use Cases
- Interview a Nomi to gather software requirements and capture a transcript for handoff.
- Brief a Nomi on a coding task and document the back-and-forth for review.
- Generate a multi-turn conversation transcript for product documentation.
- Host a Room chat with multiple Nomis to compare responses and extract insights.
- Start a new conversation with a fresh Nomi UUID and maintain context over sessions.