Symbiotica Agent
A Personality-Carrying LLM Node That Follows Instructions Files
- agent_settings
- image
- response
If you've ever wired an LLM node into ComfyUI, you know the pattern: type a prompt, paste an API key, get a string back. Symbiotica Agent is that pattern with a personality bolted on. It's a stateless LLM node - pick a provider model, hand it a task or an image, and it returns text - except the system prompt isn't a text box you fill by hand. It comes from an agent definition you load, which is a directory of files describing who the agent is and how it operates. The same agent can be reused across workflows, and a workflow gets the agent's behavior without the prompt pasted into the graph.
The practical pitch is this: one agent definition for "the captioning agent," another for "the prompt architect," and every workflow that wires in Symbiotica Agent gets the right behavior automatically. Change the agent's instructions file and every downstream workflow changes with it.
How it works
The node takes an agent_settings wire from the Symbiotica Agent Settings node (that's the loader - see its own article), plus a prompt. It assembles the system prompt from the agent definition - shared personality files plus the agent's own SOUL.md and CLAUDE.md - and makes a single LLM call. Providers supported include Claude, Gemini, GPT and Grok; which one runs is decided by the model in your agent settings.
Under the hood it's a straightforward provider call with a couple of niceties: an optional image input means the same node works as a vision-language call (you can caption or critique a render in the graph), and seed is passed through for the providers that honor it - Gemini and Grok - while Claude ignores it, which the tooltip tells you directly.
The inputs that matter
agent_settings- the required wire from Agent Settings. Without it there's nothing to run; this is where the model, key, and system prompt come from.prompt- your task. Keep it focused: this is a single-shot call, not a chat loop, so everything the agent needs to know should be in this one message.max_tokens(default 4096) andtemperature(default 0.7) - the usual dials. Drop temperature for repeatable structured output.seed- default 1,-1for random, and only meaningful for Gemini/Grok. It's mainly there so re-queueing actually re-runs instead of hitting ComfyUI's cache.model_override- a string input (force-input, so you can wire a model name in from another node) that beats whatever the agent settings say. Handy for A/B-testing models without editing the agent file.api_key- overrides the agent settings key. Empty means it falls back to settings, then environment variables.image- optional. Wire in an IMAGE and the prompt runs against it.
The single output, response, is a plain STRING. Feed it into a text display, a save node, or - the classic trick - into a prompt-engineering lane where the agent writes the prompt that the sampler actually uses.
Install
ComfyUI Manager → search Symbiotica → install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/symbiotica-ai/comfyui-nodes.git symbiotica
pip install -r symbiotica/requirements.txt
Restart ComfyUI. No model downloads - the "model" is a cloud API. You need a key for whichever provider you pick: ANTHROPIC_API_KEY, GEMINI_API_KEY, OPENAI_API_KEY or XAI_API_KEY as an env var, or paste it in the Settings UI / node widget. No key is needed just to load the pack.
Common issues
- "No agent settings." You wired the Agent node but not the Settings node, or the wire is dangling. This node does nothing without its settings input.
- The agent acts like a different model than you expected. Check the
modelon the Settings node - that's the authority.model_overridebeats it only when actually wired. - Claude ignores your seed and temperature keeps drifting. That's not a bug; Anthropic doesn't take a seed. Lower the temperature if you need consistency.
- Responses get cut off mid-answer. Raise
max_tokens; the default 4096 is fine for prompts but small for long output.
One honest caveat: this is a young, niche pack - the same "read the source before you trust a node that carries your API key" rule that applies to the whole API-wrapper category. It's MIT-licensed and does what it says, but it's not a community standard (yet).
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| agent_settings | AGENT_SETTINGS | — | |
| prompt | STRING | The task or question for the agent. | |
| max_tokens | INT | 40961–200000 | — |
| temperature | FLOAT | 0.700–2 | — |
| seed | INT | 1-1–18446744073709550000 | Random seed. -1 for random. Works with Gemini and Grok. Claude ignores seeds. |
| timeout | INT | 50010–3600 | Request timeout in seconds. |
| api_keyopt | STRING | Overrides the agent settings API key. | |
| model_overrideopt | STRING | Overrides the agent settings model. | |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| response | STRING | — |