qory

command module
v0.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 12, 2026 License: Apache-2.0 Imports: 5 Imported by: 0

README

🐝 qory

qory gets your coding agent ready to work, and keeps it in check.

It does three things:

  1. It builds the harness. A harness is what your agent reads: instructions, skills, agents, commands, settings. You write it once, as modules. qory composes it for every agent you use.
  2. It prepares the workspace. One worktree per branch. Set up and ready to work.
  3. It runs the agent safely. Every connection is recorded. You decide what the agent may reach. Your tokens stay outside.

Don't worry, use Qory

Why

You have many repositories. You use more than one agent. Each agent reads a different folder: .claude, .codex, .gemini. So every repository keeps copies. The copies drift. Nobody knows which version a checkout runs.

And an agent acts unsupervised. It calls hosts you don't see. It holds your tokens. Afterwards, you can't tell what it did.

Install

brew install qoryai/tap/qory

Or with the install script, which puts the binary in ~/.local/bin. Or with Go 1.27 or above:

curl -fsSL https://raw.githubusercontent.com/qoryai/qory/main/install.sh | sh
go install github.com/qoryai/qory@latest

qory update installs the newest release, the same way this qory was installed. Every command tells you when a newer release is out. QORY_NO_UPDATE_CHECK=1 turns that off. More: qory update.

Try it

mkdir hello && cd hello
qory setup example       # a stack with two modules
qory harness compose     # build the harness into this folder
claude                   # type /hello
qory run -- -p "/hello"  # the same, observed and recorded
qory harness remove      # clean up

1. Build the harness

A module is one piece of harness. One piece for every repository of your team. One for apps on your framework. One for this repository alone.

A stack lists modules in order. The repository commits it in qory.yaml:

