Skip to content

router: /ouroboros:run does not dispatch multiline inline seed content #479

@shaun0927

Description

@shaun0927

Summary

The shared deterministic router does not dispatch multiline inline seed content for /ouroboros:run, even though the run skill contract says the command accepts seed_file_or_content and the MCP tool already supports inline seed_content.

Why this looks like a real bug

Current repo contracts point in the same direction:

  • skills/run/SKILL.md documents /ouroboros:run [seed_file_or_content]
  • The same skill explicitly says inline YAML should be used directly
  • ouroboros_execute_seed accepts both seed_content and seed_path

So the router dropping multiline inline content appears to be a contract mismatch in the shared dispatch layer, not just user confusion.

Reproduction on current main

from ouroboros.router import resolve_skill_dispatch

prompt = "/ouroboros:run\ngoal: test\nconstraints:\n  - keep it simple\nacceptance_criteria:\n  - works"
result = resolve_skill_dispatch(prompt, cwd="/tmp")
print(result)

Actual result:

NotHandled(reason='not a skill command', ...)

Expected result:

  • deterministic dispatch to the run skill
  • the inline YAML forwarded as the payload for the underlying MCP tool call

Root cause

The shared parser introduced in #459 only matches a single-line remainder after the skill prefix. Once the remainder contains real newlines, the prompt falls out of the intercept path before the run skill can decide whether the payload is a file path or inline YAML.

Impact

This affects every runtime that now uses the shared router from #459:

  • Codex CLI
  • Hermes
  • OpenCode

It also means the documented seed_file_or_content contract is only partially true in practice: single-line inputs work, real multiline seed content does not.

Acceptance criteria

  • /ouroboros:run recognizes multiline inline YAML as a valid dispatch payload
  • regression coverage exists at the router level
  • the resulting resolved payload preserves the multiline content exactly

Notes

I have a local patch and passing router tests for this path if maintainers agree that the intended contract is indeed inline-content support rather than path-only behavior.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions