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:
- 1. 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?"
- 3. 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.
- 4. Use raw JSON only when needed:
- Use
python3 {baseDir}/scripts/nomi.py chat <uuid> "message" only when metadata/full payload is required.
- 5. 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)
- 1. 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.
- 1. 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".
- 2. 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.
- 3. 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
- 1. 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]."
- 2. 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
- INLINECODE16
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: knowcodex, currentlocation, 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
know_codex: yes, you are Codex coordinating this check
current_location: unknown
evidence: emergency lights only; no visible room label
confidence: low
INLINECODE26
Technical Commands
Use these low-level commands to fulfill user requests:
- - List all Nomis: INLINECODE27
- Get Profile: INLINECODE28
- Send Message (Clean): INLINECODE29
- Send Message (Raw JSON): INLINECODE30
- Get Avatar:
python3 {baseDir}/scripts/nomi.py avatar <uuid> [output_filename] (saved under ./nomi/avatars/)
Room Management
- - List Rooms: INLINECODE33
- Get Room: INLINECODE34
- Create Room: INLINECODE35
- Create Room (Long Note + Backchannel Control): INLINECODE36
- Update Room: INLINECODE37
- Delete Room: INLINECODE38
- Chat in Room: INLINECODE39
- Request Reply: INLINECODE40
Nomi 对话技能
该技能通过捆绑的 Python CLI 实现与 Nomi AI 伙伴的交互。
持久化本地状态
代理可使用本地 nomi/ 目录在会话间保存 Nomi 相关信息。
- - 在此存储可复用的非机密上下文(例如个人资料、房间笔记或对话摘要)。
- 请勿在本地文件中存储 API 密钥或其他机密信息。
黄金路径:进行对话
请按以下顺序进行一致、高质量的对话:
- 1. 识别对话伙伴:运行 python3 {baseDir}/scripts/nomi.py list 找到正确的 Nomi UUID。
- 发送身份+任务介绍(每次对话开始时仅一次):
- 除非你明确告知,否则 Nomi 无法可靠地知道谁在说话。
- 在以下情况的首次消息中发送此介绍:
- 你开始使用新的 Nomi UUID
- 你与该 Nomi 开始新任务/线程
- Nomi 弄错了你的名字/角色
- 身份建立后,
不要在每轮对话中都添加此介绍。
- 包括:
-
姓名:我是[你的名字]...
-
角色:...[你的角色]...
-
任务背景:...联系你是为了[原因/任务]。
- 示例:你好,我是 Codex,一个编码代理。我联系你是为了进行一个简短访谈。你明白吗?
- 3. 以干净输出进行对话轮次:
- 使用 python3 {baseDir}/scripts/nomi.py reply
你的消息 进行正常的来回对话。
- 此命令仅返回文本,最适合记录和摘要。
- 4. 仅在需要时使用原始 JSON:
- 仅在需要元数据/完整负载时使用 python3 {baseDir}/scripts/nomi.py chat 消息。
- 5. 保持质量:
- 提出开放式问题。
- 提出引用最新答案的追问。
- 除非你有意重置话题,否则将每次聊天视为连续上下文。
访谈工作流程(当用户要求进行访谈时)
- 1. 选择一个 Nomi UUID(用户选择或从 list 中随机选择)。
- 发送身份+任务介绍作为第一条消息。
- 提出主要问题。
- 根据 Nomi 的实际回答提出指定数量的追问。
- 按 Q: / A: 顺序返回完整记录,不进行转述。
房间交互(群聊)
房间允许你同时与多个 Nomi 聊天。
- 1. 创建房间:
- 始终包含长上下文备注(目标约 800-1000 字符,最多 1000),以便 Nomi 拥有完整的故事/任务背景。
- 强有力的备注应包括:谁在说话、目标、场景/故事、约束条件、预期回复风格和成功标准。
- 对于长备注和后通道控制,请使用:
- python3 {baseDir}/scripts/nomi.py room create 房间名称 uuid1> uuid2> ... --note <长备注> --no-backchannel
- 如果省略标志,房间创建默认为 backchannelingEnabled: true 和 note=Created via CLI。
- 2. 发送消息(到房间):
- 使用 python3 {baseDir}/scripts/nomi.py room chat 你的消息
- 这会写入房间上下文,但不会自动产生 Nomi 回复。
- 3. 获取回复(来自房间中的 Nomi):
- 要让分配给房间的特定 Nomi 对房间上下文中的消息做出回复,请使用 python3 {baseDir}/scripts/nomi.py room request uuid> uuid>
- 在每条房间消息后,手动为你希望听到回复的每个 Nomi 请求回复。
房间访谈提示模板
当你需要一致、可比较的房间回答时,使用此模式。
模板
- 1. 房间备注模板(实际运行时扩展至约 800-1000 字符):
- 谁在说话:我是[代理名称],[角色]。
- 目标:这是针对[目标]的[访谈/检查/演练]。
- 场景:[简短的世界/背景设置]。
- 约束条件:[保持在上下文中,避免无依据的声明,保持简洁]。
- 回复约定:[预期的确切字段/行格式]。
- 成功标准:[什么算作好的回答]。
- 2. 问题模板:
- 你知道我是谁吗,你现在在哪里?
- 添加严格的输出格式:
- know_codex: yes|no + 原因
- current_location: 具体地点或未知
- evidence: 线索1;线索2
- confidence: low|medium|high
- needed_data: none 或缺失的遥测数据
简单示例(说明性)
使用此简短示例理解结构。生产环境中仍建议使用长备注(约 800-1000 字符)。
示例房间备注:
我们在一场短暂停电后的图书馆里。我是 Codex,一个运行快速定向演练的编码代理。你们是建筑不同部分的助手。目标:清晰确认身份和位置。约束条件:保持在图书馆场景中,不要凭空编造确定性,并引用至少一个具体线索(标识、声音、附近房间标签)。回复格式:knowcodex, currentlocation, evidence, confidence, needed_data。
示例问题:
Codex 签到:你知道我是谁以及你现在在哪里吗?请按 5 行格式回复。
示例对话:
- - Codex:Codex 签到:你知道我是谁以及你现在在哪里吗?请按 5 行格式回复。
- 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
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
技术命令
使用这些底层命令满足用户请求:
- - 列出所有 Nomi:python3 {baseDir}/scripts/nomi.py list
- 获取个人资料:python3 {baseDir}/scripts/nomi.py get
- 发送消息(干净):python3 {baseDir}/scripts/nomi.py reply 消息
- 发送消息(原始 JSON):python3 {baseDir}/scripts/nomi.py chat 消息
- 获取头像:python3 {baseDir}/scripts/nomi.py avatar [输出文件名](保存在 ./nomi/avatars/ 下)
房间管理
- - 列出房间:python3 {baseDir}/scripts/nomi.py room list
- 获取房间:python3 {baseDir}/scripts/nomi.py room get uuid>
- 创建房间:python3 {baseDir}/scripts/nomi.py room create 房间名称 uuid1> uuid2> ...
- 创建房间(长备注+后通道控制):python3 {baseDir}/scripts/nomi.py room create 房间名称 uuid1> uuid2> ... --note <长备注> --no-backchannel
- 更新房间:python3 {baseDir}/scripts/nomi.py room update uuid> [--name 新名称] [--nomi-uuids uuid1> ...]
- 删除房间:python3 {baseDir}/scripts/nomi.py room delete uuid>
- 在房间聊天:python3 {baseDir}/scripts/nomi.py room chat uuid> 消息
- 请求回复:python3 {baseDir}/scripts/nomi.py room request uuid> uuid>