Document the OpenAgents CLI

7b8d87a71dc9 · AtlantisPleb · · parent d2ada10b948c

Document the OpenAgents CLI

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

Not deployed through the forge lane

No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.

Changed files

  • modified README.md
  • added docs/openagents-cli/command-reference.md
  • added docs/openagents-cli/create-repository.md
  • added docs/openagents-cli/git.md
  • added docs/openagents-cli/import-github.md
  • added docs/openagents-cli/index.md
  • added docs/openagents-cli/install.md

Diff

7 files changed, +706 -3

README.md modified +10 -3

@@ -11,6 +11,8 @@ tracked in the

11 11
[integration hardening plan](docs/2026-08-20-integration-hardening-and-staging-readiness-recommendations.md).
12 12
The typed settings, safe feature profile, and redacted readiness command are in
13 13
[docs/runtime-configuration.md](docs/runtime-configuration.md).
14
Repository creation, one-time GitHub import, and the terminal client are
15
documented in the [OpenAgents CLI guide](docs/openagents-cli/index.md).
14 16
15 17
## Capability status
16 18

@@ -25,6 +27,8 @@ No part of this repository is approved for production deployment yet.

25 27
- Voice session, transcript, usage, recording, and operator-projection domains.
26 28
- Issues, comments, labels, milestones, projects, public status, changelog, and
27 29
  bounded source-browsing surfaces.
30
- GitHub-backed repository namespaces, private and public repository creation,
31
  one-time GitHub import, Git smart HTTP, and the Effect TypeScript CLI.
28 32
- Git HTTP, push receipts, promotion targets, build receipts, and local BEAM
29 33
  deployment primitives, including transactional direct loading, two-way
30 34
  relups, and provider-neutral rolling replacement.

@@ -43,12 +47,15 @@ feature has passed staging, security review, failure injection, or a soak.

43 47
- Direct BEAM loading, relup installation, rolling replacement, and boot
44 48
  convergence require isolated three-node staging proof before they can be
45 49
  enabled outside a disposable environment.
46
- The self-hosted forge is being hardened, but GitHub remains the canonical Git
47
  remote until the proof-gated cutover in ADR 0007.
50
- The self-hosted forge is being hardened. GitHub remains the canonical remote
51
  for the OpenAgents platform repository until the proof-gated cutover in ADR
52
  0007; newly created hosted repositories use OpenAgents as their source of
53
  truth.
48 54
49 55
### Planned or blocked on hardening
50 56
51
- Repository-backed tenant isolation for every issue and project record.
57
- Staging qualification and release of repository creation, GitHub import, and
58
  the OpenAgents CLI.
52 59
- Separate web and distributed staging lanes, a full regression matrix,
53 60
  failure-injection drills, and a 48-hour soak.
54 61
- Any production rollout. Production remains explicitly out of scope until the
docs/openagents-cli/command-reference.md added +145

@@ -0,0 +1,145 @@

