radiantlogicinc/fastworkflow/debug-workflow-conversations
Claude Code and agent skill by radiantlogicinc/fastworkflow
- community
Checking that the SKILL.md file is still in the repository.
Diagnose fastWorkflow failures from run_chatbot traces and human comments, locate the correct evidence store, and trace wrong routing, extraction, planning, execution or answers to a concrete workflow fix. Use when a conversation behaves incorrectly or review feedback needs a trace-supported diagnosis. Read recorded evidence without mutating it.
Install
npx vskill@latest install radiantlogicinc/fastworkflow/debug-workflow-conversationsSKILL.md
Debugging workflows from conversation logs
Use recorded turns and their span trees to identify the first wrong decision and its consequences. Capture depends on redaction, limits and writer health; not every run contains every input or response.
1. Locate the conversation and its evidence store
In an existing run_chatbot session, navigate benchmark → experiment → conversation, or ad-hoc conversations → UTC date → conversation. The left tree stops at conversations. Select turns and drill into phases, steps and calls on the right; the right breadcrumb shows the complete path. Read the Human feedback history at the relevant component as well as its raw evidence. Use optimize-workflow-with-feedback when the task is to improve and compare the workflow, rather than diagnose one failure.
For ordinary runs, resolve the database through the framework:
For registered experiments, resolve the registration's store via benchmark_setup.load_experiment(workflow_folderpath, experiment_id). A null store means execution has not bound the registration yet. Retain store_id with every turn/span reference. Conversation IDs are local to channels/stores.
A missing default database does not prove the workflow never ran: check the selected state root and experiment registration first. If reproduction is needed, prepare it under the project's execution permissions. The supported picker command is fastworkflow run_chatbot; selecting a workflow can start a server, so it is not merely an offline file viewer.
2. Read it — read-only, always
Never instantiate `ObservabilityStore` to inspect a database. That class is the writer: constructing it can create the file and write-probe it, and it DELETES a populated database from an older schema version and recreates it empty (there is no migration). A database from a newer version is refused. Preserve older evidence by copying it first, and read it with the matching framework version rather than altering its schema. ReadOnlyObservabilityStore opens mode=ro connections and cannot mutate anything. Raw SQL is equally fine (the schema is documented in reference.md):
3. Find the failing turn
Two orthogonal outcome fields, both worth reading:
statusis the turn lifecycle:completed/failed(agent ran out of
iterations — failure_reason: max_iters_exhausted) / awaiting_user (still suspended) / cancelled / abandoned.
successmeans every command in the turn succeeded. **completedwith
success = 0 is the case to hunt**: a command failed and the agent wrote a confident answer over it.
4. Walk the trace to the failing stage
A turn's spans nest like this (parent_span_id links them; names and full attribute catalogs in reference.md):
5. The triage tree
Inspect the recorded causal order. The checks below help locate the first wrong decision; a bad plan can precede routing, and a provider or backend failure may be environmental. Treat a human comment as a lead to verify, not proof of the cause.
A. Did routing pick the right command? Compare fw.command.execute's raw_command (what was asked) against its command_name (what ran), then read the fw.nlu.intent spans:
| Observation | Diagnosis | Fix with | |
|---|---|---|---|
resolved: false on every attempt (the walk climbed contexts and gave up) | The utterance routes nowhere — vocabulary gap or command missing from the context's surface | Seed utterances (plain_utterances, ~8 varied phrasings) · design-context-models (is the command reachable from this context?) | |
ambiguous: true with a candidates list | Classifier confidence below threshold — check classifier.confidence vs classifier.ambiguous_threshold; near-misses mean starved or colliding seeds | detect-duplicate-capabilities (are two candidates the same capability?) · seeds · design-context-models | |
Wrong command_name, matcher_layer: classifier | A confident mis-route: the wrong command's training set claims this phrasing | detect-duplicate-capabilities · evaluate-intent-routing (measure before/after) · seeds | |
Wrong command_name, matcher_layer: fuzzy_prematch or embedding_cache | A pre-classifier layer matched — the utterance lexically resembles another command's name, or a stale cache entry | Rename the colliding command, or investigate the matched cache entry and its provenance | |
escalation_labels_discarded present | The command likely lives in an ancestor context but the local prompt hid that | design-context-models (context surfaces / base inheritance) |
B. Were the parameters extracted correctly? Read fw.nlu.param_extraction:
| Observation | Diagnosis | Fix with | |
|---|---|---|---|
missing_fields non-empty | Extraction could not find the value in the utterance | Sharpen Field(description=…, examples=…) on Signature.Input; if the value is an opaque handle the user cannot know, declare its producer — declare-parameter-producers (available_from) | |
db_lookup event with outcome: rejected + suggestions | The typed value missed the live key set | resolve-parameter-values — check the key set and thresholds; a rejection of a valid value usually means the wrong candidate list | |
db_lookup event with outcome: applied, corrected: true, but wrong result downstream | The fuzzy matcher rewrote the value incorrectly (auto-apply too loose, or label/uid mixup) | resolve-parameter-values — auto_apply_threshold, and return the value the field holds, not the label matched on | |
validation_hook.is_valid: false | The command's own validate_extracted_parameters rejected the call — message says why; raised means the hook itself crashed | validate-command-parameters | |
retry_round: true on successive turns | The user is stuck in the NOT_FOUND correction loop — count the rounds; more than two means the error message is not actionable | validate-command-parameters (error-message quality) + field descriptions | |
extraction_method: llm and the nested fw.llm.call shows cache_hit: true with a wrong completion | Cached output; the cache hit alone does not prove staleness | Verify request/model/cache provenance; use an isolated fresh cache for an authorized comparison | |
A nested fw.llm.call with status: error and an exception (auth, timeout) | Environment problem — keys/env files — not workflow design | Fix the env/passwords files; nothing to change in the workflow |
C. Did the agent plan a workable sequence? fw.planner.replan spans carry their trigger: repeated parameter_extraction_error replans mean the agent cannot discover where a handle comes from → declare-parameter-producers. Repeated ask_user_response replans point at ambiguous command surfaces or missing context navigation → design-context-models.
D. Did the conversation stall on questions? Multiple fw.ask_user spans in one turn (each records agent_query and the reply): review whether each question was needed. Separate repeated asks after a valid answer from necessary clarification or retries after invalid answers; inspect state retention as well as B.
E. Was state stored and used? The fw.turn close carries context_mutations (added / changed / removed keys with brief values). A command that should have stored a handle but shows no mutation, or a later turn that re-asks for stored information, is a storing-information-in-context bug in the command's own code.
F. Everything above clean? Then the failure is the command implementation: fw.command.execute has status: error or success: false with the response_text; the full CommandResponse (and, when FW_OBS_CAPTURE_TRACEBACKS=1 was set, the traceback artifact) is in the turn's record_json. Read the command's _commands/<name>.py source next.
6. Recommending fixes
State the diagnosis with its evidence (span attribute values, not paraphrase), name the feature, and load the companion skill before writing the change:
| Feature | Companion skill | |
|---|---|---|
Seed utterances, context layout, base inheritance | design-context-models | |
| Near-duplicate commands | detect-duplicate-capabilities | |
| Measuring whether a routing change helped | evaluate-intent-routing | |
available_from producer hints | declare-parameter-producers | |
db_lookup value resolution | resolve-parameter-values | |
validate_extracted_parameters | validate-command-parameters | |
Skill files (_skills/<name>.py): phases, facts, step wording (fw.skill.phase failures) | author-workflow-skills | |
| Training utterance realism | supply-training-personas | |
| Retraining mechanics after any of the above | train-and-publish-models | |
| Publishing a regression task and creating a comparison experiment | create-workflow-benchmarks | |
| Designing multi-turn regression content | build-task-benchmarks | |
| Using human feedback to verify an improvement | optimize-workflow-with-feedback |
Human feedback and output-quality failures
Read reference.md for annotation anchors and read APIs. human_feedback comments are distinct from agent-memory feedback and formal review ratings. Do not write an annotation merely to inspect a trace or present an agent judgment as a human one.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingfastworkflow/skills_for_coding_fastworkflows/debug-workflow-conversations/SKILL.md
Popularity
- Repository stars
- 52
- Repository forks
- 15
- 7-day trend score
- 20
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/radiantlogicinc/fastworkflow/debug-workflow-conversations)