Skip to content

Feedback

The feedback feature lets agents report two classes of quality issues found while working with daimyo rules. Entries are appended to a JSON Lines file for later review and rules improvement.

Feedback Types

contradictory_rules

Two or more rules that conflict with each other. Provide:

  • task — what work was being done when the contradiction was found
  • rules — the conflicting rules, each with its category and rule text

missed_categories

Categories that were not included in the initial fetch but should have been. Provide:

  • task — what the task was about
  • categories — list of missed category names
  • reason — why the categories were not fetched initially

JSONL Format

Each entry is a single JSON object on its own line:

{"timestamp":"2026-04-22T15:30:00+00:00","type":"contradictory_rules","task":"Adding REST endpoint","rules":[{"category":"python.testing","rule":"Use pytest"},{"category":"development.coding.testing","rule":"Avoid mocking internals"}]}
{"timestamp":"2026-04-22T15:31:00+00:00","type":"missed_categories","task":"Adding a REST endpoint","categories":["development.domain_specific.apis.rest"],"reason":"Focused on Python rules and overlooked the REST API category"}

Timestamps are always UTC ISO-8601.

MCP Tool

submit_feedback(type, task, rules_json?, categories?, reason?)

contradictory_rules — pass rules_json as a JSON array:

submit_feedback(
  type="contradictory_rules",
  task="Writing integration tests for the REST endpoint",
  rules_json='[{"category":"python.testing","rule":"Use pytest"},{"category":"development.coding.testing","rule":"Avoid mocking internals"}]'
)

missed_categories — pass categories as a comma-separated string and reason:

submit_feedback(
  type="missed_categories",
  task="Adding a REST endpoint for rule feedback",
  categories="development.domain_specific.apis.rest",
  reason="Focused on Python rules initially"
)

REST API

POST /api/v1/feedback — returns HTTP 201 on success.

contradictory_rules:

curl -X POST http://localhost:8000/api/v1/feedback \
  -H "Content-Type: application/json" \
  -d '{
    "type": "contradictory_rules",
    "task": "Writing integration tests for the REST endpoint",
    "rules": [
      {"category": "python.testing", "rule": "Use pytest"},
      {"category": "development.coding.testing", "rule": "Avoid mocking internals"}
    ]
  }'

missed_categories:

curl -X POST http://localhost:8000/api/v1/feedback \
  -H "Content-Type: application/json" \
  -d '{
    "type": "missed_categories",
    "task": "Adding a REST endpoint for rule feedback",
    "categories": ["development.domain_specific.apis.rest"],
    "reason": "Focused on Python rules initially"
  }'

CLI

contradictory-rules — use --rule (repeatable) with category::rule text format:

daimyo feedback contradictory-rules \
  --task "Writing integration tests for the REST endpoint" \
  --rule "python.testing::Use pytest" \
  --rule "development.coding.testing::Avoid mocking internals"

missed-categories — use --category (repeatable) and --reason:

daimyo feedback missed-categories \
  --task "Adding a REST endpoint for rule feedback" \
  --category "development.domain_specific.apis.rest" \
  --reason "Focused on Python rules initially"

Configuration

The feedback file path is configurable via settings.toml:

feedback_file = ".daimyo/feedback.jsonl"

Or via environment variable:

export DAIMYO_FEEDBACK_FILE="/var/log/daimyo/feedback.jsonl"

The default is .daimyo/feedback.jsonl relative to the working directory. Parent directories are created automatically if they do not exist.