1
# OpenAgents CLI command reference
2
3
The `openagents` command manages authentication and hosted repositories.
4
5
```text
6
openagents <subcommand> [flags]
7
```
8
9
Run `openagents <command> --help` for the reference installed with your CLI
10
version.
11
12
## Global flags
13
14
| Flag | Description |
15
| --- | --- |
16
| `--profile production\|staging\|local` | Select a named API profile. |
17
| `--api-url ORIGIN` | Use a custom HTTPS or loopback API origin. |
18
| `--json` | Write one machine-readable JSON value. |
19
| `--no-color` | Disable ANSI output. |
20
| `--help`, `-h` | Show help. |
21
| `--version`, `-v` | Show the CLI version. |
22
| `--completions bash\|zsh\|fish\|sh` | Print a shell completion script. |
23
24
Place shared flags before the subcommand, for example:
25
26
```sh
27
openagents --profile staging --json repo list
28
```
29
30
Setting `NO_COLOR` also disables ANSI output.
31
32
## Authentication commands
33
34
| Command | Description |
35
| --- | --- |
36
| `openagents auth login` | Start browser-assisted device authorization and store the token. |
37
| `openagents auth login --token-stdin` | Read and store a token from standard input. |
38
| `openagents auth token-stdin` | Read and store a token from standard input. |
39
| `openagents auth status` | Show the selected API, account, namespaces, expiry, and helper state. |
40
| `openagents auth logout` | Remove the stored token for the selected API origin. |
41
| `openagents auth setup-git --local` | Configure the current Git repository. |
42
| `openagents auth setup-git --global --yes` | Configure global Git settings with explicit confirmation. |
43
44
`auth git-credential` is an internal Git helper endpoint. Do not invoke it
45
directly.
46
47
## Repository commands
48
49
### `repo create`
50
51
```text
52
openagents repo create [flags] <name-or-namespace/name>
53
```
54
55
| Flag | Description |
56
| --- | --- |
57
| `--description TEXT` | Set the repository description. |
58
| `--public` | Create a public repository. |
59
| `--private` | Create a private repository, which is the default. |
60
| `--default-branch NAME` | Set the initial default branch. The default is `main`. |
61
| `--wait-timeout SECONDS` | Wait for provisioning. The default is `300`; `0` does not wait. |
62
| `--source DIRECTORY` | Attach the new repository to a Git worktree. |
63
| `--remote NAME` | Set the remote name used with `--source`. The default is `origin`. |
64
65
The command creates the server repository before it configures a local remote.
66
It never pushes automatically.
67
68
### `repo import`
69
70
```text
71
openagents repo import [flags] <github-owner/repository>
72
```
73
74
| Flag | Description |
75
| --- | --- |
76
| `--name NAME` | Override the destination repository name. |
77
| `--namespace OWNER` | State the matching eligible GitHub owner. |
78
| `--public` | Create a public destination. |
79
| `--private` | Create a private destination, which is the default. |
80
| `--wait-timeout SECONDS` | Wait for import. The default is `300`; `0` does not wait. |
81
82
This command performs one import. It does not start synchronization.
83
84
### `repo list`
85
86
```text
87
openagents repo list [--namespace OWNER] [--limit 1..100] [--after CURSOR]
88
```
89
90
The default limit is `30`. When more results exist, human output prints the
91
next opaque cursor and JSON output returns it as `next_cursor`.
92
93
### `repo view`
94
95
```text
96
openagents repo view [OWNER/REPOSITORY]
97
openagents repo view --repo OWNER/REPOSITORY
98
```
99
100
When you omit the repository, the CLI infers it from an exact OpenAgents
101
`origin` remote on the selected API origin.
102
103
### `repo clone`
104
105
```text
106
openagents repo clone [OWNER/REPOSITORY] [DIRECTORY]
107
openagents repo clone --repo OWNER/REPOSITORY [DIRECTORY]
108
```
109
110
The CLI retrieves the clone URL from the API and starts standard Git.
111
112
## JSON and noninteractive use
113
114
With `--json`, stdout contains machine-readable output. Human progress and
115
errors do not contaminate a successful JSON response. Responses never include
116
an API token or token digest.
117
118
In a noninteractive process:
119
120
- Set `OPENAGENTS_TOKEN` or provide an existing credential-store entry.
121
- Pass every ambiguous value as an argument or flag.
122
- Do not use browser login or global Git-helper setup.
123
- Handle `SIGINT` and `SIGTERM` as exit code `130`. The CLI cancels in-flight
124
  HTTP work and terminates its child Git process.
125
126
## Exit codes
127
128
| Code | Meaning |
129
| --- | --- |
130
| `0` | Success. |
131
| `1` | Git, output, or unclassified operational failure. |
132
| `2` | Usage, configuration, or validation error. |
133
| `3` | Authentication, authorization, or credential-store failure. |
134
| `4` | Repository or API resource not found. |
135
| `5` | Conflict, such as an existing repository name. |
136
| `6` | Network, server, transport, or API-contract failure. |
137
| `7` | Provisioning or import failure or timeout. |
138
| `130` | Interrupted by `SIGINT` or `SIGTERM`. |
139
140
## Commands not included
141
142
This release does not provide `repo delete`, `repo mirror`, pull-request,
143
ruleset, SSH-key, generic API, or self-update commands. Use only commands shown
144
by the installed version's `--help` output.
145
docs/openagents-cli/create-repository.md added +122

@@ -0,0 +1,122 @@

