Files
clawmates/templates/workflows/research_only.toml
T
Omar SobhandClaude Opus 5 4a3f1cc2f9
deploy / build (push) Canceled after 0s
deploy / test (push) Canceled after 2m43s
docs(recipes): annotate the keys that do nothing
phase_config::DECLARED_BUT_UNREAD lists four keys the recipes set and
nothing reads. security_hardening.toml already carried a "what is real
here and what is decoration" section and annotated its own dead keys
inline; the other five did not, so `produces = ["md"]` and
`loop = "until_no_more_int_items"` read like settings.

The risk was never the dead keys themselves — it is a reader taking
`loop = "until_no_more_int_items"` for a loop. Each now says it is inert
and points at the registry. They stay because they state the intent.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01WZb5A2kfVfjpdwSochkuHz
2026-09-22 15:00:24 -05:00

58 lines
3.4 KiB
TOML

key = "research_only"
title = "Research only"
blurb = "Answer a question and deliver a sourced markdown report. One-shot or scheduled."
requires_repo = false
# Phases run in order. Each entry gets a `mission_phases` row on
# mission create; the orchestrator dispatches per-kind executors.
#
# `rust_sdlc` until 2026-08-21, which staffed this repo-less markdown mission
# with a planner, a coder, a tester, a reviewer and a committer — four of whom
# had nothing to do, each carrying the code-and-commit skills its role is bound
# to. Measured: 9 distinct skills across 5 role prompts, ~50KB, one applicable.
# See docs/SKILL-USE-BASELINE.md finding 7.
default_team_template = "topic_research"
[[phases]]
kind = "research"
order_idx = 0
# Phase-scoped config, merged into mission_phases.config on insert.
[phases.config]
# `pdf` dropped — PDF rendering was removed from the delivery path and
# artifacts are served as Markdown, so asking for it named a format nothing
# generates. `security_hardening` was corrected for this; this recipe was not.
# INERT. `produces` is listed in phase_config::DECLARED_BUT_UNREAD —
# artifact rendering is not driven by it. Kept because it states the
# intent, annotated because a reader should not take it for a setting.
produces = ["md"]
default_topology = "hub_spoke"
# This recipe had NEITHER of the two keys below, which is the same defect
# `benchmark`, `security_hardening` and `research_and_code` were each fixed
# for: a phase with no `done_when` never enters `evaluating`, is never judged,
# and reports `completed` whatever it did. The empty-delivery rule still caught
# a phase that wrote nothing at all (`research` is in PRODUCING_KINDS), so the
# gap was narrower here — a mission that wrote one junk file went green.
task = """
Answer the mission brief and deliver a sourced report.
There is no repository on this mission. `/mission/repo` is your workspace, everything you leave there is collected and published as the mission's artifact, and anything written anywhere else is not delivered.
Work in three passes and leave the trail behind: research/questions.md (what actually has to be answered), research/evidence.md (the sources, quoted, with the URL and the date fetched), and research/REPORT.md (the answer).
Cite every claim to a source you actually fetched. A claim you believe but cannot source belongs in the report's open-questions section, named as open — not hedged into the body, and not dropped silently.
If the brief is too vague to answer, say so in research/REPORT.md and say what you would need. That is a real result. A report written against a guess about what was wanted is worse than one sentence saying the brief was unusable.
"""
# Wording follows the measured rule: say what the file must CONTAIN. Positional
# phrasing, or "and nothing else", makes the judge invent requirements it was
# never given.
done_when = "research/REPORT.md exists and answers the mission brief, with each claim in it carrying the URL of a source, and a section naming what could not be established"
max_iterations = 2
# Nothing is compiled here, so `on_green_tests` would gate on a suite that does
# not exist. There is also usually nothing to commit — a repo-less mission
# delivers by collection, not by diff.
commit_policy = "always"
# Which team template is the "sensible default" for the picker when
# the user hasn't explicitly picked one. UI honors this.