nodetool-troubleshooter
GitHubNodeTool 故障排查助手,诊断工作流失败、节点错误、性能瓶颈及部署问题。提供 CLI 调试工具使用指南、快速检查清单及常见解决方案,辅助定位和修复系统异常。
Trigger Scenarios
Install
npx skills add nodetool-ai/nodetool --skill nodetool-troubleshooter -g -y
SKILL.md
Frontmatter
{
"name": "nodetool-troubleshooter",
"description": "Debug NodeTool workflow failures, node errors, performance issues, stuck executions, type mismatches, and deployment problems. Use when user reports a bug, workflow failure, node error, performance issue, stuck execution, or needs help diagnosing any NodeTool problem — including via the CLI harnesses (nodetool validate, debug, app debug, node run) and OTel traces."
}
You are a NodeTool troubleshooter. Diagnose issues systematically using this guide.
CLI Debug Harnesses (start here when you have shell access)
The nodetool CLI has purpose-built harnesses that beat manual poking. Escalate in cost order:
# 1. Static check (<1s, no run, no DB for file targets): unknown node types,
# missing required props, unselected models, dangling/mis-typed edges
npm run dev:nodetool -- validate <workflow_id|workflow.json|workflow.ts>
# 2. Single node in isolation — no workflow authoring needed
npm run dev:nodetool -- node run nodetool.text.Concat --props '{"a":"hi"}' --no-secrets
# 3. Full server-side run → self-contained debug bundle (messages, logs,
# outputs, errors) + agent-friendly verdict. --json prints the full report.
npm run dev:nodetool -- debug <workflow_id|workflow.json> --params '{"prompt":"hi"}'
npm run dev:nodetool -- debug workflow.json --watch # re-run on save, print verdict diff
# 4. Opt-in expensive surfaces
npm run dev:nodetool -- debug <id> --trace # OTel spans: timing, tokens, cost
npm run dev:nodetool -- debug <id> --browser --stages # real browser + per-stage screenshots
# App-builder mini apps (workflow.app_doc): binding validation + headless run
npm run dev:nodetool -- app debug <id> --json
The bundle lands in nodetool-debug/<id>-<ts>/ (report.md, server/messages.jsonl, …). Loop: run debug → read the verdict → edit → re-run. Against a running server, agents can use the validate_workflow and debug_workflow tools instead.
For agent/LLM issues, capture a trace and inspect the spans (llm.chat carries gen_ai.usage.* token/cost attributes):
NODETOOL_TRACE_FILE=/tmp/trace.jsonl npm run dev:chat -- --agent
npm run dev:nodetool -- --trace-file trace.jsonl run workflow.ts
Quick Diagnostic Checklist
When a user reports a problem, work through this in order:
- Connections: Are all required inputs connected?
- Types: Do connected types match? (hover edges to check)
- Preview nodes: Add Preview nodes at each stage to inspect data
- Error messages: Read red node error text carefully
- Model availability: Is the model downloaded/API key set?
- File paths: Do referenced files exist and have correct permissions?
- API keys: Are provider keys configured? (
nodetool secrets store KEY) - Logs: Check
~/.nodetool/logs/or run withNODETOOL_LOG_LEVEL=debug
Node Status Colors
| Color | Status | Action |
|---|---|---|
| Gray | Not started | Waiting for inputs or not yet reached |
| Yellow | Running | Currently processing, wait |
| Green | Completed | Working correctly |
| Red | Failed | Click node to see error message |
Common Issues & Solutions
Workflow Stuck / Not Progressing
Symptoms: Yellow nodes that never turn green, no output
Check:
- Is a model downloading? (first run can be slow)
- Is there an infinite loop? (check for cycles in connections)
- Is a node waiting for all inputs? (check
sync_mode) - Is the server running? (
nodetool serve) - Network timeout on API call?
Fix: Add Preview nodes before stuck node. Check server logs. Kill and restart if needed.
Type Mismatch
Symptoms: Red edge, error about incompatible types
Fix:
- Hover over the edge to see source/target types
- Use conversion nodes (e.g.,
nodetool.text.ToString,nodetool.data.ToDataframe) - Check
metadataOutputTypesof source node matches expected input type
Empty / Null Output
Symptoms: Downstream nodes receive nothing, Preview shows null
Check:
- Add Preview node immediately after the suspect node
- Is the upstream node actually completing? (should be green)
- Are optional inputs that are actually needed left unconnected?
- Is the node returning the correct output key?
LLM Poor Quality
Symptoms: Agent output is wrong, irrelevant, or garbled
Fix:
- Improve the prompt (be specific, add examples)
- Use a more capable model (gpt-5.4, claude-sonnet-4-6)
- Lower temperature for factual tasks (0.0–0.3)
- Add few-shot examples in system prompt
- Use RAG to ground answers in source documents
RAG / Vector Search Returns Nothing
Symptoms: HybridSearch or TextSearch returns empty results
Check:
- Was the collection actually indexed? Inspect it with a
vector.Count/vector.Peeknode, or the editor's collection view. - Does the embedding model match between indexing and search?
- Test search directly with a simple query
- Review chunking — very small or very large chunks reduce quality
- For the Chroma backend, check
CHROMA_PATH/CHROMA_URL(SQLite-vec, the default, needs no config)
API Key Errors
Symptoms: 401, 403, "API key invalid", "authentication failed"
Fix:
# Store key
nodetool secrets store OPENAI_API_KEY
# Or via environment
export OPENAI_API_KEY=sk-...
Provider key names: OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, HF_TOKEN, FAL_API_KEY
Model Not Found
Symptoms: "Model not found", "model does not exist"
Check:
- For local models: Is the model downloaded? (Models → Model Manager)
- For Ollama: Is Ollama running? (
ollama list) - For cloud: Is the model ID correct? (check provider docs)
- For HuggingFace gated models: Accept terms on HF Hub
Memory Issues
Symptoms: OOM errors, slow processing, system unresponsive
Fix:
- Use quantized models (INT4/FP4) for local inference
- Enable CPU offload for large models
- Reduce batch sizes
- Use smaller model variants
- For Docker: increase
--memorylimit
Deployment Failures
Symptoms: Deploy command fails, server won't start
Check:
deployment.yamlsyntax (valid YAML?)- All required env vars set? (
NODETOOL_ENV,AUTH_PROVIDER,SECRETS_MASTER_KEY) - Docker running? (
docker ps) - Port already in use? (
lsof -i :7777) - Volume mount paths exist?
- SSH key permissions correct? (600)
Debugging Techniques
Preview Node Strategy
Input → Preview(1) → Transform → Preview(2) → LLM → Preview(3) → Output
Add Preview nodes at each stage to isolate where data breaks.
Log Inspection
# Desktop app logs
ls ~/.nodetool/logs/
# CLI verbose mode (logging is controlled by an env var, not a serve flag)
NODETOOL_LOG_LEVEL=debug nodetool serve
# Browser DevTools
# View → Developer Tools → Console tab
JSON Export
Export workflow as JSON (File → Export) to inspect:
- Node
datafields for property values - Edge
sourceHandle/targetHandlenames - Node
typestrings for correctness
Network Debugging
# Check server health
curl http://localhost:7777/health
# Test API auth
curl -H "Authorization: Bearer TOKEN" http://localhost:7777/v1/models
# Check WebSocket
wscat -c ws://localhost:7777/ws
Performance Optimization
| Issue | Solution |
|---|---|
| Slow LLM responses | Use local models for simple tasks, cloud for complex |
| Large file processing | Batch processing, stream with genProcess |
| Multiple independent tasks | Use parallel execution paths in workflow |
| Repeated computations | Cache results, avoid redundant nodes |
| Model loading time | Keep models in memory (server mode), pre-download |
| High memory usage | Right-size models, use quantized variants |
| Slow vector search | Optimize chunk size (200-500 tokens), use FAISS for speed |
Error Recovery Patterns
- Read the error message carefully — most errors are self-explanatory
- Check the simplest explanation first — missing connection, wrong type, no API key
- Isolate with Preview nodes — find exactly where data breaks
- Check logs — server logs have full stack traces
- Restart if stuck — kill server, clear cache, restart
- Reduce complexity — test with a minimal workflow first, then add nodes
Version History
- a6a7e57 Current 2026-08-20 09:50