1
# Create an OpenAgents repository
2
3
Create an empty repository from the web interface or with the OpenAgents CLI.
4
If the code already exists on GitHub, use a [one-time GitHub
5
import](import-github.md) instead.
6
7
## Create a repository in the browser
8
9
1. Sign in to OpenAgents with GitHub.
10
2. Open `/repositories`.
11
3. Select **New repository**.
12
4. Choose your GitHub user or an eligible GitHub organization namespace.
13
5. Enter a name and optional description.
14
6. Choose **Private** or **Public**. Private is the default.
15
7. Enter the default branch. The default value is `main`.
16
8. Select **Create repository**.
17
18
The repository can briefly show a provisioning state. Push instructions appear
19
after durable provisioning finishes.
20
21
## Create a repository with the CLI
22
23
Create a private repository in your GitHub user namespace:
24
25
```sh
26
openagents repo create my-project
27
```
28
29
Create a public repository in an eligible organization namespace:
30
31
```sh
32
openagents repo create OpenAgentsInc/my-project --public
33
```
34
35
Set a description and default branch:
36
37
```sh
38
openagents repo create my-project \
39
  --description "Example repository" \
40
  --default-branch trunk
41
```
42
43
The CLI waits up to 300 seconds for provisioning by default. Pass
44
`--wait-timeout 0` to return after the server accepts the durable request. The
45
repository continues provisioning on the server.
46
47
## Attach an existing local project
48
49
Create the remote repository and attach it to an existing Git worktree:
50
51
```sh
52
openagents repo create my-project --source .
53
```
54
55
The CLI verifies the Git worktree, adds the server-provided clone URL as the
56
`origin` remote, and prints the next push command. It does not push
57
automatically.
58
59
Choose a different remote name when `origin` already belongs to another host:
60
61
```sh
62
openagents repo create my-project --source . --remote openagents
63
git push -u openagents HEAD
64
```
65
66
The CLI refuses to overwrite an existing remote that points to a different
67
URL. If remote attachment fails, the remote repository still exists.
68
69
## Push the first commit
70
71
For an existing local project:
72
73
```sh
74
openagents auth setup-git --local
75
git push -u origin HEAD
76
```
77
78
To start from an empty directory:
79
80
```sh
81
git init my-project
82
cd my-project
83
git branch -M main
84
git remote add origin https://openagents.com/git/OWNER/my-project.git
85
# Add files, then commit them.
86
openagents auth setup-git --local
87
git push -u origin main
88
```
89
90
Prefer the clone URL returned by the browser or CLI instead of constructing it
91
yourself.
92
93
## Names and visibility
94
95
Repository names are case-insensitive and normalize to lowercase. A name:
96
97
- Contains 1 through 64 ASCII characters.
98
- Starts with a letter or digit.
99
- Uses letters, digits, hyphens, underscores, and qualifying dots.
100
- Cannot use a reserved OpenAgents route or Git-internal name.
101
- Must be unique within the namespace.
102
103
A private repository requires an authorized OpenAgents membership. A public
104
repository permits anonymous Git reads. The creator becomes the repository
105
owner. OpenAgents does not automatically copy every GitHub organization member
106
into the repository.
107
108
## Organization repositories
109
110
OpenAgents uses GitHub to verify organization identity and membership. You need
111
an active GitHub organization administrator membership to create a repository
112
in that organization during the first release.
113
114
Custom OpenAgents namespaces, repository transfer, rename, archive, and delete
115
are not available yet.
116
117
## Next steps
118
119
- [Clone, push, and pull](git.md)
120
- [Import a GitHub repository](import-github.md)
121
- [CLI command reference](command-reference.md)
122
docs/openagents-cli/git.md added +96

@@ -0,0 +1,96 @@

