Skip to main content
Build and manage agents.

Development workflow

Templates: LLM (default), AUTO_MANAGED_STATE, BLANK Agent types: GUILD_TYPESCRIPT, GUILD_NATIVE, GOOSE, OPENCLAW. Values are case-insensitive. Each type scaffolds a different entry point:
--agent-type appears only on accounts that have more than one agent type available. Omit the flag in a terminal and the CLI prompts you to choose from the types you have available. In non-interactive mode the flag is required, and omitting it exits with Error: --agent-type is required in non-interactive mode.
--template is only supported for GUILD_TYPESCRIPT. Passing it with any other agent type exits with Error: --template is not supported for agent type <agent-type>.
In non-interactive mode, --owner is required when your account belongs to one or more organizations. Use guild config set default_owner <name-or-id> to set a default and avoid passing --owner on every invocation. In interactive mode, the CLI always prompts for owner selection.
--publish implies --wait: it always waits for validation and publish to finish, then prints Version is now published and available in the catalog. Use --timeout <seconds> (default: 300) to bound that wait. The value must be a positive integer, otherwise the command prints Invalid --timeout value and exits with status 1. If validation is still running when the timeout elapses, the CLI tells you how to finish the job:

Forking

Fork a published agent version into a new independent agent with its own repository.
A fork inherits the source agent’s category, and its tags along with it. Pass --category to change it — the source tags are then dropped, and any --tags you pass are validated against the new category’s allowed set. Inherited tags exclude Guild’s own guild:-prefixed ones. Run guild agent categories <category> to see the allowed tags for a category. <identifier> is an agent ID or name. If omitted, the command reads guild.json in the current directory.
guild agent save -A/--all commits only modified tracked files. New files are untracked and are not saved — stage them with git add <file> (or git add .) first.

save

Commit your code and create a new version. Versions start as drafts until you publish them.
TypeScript agents derive their version from package.json. Goose agents (recipe.yaml) and Guild Native agents (PROMPT.md) do not use a package.json, so guild agent save skips the package.json version-bump checks for them. --bump and the default bump are no-ops for these agent types. For TypeScript agents, guild agent save validates package-lock.json to keep dependency installs reproducible. The lockfile must be tracked in Git and synchronized with package.json. If it is stale or invalid, the save is aborted so you can regenerate it with npm install and commit the result. If the lockfile is missing, untracked, or ignored, the CLI prints a warning and falls back to legacy dependency resolution. Commit package-lock.json alongside package.json so published versions install the same dependency tree. When you run guild agent save --publish on a Goose or Guild Native agent without --version-number, the CLI derives the next version automatically as a patch increment of the latest published version, or 1.0.0 when no published version exists.

test

Test the agent in the current directory. guild agent test polls for the agent’s response and prints it. Use --timeout to override how long the CLI waits before the poll times out.
A poll timeout is recoverable: the session is not discarded when polling times out, so you can resume it. In --mode json, the error output includes the session ID and the resume hint guild agent test --resume <session-id>. In --mode jsonl, the timeout output includes the session ID and the same resume hint, and the command continues to the next input line.
guild agent test runs any agent the workspace already trusts — one your account owns, or one installed in the workspace, including a public or third-party agent you added from the Hub. See Agent-test session authorization.
Before it runs, the CLI checks that the files required for the agent’s type are present: agent.ts and package.json for Guild TypeScript, PROMPT.md for Guild Native, recipe.yaml for Goose, and AGENTS.md for OpenClaw. It resolves the type from guild.json or the Guild API and names the file missing for that type.

chat

Chat with the agent you’re developing from inside the agent directory. By default, guild agent chat creates an ephemeral build from your local files and starts a new session.
Ephemeral builds are the default. guild agent chat builds an agent version from your local files, and unchanged files reuse the cached ephemeral build.
Ephemeral builds include only files tracked by Git. guild agent test and guild agent chat upload files that are already committed or staged with git add. New untracked files are ignored until you stage them with git add. Modified tracked files still upload their working-tree content, so you can test uncommitted changes to existing files without committing them first.
--resume <session-id> works in all modes: interactive, --mode json, and --mode jsonl. Resuming a session skips version resolution and ephemeral builds entirely, because the resumed session already pins its agent version and workspace. --workspace and --agent-version are ignored when you resume. In --mode json and --mode jsonl, resuming appends your input to the specified session as a new user message instead of creating a new session. The CLI reports the resumed session’s ID, and response polling only considers events created after your message. If the session ID does not exist or you cannot access it, guild agent chat exits with code 1 without building the agent and prints:

Publishing

Version history

Render an agent’s version history as git-log-style blocks, each showing the commit SHA, version number, status, validation status, relative date, and summary.
The agent argument is optional and accepts an agent ID or a full name such as myorg~my-agent; omit it to use the agent in the current directory.

diff

Show what changed between your local files and a published version, as a colored unified diff.
The version argument is optional and defaults to the latest published version. Run this from inside an agent directory — the command requires a guild.json and compares the same git-tracked working-tree files that guild agent save uploads.

Discovery and management

Passing --workspace <id> to guild agent list lists the agents installed in that workspace rather than the platform-wide public roster. The agent argument is optional for both commands. It accepts an agent ID or a full name like myorg~my-agent, and defaults to the agent in guild.json in the current directory. See Disabling an agent for what archiving changes. When you pass --workspace, guild agent list returns the agents installed in that workspace, identified by ID or name. This set is specific to the workspace and excludes unrelated public agents.
The --published flag is ignored when combined with --workspace, because installed agents already reference committed versions.

capabilities

Show an agent’s resolved tools, grouped by their source unit — integrations, sub-agents, and built-in or legacy services. Each tool is marked read, write, or unknown. The unknown marker is shown separately from read because an unclassified tool may write.
The [identifier] argument is optional. It accepts an agent ID or a full name like myorg~my-agent, and defaults to the agent in the current directory. --version <id> overrides the default latest published version. --mode json emits the raw payload with version_id, tools, and access fields. The command requires authentication; run guild auth login first. Example output:
With --output json, the command emits a machine-readable payload instead:

tags

categories

Run guild agent categories without arguments to list every category. The list table does not include a TAGS column. To see a category’s allowed tags, pass its name: