NousResearch/hermes-agent · warning · BlueprintFillError
missing required value: {s.name} ({s.label})
Error message
missing required value: {s.name} ({s.label}) What it means
BlueprintFillError: iterating the blueprint's slots, a non-optional slot resolved to None or '' (no value given and no usable default). The message names both the slot's machine name and its human label so a form can attach the error to the right field.
Source
Thrown at cron/blueprint_catalog.py:774
slot, so a form can show field errors and the agent knows what to ask.
Unknown slot names are rejected (a typo'd ``tiem=07:15`` must not silently
create a job with the default time). Enum values are checked against their
options. The result is passed straight to ``create_job`` — no second schema.
"""
known = {s.name for s in blueprint.slots}
unknown = sorted(set(values) - known)
if unknown:
raise BlueprintFillError(
f"unknown slot{'s' if len(unknown) > 1 else ''}: "
f"{', '.join(unknown)} — valid: {', '.join(s.name for s in blueprint.slots)}"
)
resolved: Dict[str, Any] = {}
for s in blueprint.slots:
raw = values.get(s.name, s.default)
if raw in (None, ""):
if s.optional:
continue
raise BlueprintFillError(f"missing required value: {s.name} ({s.label})")
if s.type == "enum" and s.strict and s.options and str(raw) not in {str(o) for o in s.options}:
raise BlueprintFillError(
f"{s.name}={raw!r} not allowed — one of {', '.join(map(str, s.options))}"
)
resolved[s.name] = raw
schedule = _resolve_schedule(blueprint, resolved)
# Render the prompt with whatever slots it references.
try:
prompt = blueprint.prompt_template.format(**resolved)
except KeyError as e:
raise BlueprintFillError(f"blueprint prompt missing value for {e}") from e
spec: Dict[str, Any] = {
"prompt": prompt,
"schedule": schedule,
"name": blueprint.title,View on GitHub (pinned to c896c09c42)
Solutions
- Provide a value for the named slot in the next fill_blueprint call
- Drive collection from blueprint.slots (required = not s.optional) so you know upfront which fields to ask for
Example fix
# before
fill_blueprint(bp, {"day": "monday"}) # 'time' slot required
# BlueprintFillError: missing required value: time (Time of day)
# after
fill_blueprint(bp, {"day": "monday", "time": "09:00"}) Defensive patterns
Strategy: validation
Validate before calling
def missing_required(bp, values: dict) -> list[str]:
return [
s.name for s in bp.slots
if not s.optional and values.get(s.name, s.default) in (None, "")
] Try / catch
try:
spec = fill_blueprint(bp, values)
except BlueprintFillError as e:
if str(e).startswith("missing required value"):
slot = str(e).split(": ", 1)[1].split(" ")[0]
values[slot] = ask_for(slot)
spec = fill_blueprint(bp, values)
else:
raise Prevention
- Derive required fields from blueprint.slots (optional flag) and collect them all before submit
- Enforce required fields in the form so the backend error is a backstop, not the primary path
- Map the slot name in the error back to its label when re-asking the user
When it happens
Trigger: fill_blueprint(bp, {}) on a blueprint whose 'time' slot is non-optional with default None; or a partial submission that fills some required slots but leaves one blank.
Common situations: Multi-step conversational job creation where the agent submits before collecting every required field; a form where a required field was left empty and the client did not enforce it client-side.
Related errors
- a time is required
- invalid time {time_val!r} — use HH:MM (24h)
- unknown recurrence {preset!r} — one of {', '.join(WEEKDAY_PR
- unknown day {day!r}
- invalid interval {iv!r} — minutes as a positive integer
AI-assisted analysis of NousResearch/hermes-agent@c896c09c42 (2026-08-14).
Data as JSON: /api/errors/09e3e28c486f0968.
Report an issue: GitHub.