1
# Clone, push, and pull
2
3
OpenAgents serves Git smart HTTP at an HTTPS URL returned by the repository API
4
and web interface. Standard Git performs clone, fetch, push, and pull.
5
6
## Clone with the CLI
7
8
```sh
9
openagents repo clone OWNER/REPOSITORY
10
```
11
12
Choose a destination directory:
13
14
```sh
15
openagents repo clone OWNER/REPOSITORY ./local-directory
16
```
17
18
The command uses the server-provided clone URL and invokes Git without putting
19
the token in the URL or process arguments. For the clone operation, it scopes
20
the OpenAgents credential helper to the selected API origin.
21
22
## Clone with Git
23
24
Copy the HTTPS URL from the repository page, then run:
25
26
```sh
27
git clone https://openagents.com/git/OWNER/REPOSITORY.git
28
```
29
30
Public repositories support anonymous clone and fetch. Private repositories
31
require an authorized credential.
32
33
Before you use standard Git with a private repository, configure the helper:
34
35
```sh
36
cd existing-worktree
37
openagents auth setup-git --local
38
```
39
40
Use global setup only when you want every local repository to use the helper
41
for the selected OpenAgents origin:
42
43
```sh
44
openagents auth setup-git --global --yes
45
```
46
47
## Push and pull
48
49
After you configure the helper, use standard Git commands:
50
51
```sh
52
git push -u origin main
53
git fetch origin
54
git pull --ff-only
55
```
56
57
Repository owners, maintainers, and contributors can push. Viewers can clone
58
and fetch but cannot push. Token authorization is checked again for each Git
59
request, so revoking or expiring a token takes effect without changing the
60
remote URL.
61
62
## Infer a repository from `origin`
63
64
From a worktree whose `origin` is an exact OpenAgents clone URL:
65
66
```sh
67
openagents repo view
68
```
69
70
The CLI accepts only `/git/OWNER/REPOSITORY.git` on the selected API origin. It
71
does not infer authority from an arbitrary URL that resembles a repository
72
path. Override inference explicitly when needed:
73
74
```sh
75
openagents repo view --repo OWNER/REPOSITORY
76
openagents repo clone -R OWNER/REPOSITORY
77
```
78
79
## Authentication safety
80
81
The credential helper:
82
83
- Returns credentials only for the exact selected OpenAgents origin.
84
- Rejects username, port, path, or protocol mismatches.
85
- Reads `OPENAGENTS_TOKEN` or the operating-system credential store.
86
- Never writes a token into the Git remote URL.
87
- Never logs complete credential-helper input.
88
89
OpenAgents uses HTTPS in this release. SSH remotes and SSH-key management are
90
not available yet.
91
92
## Next steps
93
94
- [Install and authenticate the CLI](install.md)
95
- [CLI command reference](command-reference.md)
96
docs/openagents-cli/import-github.md added +106

@@ -0,0 +1,106 @@

1
# Import a GitHub repository
2
3
Import copies one accepted GitHub snapshot into a new OpenAgents repository.
4
It does not create a mirror or continue synchronizing with GitHub.
5
6
## Prerequisites
7
8
You need:
9
10
- An OpenAgents account connected to GitHub.
11
- A current GitHub connection with the `repo` and `read:org` grants.
12
- Read access to the source GitHub repository.
13
- An eligible destination namespace that matches the GitHub source owner.
14
- An active GitHub organization administrator membership for an organization
15
  destination.
16
17
If your existing GitHub connection lacks the required grants, reconnect it
18
before importing.
19
20
## Import in the browser
21
22
1. Sign in to OpenAgents with GitHub.
23
2. Open `/repositories`.
24
3. Select **Import from GitHub**.
25
4. Choose a repository from the bounded GitHub repository list.
26
5. Confirm the matching destination namespace.
27
6. Keep the source name or enter a different destination repository name.
28
7. Choose **Private** or **Public**. Private is the default, even when the
29
   GitHub source is public.
