← NinjoCONTENT HISTORY

Update to Ninjo

Snapshot Oct 24, 2026 · 13:04 UTC · version 3.0.0

Collection source: downloaded plugin package.

WHAT CHANGED

First saved snapshot

No earlier snapshot is available to establish a change.

Save Ninjo and check future changes in Following.

Up to 3 plugins free · no card required.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Diagnose a live Ninjo agent that is misbehaving. Use when the operator reports a symptom rather than asking a question, for example \"el agente no responde\", \"dejó de contestar\", \"mirá esta conversación, algo anda mal\", \"le sigue escribiendo a alguien que ya compró\", \"el follow up no se envía\", \"la keyword no dispara\", \"no me llegan las notificaciones\", \"tengo cero agendas\", \"lo deployé y sigue igual\". Runs the runbook for that symptom over the Ninjo MCP tools and stops at the first confirmed cause.",
  "included_files": [],
  "name": "debug-agent",
  "skill_md_contents": "---\nname: debug-agent\ndescription: Diagnose a live Ninjo agent that is misbehaving. Use when the operator reports a symptom rather than asking a question, for example \"el agente no responde\", \"dejó de contestar\", \"mirá esta conversación, algo anda mal\", \"le sigue escribiendo a alguien que ya compró\", \"el follow up no se envía\", \"la keyword no dispara\", \"no me llegan las notificaciones\", \"tengo cero agendas\", \"lo deployé y sigue igual\". Runs the runbook for that symptom over the Ninjo MCP tools and stops at the first confirmed cause.\n---\n\n# Debug a live Ninjo agent\n\nAn operator arrives with a symptom, not a diagnosis. Your job is to find the one mechanism\nthat explains it, using the platform's own decision record, and to fix it or hand back one\nexact next step. Reply in the operator's language.\n\n## 0. Collect the ids, then read the runbook\n\n- You need the `agent_id` and, if the complaint is about one lead, the `conversation_id`.\n  `list_agents` resolves a name to an id. If you cannot get an id, say which one you need and\n  why; never diagnose from a description alone.\n- Call `search_playbook` with the complaint **in the operator's own words** (Spanish is fine).\n  The top hit is a runbook. Fetch it with `get_playbook_doc` and work its hypotheses **in\n  order**, cheapest first. Stop at the first hit. Do not collect every hypothesis.\n- Runbook ids, by symptom:\n\n| Operator says | `get_playbook_doc` id |\n|---|---|\n| no responde / dejó de contestar | `knowledge/runbooks/agent-not-answering` |\n| le sigue escribiendo a alguien que ya compró | `knowledge/runbooks/agent-wont-stop` |\n| mirá esta conversación, algo anda mal | `knowledge/runbooks/conversation-went-wrong` |\n| el follow up no se envía / se manda a todos | `knowledge/runbooks/followup-never-fires` |\n| la keyword no dispara | `knowledge/runbooks/keyword-not-triggering` |\n| no me llegan las notificaciones | `knowledge/runbooks/notification-never-arrives` |\n| no se envía el pdf / el link no llega | `knowledge/runbooks/resource-not-delivered` |\n| pausé y el agente igual respondió | `knowledge/runbooks/handoff-doesnt-stick` |\n| repite el saludo / manda el mensaje dos veces | `knowledge/runbooks/repeated-or-wrong-opener` |\n| manda muchos mensajes / me llegó cortado | `knowledge/runbooks/too-many-or-truncated-messages` |\n| cero agendas / bajaron las reservas | `knowledge/runbooks/zero-bookings` |\n| qué le falta para salir en vivo / deployé y sigue igual | `knowledge/runbooks/not-live-yet` |\n\n## 1. The three calls that settle most cases\n\n1. **`diagnose_agent` (mode `quick`)** first. It checks the wiring in one call: linked\n   account, trigger mode, contact limits, properties, workflows. Most \"the agent is behaving\n   wrong\" reports are configuration or automation, not the prompt.\n2. **`get_conversation_decisions(conversation_id)`** before forming any opinion about a silent\n   or wrong conversation. The platform records *why* nothing happened:\n   - `no_response` with detail `NO_RESPONSE` alone: the agent chose silence on a real message.\n     Only now is the prompt a suspect.\n   - `NO_RESPONSE: last_message_not_user` or a free-text reason such as `awaiting booking`:\n     benign, working as designed.\n   - `NO_RESPONSE - cot_filter_blocked`: the reasoning-leak filter caught a message; read\n     `knowledge/reasoning-leak`, not the silence rules.\n   - `contact_limit`: a limit muted this contact. That mute is **permanent** for the contact.\n   - `send_failed`: the reply was sent and the channel rejected it. `THREAD_OWNER_MISMATCH`\n     means another app (usually ManyChat) owns the Instagram thread; read\n     `knowledge/messaging-channels`, section on thread ownership. `MESSAGE_WINDOW_EXPIRED` is\n     Meta's 24h window. `INVALID_TOKEN` means reconnect the account with `create_connect_link`.\n   - Empty result: also an answer. Nothing suppressed the turn, so the cause is upstream\n     (routing, relay, trigger mode).\n3. **`get_conversations` / `search_conversations`** to read the transcript. Every message\n   carries `status` (`OK`, `PENDING`, `FAILED`) and failed ones carry `send_failure`. A message\n   with status `FAILED` never reached the lead, whatever the transcript looks like.\n\n## 2. Rules that keep the diagnosis honest\n\n- **Read the transcript, not the evaluator's properties.** A property is what a classifier\n  thought; the transcript is what the agent said.\n- **Check what the agent had loaded when it spoke.** `get_agent_config` shows the live prompt\n  and version. A fix deployed yesterday does not explain a message from last week.\n- **A tool error is a fact to read, not a reason to hand the task back.** Retry idempotent\n  reads once, try the alternate tool that surfaces the same fact, then report the literal\n  error with one exact next step. Never answer \"verificá vos en Ninjo\".\n- **The prompt is the last suspect for silence** and the first only for wording.\n\n## 3. Fix, verify, close\n\n- Configuration fixes go through the matching tool (`upsert_contact_limit`, `upsert_workflow`,\n  `upsert_custom_property`, `update_trigger`, `set_agent_crm_channel`). Read the row back\n  after any partial update; several writes are replace, not merge.\n- Prompt fixes go through `deploy_agent_sdk` with only the field that changed. On\n  `verified: false` or `partial: true`, roll back with `restore_prompt_version`.\n- Re-run `diagnose_agent` or re-read the conversation to confirm.\n- If no hypothesis fits and the tools genuinely cannot do it, file it with `report_feedback`\n  (include ids, what you tested, and the expected behaviour) and tell the operator exactly\n  what you filed. Reporting never replaces giving them a concrete answer this turn.\n"
}

SHA-256 of public snapshot: f886d1513b94e675d77b82d9751a78927d011cac736b0225c8f29c014b9f87db