Your tools keep
their native home.
uuldana-cli supervises agents. Each agent keeps its own tools, authentication, plugin loading, and instruction discovery.
No agent is known by name. uuldana-cli asks the console programs on your search path for their --help, once, and learns the agents from it. The four agents installed on the test machine were found that way and run through uuldana-cli on a real install. Agents that are not installed there have not been tried. Other providers can be described with a JSON manifest.
Native provider integrations
Adapters describe detection, capabilities, permission mappings, launch plans, and events. The runtime owns execution. Native PTY preserves the agent's own terminal UI, which is what every learned adapter launches.
Provider abstractionPlugins, skills & MCP
Plugins, skills, and MCP servers keep working in the agent that owns them. Nothing is translated between agents, so a plugin for one provider does nothing in another.
Compatibility guideHow agents are found
| Step | What happens |
|---|---|
| Candidates | Console programs on the search path, outside the operating system's own folders. On Windows, only programs whose header says console, and the program behind an npm script shim. |
| Ask | --help once, with stdin closed and five seconds to answer. The answer is kept until the program changes. |
| Recognize | A way to start with a prompt, a way to resume, and permission or model options, as the help describes them. |
| Learn | How to start with a prompt, resume by id or continue the latest, and which flags set permissions. |
Nothing in this is a name. A program whose help does not say what it
does can be missed or taken wrongly; a JSON manifest with the same id
corrects it. uuldana resume continues an agent's own
session by id only when its help offers a flag to choose the session
id; any other agent is continued with its own flag for the latest
conversation of the folder, when it has one.
Limit detection is one general reader for every agent. It reads the text an agent prints at its usage limit, looking for an allowance that is gone together with when it returns or what to do about it, and it never moves the work on a warning that an allowance is only partly used. It has been tried on real messages from two agents as test inputs, and on example sentences for the rest.
An explicit compatibility model
| Integration | Behavior | Current state |
|---|---|---|
| Native agent | Launches the real binary with native behavior intact. | Learned from the agent's own help; the four installed on the test machine were tried on a real install. |
| Provider-specific plugin | Uses its owning agent's loader and APIs. | Works in its own agent; never migrated to another. |
| Shared compatible plugin or skill | Used only where the receiving agent supports the format and behavior. | Not translated. Install it in each agent you list. |
| MCP integration | Preserves native MCP discovery by running the agent's terminal UI. | Configured per agent; not copied between agents. |
| Another provider | Describe it with a JSON manifest, or write a compiled adapter. | Manifests are loaded from the adapters directory next to config.json. |
Accounts belong to their agents.
Configure multiple agents and accounts with their own priorities in
config.json. The same provider can appear several times,
each entry with its own environment, for example a different
CLAUDE_CONFIG_DIR. uuldana-cli never reads or copies the
credentials behind an account.
A provider that needs a login still asks you for it, inside the session. Credentials and approvals are not copied between agents.
Account configuration and continuity