30
8. Review any Git LFS warning.
31
9. Select **Import repository**.
32
33
The import page shows the accepted snapshot and bounded lifecycle state. It
34
does not expose raw Git output or a GitHub token.
35
36
## Import with the CLI
37
38
Import a repository into its matching namespace:
39
40
```sh
41
openagents repo import OpenAgentsInc/example
42
```
43
44
Choose a different destination name:
45
46
```sh
47
openagents repo import OpenAgentsInc/example --name example-copy
48
```
49
50
Create a public destination explicitly:
51
52
```sh
53
openagents repo import OpenAgentsInc/example --public
54
```
55
56
You can state the matching organization explicitly:
57
58
```sh
59
openagents repo import OpenAgentsInc/example --namespace OpenAgentsInc
60
```
61
62
The `--namespace` value must match the GitHub source owner in this release. You
63
cannot import `SOURCE/repository` directly into an unrelated namespace.
64
65
The CLI waits up to 300 seconds by default. Pass `--wait-timeout 0` to return
66
after the server accepts the durable import. A client timeout does not cancel
67
the server-side import.
68
69
## What the import copies
70
71
| Copied | Not copied |
72
| --- | --- |
73
| Git commit and object history reachable from accepted refs | GitHub Issues |
74
| `refs/heads/*` branches | Pull requests and reviews |
75
| `refs/tags/*` tags | Actions workflows, runs, and secrets |
76
| The source default branch | Releases and repository settings |
77
| Submodule pointer commits | Wikis and Git LFS objects |
78
79
OpenAgents freezes the accepted branch and tag map before copying data. It
80
verifies that same ref snapshot before marking the repository ready. A GitHub
81
commit created after acceptance is not part of the import.
82
83
Git LFS pointer files remain in Git history, but OpenAgents does not copy the
84
referenced LFS objects. Download or migrate those objects separately before
85
you rely on the imported repository.
86
87
## After the import
88
89
OpenAgents becomes the source of truth for the new repository. Later GitHub
90
changes do not flow to OpenAgents, and OpenAgents pushes do not flow back to
91
GitHub. The repository page labels the result as imported once and records the
92
source and accepted snapshot.
93
94
Clone and work with the destination as a normal OpenAgents repository:
95
96
```sh
97
openagents repo clone OpenAgentsInc/example
98
cd example
99
git push
100
```
101
102
## Next steps
103
104
- [Clone, push, and pull](git.md)
105
- [CLI command reference](command-reference.md)
106
docs/openagents-cli/index.md added +74

@@ -0,0 +1,74 @@

1
# OpenAgents CLI
2
3
The OpenAgents CLI (`openagents`) manages OpenAgents-hosted Git repositories
4
from a terminal. It uses the same repository API as the OpenAgents web
5
interface and leaves Git data transfer to standard Git.
6
7
The CLI is implemented and locally verified. The production release remains
8
gated while OpenAgents completes staging qualification.
9
10
## What you can do
11
12
The first release lets you:
13
14
- Sign in through your GitHub-backed OpenAgents account.
15
- Create a private or public repository in your GitHub user namespace.
16
- Create a repository in an eligible GitHub organization namespace.
17
- Import a GitHub repository as a one-time copy.
18
- List and inspect repositories that you can access.
19
- Clone repositories and configure Git authentication.
20
- Push, pull, and fetch through Git smart HTTP.
21
- Use JSON output and stable exit codes in scripts and agents.
22
23
Pull requests, repository deletion, continuous GitHub mirroring, SSH transport,
24
rulesets, and self-update are not part of this release.
25
26
## Namespaces and access
27
28
OpenAgents uses GitHub namespaces in the first release. When you sign in with
29
GitHub, your OpenAgents user namespace has the same login as your GitHub user.
30
Eligible organization namespaces use the same GitHub organization login. You
31
do not claim a separate OpenAgents namespace.
32
33
OpenAgents keys namespaces to GitHub's immutable account IDs. If a GitHub login
34
changes, OpenAgents can update the displayed login without changing the
35
repository's identity.
36
37
Creating or importing in an organization requires an active GitHub organization
38
membership with the organization administrator role. OpenAgents adds the
39
creator as the repository owner. It does not automatically grant access to
40
every member of the GitHub organization.
41
42
## Visibility and privacy
43
44
New repositories are private unless you explicitly select public visibility.
45
A public repository permits anonymous Git reads. A private repository is
46
visible only to authorized OpenAgents members, and unauthorized requests do
47
not reveal whether it exists.
48
49
OpenAgents stores GitHub access tokens on the server and never sends them to
50
the browser or the CLI. The CLI stores its OpenAgents API token in an approved
51
operating-system credential store, or reads it from `OPENAGENTS_TOKEN` for a
52
single environment.
53
54
Repository creation does not grant deployment or operator authority. The
55
deployment allowlist remains separate from hosted repositories.
56
57
## Manage repositories in the browser
58
59
After you sign in, open `/repositories` to see the repositories that you can
60
access.
61
62
- Select **New repository** to create an empty repository.
63
- Select **Import from GitHub** to copy one GitHub repository.
64
- Open a repository to see its clone URL, lifecycle state, Issues, Projects,
65
  code, and import receipt when applicable.
66
67
## Next steps
68
69
- [Install the CLI](install.md)
70
- [Create a repository](create-repository.md)
71
- [Import a GitHub repository](import-github.md)
72
- [Clone, push, and pull](git.md)
73
- [CLI command reference](command-reference.md)
74
docs/openagents-cli/install.md added +153

@@ -0,0 +1,153 @@

1
# Install the OpenAgents CLI
2
3
The npm package is `@openagentsinc/cli`, and it installs the `openagents`
4
command. The package requires Node.js 24 or later.
5
6
The production npm release remains gated. The install command below applies
7
after the package is published.
8
9
## Install with npm
10
11
```sh
12
npm install --global @openagentsinc/cli
13
```
14
15
Verify the installed version:
16
17
```sh
18
openagents --version
19
```
20
21
To update after a release, install the latest npm package again:
22
23
```sh
24
npm install --global @openagentsinc/cli@latest
25
```
26
27
The CLI does not include an `openagents update` command.
28
29
## Run the CLI from source
30
31
From the root of the `openagents` monorepo:
32
33
```sh
34
pnpm --filter @openagentsinc/cli run build
35
node packages/openagents-cli/dist/main.js --version
36
```
37
38
## Sign in
39
40
Start the browser-assisted device authorization flow:
41
42
```sh
43
openagents auth login
44
```
45
46
The CLI prints a verification URL and user code, opens the URL when your
47
operating system supports it, and waits for approval. Complete the flow with
48
the GitHub account connected to OpenAgents.
49
50
The CLI stores the resulting `oa_pat_` token for the selected API origin:
51
52
- On macOS, it uses Keychain through the `security` command.
53
- On Linux, it uses Secret Service through `secret-tool`.
54
- On an unsupported platform or a host without an admitted credential store,
55
  it fails closed. Use `OPENAGENTS_TOKEN` without storing the token.
56
57
Check the selected account, namespaces, token source, expiry, and Git helper
58
state:
59
60
```sh
61
openagents auth status
62
```
63
64
Remove the stored credential for the selected API origin:
65
66
```sh
67
openagents auth logout
68
```
69
70
## Use a token without a browser
71
72
For an interactive token import, pass the token through standard input. The
73
CLI never accepts a token as a command-line argument.
74
75
```sh
76
openagents auth token-stdin
77
```
78
79
`openagents auth login --token-stdin` provides the same behavior.
80
81
For an agent or CI process, set the token in the environment for the process:
82
83
```sh
84
OPENAGENTS_TOKEN="oa_pat_..." openagents --json repo list
85
```
86
87
Do not put a token in a Git URL, configuration file, shell history, or process
88
argument.
89
90
## Select an API profile
91
92
The CLI uses the production profile by default.
93
94
| Profile | API origin |
95
| --- | --- |
96
| `production` | `https://openagents.com` |
97
| `staging` | `https://staging.openagents.com` |
98
| `local` | `http://localhost:4000` |
99
100
Select a named profile or a custom origin before the command:
101
102
```sh
103
openagents --profile staging auth status
104
openagents --profile local repo list
105
openagents --api-url https://forge.example.com repo list
106
```
107
108
Custom origins must use HTTPS. The CLI permits HTTP only for loopback hosts.
109
An API URL must be an origin without a path, query, fragment, username, or
110
password.
111
112
The CLI resolves endpoint settings in this order:
113
114
1. `--api-url`
115
2. `--profile`
116
3. `OPENAGENTS_API_URL`
117
4. `OPENAGENTS_PROFILE`
118
5. `api_url` in `~/.config/openagents/config.json`
119
6. `profile` in `~/.config/openagents/config.json`
120
7. The production profile
121
122
You can set `OPENAGENTS_CONFIG_PATH` to read a different configuration file.
123
The file accepts `profile` or `api_url` and never stores credentials.
124
125
```json
126
{
127
  "profile": "local"
128
}
129
```
130
131
## Configure Git authentication
132
133
Configure only the current Git repository:
134
135
```sh
136
openagents auth setup-git --local
137
```
138
139
Global setup requires an interactive terminal and explicit confirmation:
140
141
```sh
142
openagents auth setup-git --global --yes
143
```
144
145
The helper is scoped to the selected OpenAgents origin. It refuses unrelated
146
hosts and never places a token in a Git URL or process argument.
147
148
## Next steps
149
150
- [Create a repository](create-repository.md)
151
- [Clone, push, and pull](git.md)
152
- [CLI command reference](command-reference.md)
153

This page updates live while a promote is in flight · changelog