Summary
On a fresh install with no keys configured, every seeded default agent renders without an image. Shipped templates declare avatar_prompt and avatars are produced at runtime by the Gemini-backed image generation service, which short-circuits with not_configured when GEMINI_API_KEY is absent — which is the state of every new instance. The default fleet is the first thing a new operator sees, and it arrives blank.
Context
First-run seeding provisions a starter fleet from bundled local: templates, so a fresh install comes up with agents already running. Those templates carry an avatar_prompt (e.g. config/agent-templates/scout/template.yaml) rather than an image, and src/backend/services/image_generation_service.py returns not_configured without a Gemini key — so the generation path that would fill it in never runs.
The result is that the out-of-the-box experience, including on a marketplace install where the operator has configured nothing at all, is a dashboard of identity-less agents.
Acceptance Criteria
Technical Notes
- Templates:
config/agent-templates/*/template.yaml (avatar_prompt)
- Generation service and its
not_configured short-circuit: src/backend/services/image_generation_service.py
- Avatar storage:
src/backend/db/agent_settings/avatar.py
- First-run seeding:
src/backend/services/system_seed_service.py
Summary
On a fresh install with no keys configured, every seeded default agent renders without an image. Shipped templates declare
avatar_promptand avatars are produced at runtime by the Gemini-backed image generation service, which short-circuits withnot_configuredwhenGEMINI_API_KEYis absent — which is the state of every new instance. The default fleet is the first thing a new operator sees, and it arrives blank.Context
First-run seeding provisions a starter fleet from bundled
local:templates, so a fresh install comes up with agents already running. Those templates carry anavatar_prompt(e.g.config/agent-templates/scout/template.yaml) rather than an image, andsrc/backend/services/image_generation_service.pyreturnsnot_configuredwithout a Gemini key — so the generation path that would fill it in never runs.The result is that the out-of-the-box experience, including on a marketplace install where the operator has configured nothing at all, is a dashboard of identity-less agents.
Acceptance Criteria
avatar_promptremains the regeneration path once a Gemini key exists; a bundled image must not block an operator from generating a new oneTechnical Notes
config/agent-templates/*/template.yaml(avatar_prompt)not_configuredshort-circuit:src/backend/services/image_generation_service.pysrc/backend/db/agent_settings/avatar.pysrc/backend/services/system_seed_service.py