apiVersion: qory.dev/v1alpha1
harness:
  target:
    runtime: claude          # or [claude, codex]
  modules:
    - name: core             # shared by every repository, pinned to a tag
      source: {git: https://github.com/acme/harness, ref: v2.4.0, path: core}
    - name: app              # this repository's module
      source: {path: ./harness}

qory harness compose builds one tree from the stack. It writes the tree the way each agent reads it. The tree stays out of git.

  • One module, every agent. Claude Code, Codex, Gemini CLI, OpenCode, Cursor, Copilot CLI, Amp, Goose, and any tool that reads AGENTS.md.
  • No silent overrides. Two modules ship the same skill? qory refuses until the stack picks one.
  • A report. qory harness inspect shows where every entry came from.

Think of Docker: a module is an image, the stack is the Compose file.

More: docs/harness.md.

2. Prepare the workspace

qory worktree add feature     # ../wt-feature, on branch feature, harness composed
qory worktree add --pr 7      # check out pull request 7
qory worktree remove          # remove the worktree and its branch

qory.yaml says what a new worktree needs: files to link, commands to run.

More: docs/worktrees.md.

3. Run the agent safely

qory run starts the agent on its harness.

  • Observed. All traffic goes through a proxy on your machine. Each run is recorded in ~/.local/state/qory/runs/, or under $XDG_STATE_HOME/qory when that is set to an absolute path, outside the checkout.
  • Fenced. Add a wall: the agent runs in a container. Its only way out is the proxy. You decide which hosts it may reach.
  • No tokens inside. The agent gets a placeholder. The proxy adds the real token on the way out.
  • Reported. Optionally, every run reports to your server.
qory run                                    # observed and recorded
qory run --wall docker --image my-agent:1   # in a container; you build the image

More: docs/run.md.

Commands

Command What it does
qory setup repo Write the repository's qory.yaml
qory setup example Write the hello example into this folder
qory setup machine Write your qory.yaml: how qory runs here
qory setup shell Completions, and a shell that follows worktrees
qory harness compose Build the harness (qory hc)
qory harness inspect Show where each entry came from (qory hi)
qory harness remove Remove the harness (qory hr)
qory harness launch Print the command that starts an agent on it (qory hl)
qory worktree add Add a worktree, ready to work (qory wa)
qory worktree remove Remove a worktree and its branch (qory wr)
qory worktree list List every worktree and its branch (qory wl)
qory run Run the agent, observed and recorded
qory gateway Run this machine's gateway for the runs of other machines
qory config Show every setting and where it comes from
qory update Install the newest release

Every command: docs/commands. The file format: contracts/harness/v1.

Contributing

See CONTRIBUTING.md. Contributions are made under the agreement in CLA.md.

Licence

Apache License 2.0. See LICENSE. Qory™ is a trademark of 8wonders GmbH; TRADEMARKS.md defines what you may do with the name.

Documentation

Overview

Command qory composes the harness a runtime loads from modules.

Directories

Path Synopsis
Package cmd is the command tree of the qory binary: one command per noun, one subcommand per verb.
Package cmd is the command tree of the qory binary: one command per noun, one subcommand per verb.
internal
checkout
Package checkout locates the git checkout a command works on and identifies it.
Package checkout locates the git checkout a command works on and identifies it.
compose
Package compose turns a stack into one flat tree: every entry once, from one module.
Package compose turns a stack into one flat tree: every entry once, from one module.
config
Package config reads qory.yaml: the repository's own document and the machine's.
Package config reads qory.yaml: the repository's own document and the machine's.
exports
Package exports reads the exports section of a repository's qory.yaml: the stacks and the modules the repository publishes for other repositories, each by name, and the directories they live in.
Package exports reads the exports section of a repository's qory.yaml: the stacks and the modules the repository publishes for other repositories, each by name, and the directories they live in.
foragerdir
Package foragerdir is the directory of forager.yaml, everything qory keeps on this machine for its server beside forager.yaml: the access key's secret, the moved-aside secrets, the new secret of a key being enrolled, the replaced secret of a key being replaced, the instance id, the stored-secrets marker, the pending enrolment and its answer, and the lock files.
Package foragerdir is the directory of forager.yaml, everything qory keeps on this machine for its server beside forager.yaml: the access key's secret, the moved-aside secrets, the new secret of a key being enrolled, the replaced secret of a key being replaced, the instance id, the stored-secrets marker, the pending enrolment and its answer, and the lock files.
gendocs command
Command gendocs writes the command reference, one Markdown page per command, into the directory passed as its argument.
Command gendocs writes the command reference, one Markdown page per command, into the directory passed as its argument.
image
Package image checks an agent's image against what Forager's contract says an image provides, contracts/forager/v1/README.md §Images of github.com/qoryai/forager: it runs as any user the machine gives it, with HOME a place that user may write; it keeps its authorities in a bundle where the wall reads them; it holds the runtime and the programs an agent delivers its work with; and it needs no setuid program and no capability.
Package image checks an agent's image against what Forager's contract says an image provides, contracts/forager/v1/README.md §Images of github.com/qoryai/forager: it runs as any user the machine gives it, with HOME a place that user may write; it keeps its authorities in a bundle where the wall reads them; it holds the runtime and the programs an agent delivers its work with; and it needs no setuid program and no capability.
integration
Package integration runs the program of an integration as the integration contract has it, contracts/integration/v1 of github.com/qoryai/integrations: <program> describe prints the integration's description, one JSON document, and every role is started as <program> <role> --settings <json> -- [the role's own arguments].
Package integration runs the program of an integration as the integration contract has it, contracts/integration/v1 of github.com/qoryai/integrations: <program> describe prints the integration's description, one JSON document, and every role is started as <program> <role> --settings <json> -- [the role's own arguments].
module
Package module reads one directory of harness material: its optional manifest, the entries it ships per kind, its settings fragments and its instruction file.
Package module reads one directory of harness material: its optional manifest, the entries it ships per kind, its settings fragments and its instruction file.
render
Package render writes a composed harness into a checkout the way one runtime reads it.
Package render writes a composed harness into a checkout the way one runtime reads it.
render/amp
Package amp renders for Amp, which reads a project's .amp directory for its settings, AGENTS.md at the checkout root, and skills from .agents/skills.
Package amp renders for Amp, which reads a project's .amp directory for its settings, AGENTS.md at the checkout root, and skills from .agents/skills.
render/any
Package any renders for a program that follows the AGENTS.md convention and has no package of its own, reading the instructions from AGENTS.md at the checkout root and skills from .agents/skills.
Package any renders for a program that follows the AGENTS.md convention and has no package of its own, reading the instructions from AGENTS.md at the checkout root and skills from .agents/skills.
render/claude
Package claude renders for Claude Code, which reads a project's .claude directory: the skills, agents, commands, output styles and hooks under it, its settings.json, and CLAUDE.md beside them, and .mcp.json at the checkout root for the MCP servers.
Package claude renders for Claude Code, which reads a project's .claude directory: the skills, agents, commands, output styles and hooks under it, its settings.json, and CLAUDE.md beside them, and .mcp.json at the checkout root for the MCP servers.
render/codex
Package codex renders for Codex CLI, which reads a project's .codex directory, skills from .agents/skills, and AGENTS.override.md ahead of AGENTS.md.
Package codex renders for Codex CLI, which reads a project's .codex directory, skills from .agents/skills, and AGENTS.override.md ahead of AGENTS.md.
render/copilot
Package copilot renders for GitHub Copilot CLI, which reads agents from .github/agents, hook files from .github/hooks, AGENTS.md at the checkout root, and skills from .agents/skills.
Package copilot renders for GitHub Copilot CLI, which reads agents from .github/agents, hook files from .github/hooks, AGENTS.md at the checkout root, and skills from .agents/skills.
render/cursor
Package cursor renders for Cursor and the Cursor CLI, which read a project's .cursor directory for agents, hooks and settings files such as hooks.json, cli.json and mcp.json, AGENTS.md at the checkout root, and skills from .agents/skills.
Package cursor renders for Cursor and the Cursor CLI, which read a project's .cursor directory for agents, hooks and settings files such as hooks.json, cli.json and mcp.json, AGENTS.md at the checkout root, and skills from .agents/skills.
render/gemini
Package gemini renders for Gemini CLI, which reads a project's .gemini directory, containing its settings.json and the skills, agents, commands and hooks under it, and GEMINI.md at the checkout root.
Package gemini renders for Gemini CLI, which reads a project's .gemini directory, containing its settings.json and the skills, agents, commands and hooks under it, and GEMINI.md at the checkout root.
render/goose
Package goose renders for Goose, which reads AGENTS.md at the checkout root, skills from .agents/skills and agents from .agents/agents.
Package goose renders for Goose, which reads AGENTS.md at the checkout root, skills from .agents/skills and agents from .agents/agents.
render/opencode
Package opencode renders for OpenCode, which reads a project's .opencode directory for agents, commands and hooks, opencode.json for its config, AGENTS.md at the checkout root, and skills from .agents/skills.
Package opencode renders for OpenCode, which reads a project's .opencode directory for agents, commands and hooks, opencode.json for its config, AGENTS.md at the checkout root, and skills from .agents/skills.
report
Package report is the JSON record of one compose: every module with its pin, every entry with its module.
Package report is the JSON record of one compose: every module with its pin, every entry with its module.
source
Package source resolves a module's source to a directory on disk and a pin.
Package source resolves a module's source to a directory on disk and a pin.
stack
Package stack reads qory-stack.yaml.
Package stack reads qory-stack.yaml.
ui
Package ui prints everything a person reads on the terminal, in one vocabulary.
Package ui prints everything a person reads on the terminal, in one vocabulary.
update
Package update finds the newest release of qory and installs it.
Package update finds the newest release of qory and installs it.
user
Package user reads the name to greet a person with from the local configuration.
Package user reads the name to greet a person with from the local configuration.
worktree
Package worktree adds, removes and lists the linked worktrees of a repository, and prepares a new one the way the repository's qory.yaml defines: files linked or copied from the main checkout, or from anywhere on the machine, and commands run in the new worktree.
Package worktree adds, removes and lists the linked worktrees of a repository, and prepares a new one the way the repository's qory.yaml defines: files linked or copied from the main checkout, or from anywhere on the machine, and commands run in the new worktree.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL