OrcAI.Tool 0.3.0

There is a newer version of this package available.
See the version list below for details.
dotnet tool install --global OrcAI.Tool --version 0.3.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local OrcAI.Tool --version 0.3.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=OrcAI.Tool&version=0.3.0
                    
nuke :add-package OrcAI.Tool --version 0.3.0
                    

OrcAI CLI

A CLI tool for automating bulk GitHub repository upgrades. It reads a YAML job configuration file and manages GitHub Projects, issues, and Copilot assignments across multiple repositories.

Prerequisites

  • gh CLI: Install from cli.github.com — must be installed and on PATH
  • Authentication: One of the following must be configured before running any command other than orcai auth:
    1. Stored PAT — ORCAI_PAT env var, or ~/.config/orcai/auth.json with "type": "pat"
    2. Stored GitHub App — ORCAI_APP_ID / ORCAI_APP_INSTALLATION_ID / ORCAI_APP_KEY_PATH / ORCAI_APP_PRIVATE_KEY env vars, or ~/.config/orcai/auth.json with "type": "app"
    3. GH_TOKEN environment variable
    4. Ambient gh CLI auth (gh auth token)

Usage

YAML Config Format

All data commands require a YAML file:

job:
  title: "My Project Title"
  org:   "my-github-org"
  # skipCopilot: true  # optional — disable @copilot assignment

repos:
  - "repo-one"
  - "repo-two"

issue:
  template: "./issue-body.md"
  labels: ["migration", "automated"]

generate

Scaffold a new YAML job config and a stub Markdown issue template.

orcai generate --name <name> --org <org> [--repo <repo>...] [--output <path>] [--skip-copilot] [--interactive]
Flag Required Description
--name Conditional Job name (used as project and issue title). Required unless --interactive.
--org Conditional GitHub organisation slug. Required unless --interactive.
--repo No Repo short-name to include. Repeatable (--repo a --repo b).
--output No Output YAML file path. Defaults to <slug>.yml in the current directory.
--skip-copilot No Emit skipCopilot: true in the generated config.
--interactive No Prompt for missing values and show a TUI repo multi-select fetched live from GitHub.

Outputs a <slug>.yml config file and a <slug>.md stub issue template.

auth

Store credentials for use by all other commands. Three subcommands are available: pat, app, and create-app.

PAT:

orcai auth pat --token <token>
Flag Required Description
--token Yes GitHub Personal Access Token (ghp_...). Requires repo and project scopes.

GitHub App:

orcai auth app --app-id <id> --key <path> --installation-id <id>
Flag Required Description
--app-id Yes GitHub App ID (shown on the App settings page)
--key Yes Path to the PEM private key file
--installation-id Yes Installation ID for the target organisation

Create GitHub App (browser-based):

orcai auth create-app [--app-name <name>] [--org <org>] [--port <port>]
Flag Required Description
--app-name No Name for the new GitHub App (default: orcai)
--org No Register the app under an organisation instead of your personal account
--port No Local callback port for the OAuth redirect (default: 9876)

This command automates app registration but app installation requires a manual step:

  1. Automatic — opens your browser, submits the app manifest to GitHub, exchanges the OAuth code for credentials, saves the private key to ~/.config/orcai/app.pem and writes auth.json. A second browser tab opens to the app's permissions page so you can grant the org-level Projects: Read and write permission (not settable via manifest).
  2. Manual — you must install the app on your org or account by clicking through the GitHub UI. The CLI prints step-by-step instructions showing exactly where to find the installation ID in the GitHub UI.
  3. Automatic (interactive) — if running in a terminal, you are shown the install instructions and then prompted to enter the installation ID immediately, which completes the auth.json configuration. In non-interactive (CI) mode, the same instructions plus the manual command to run are printed instead:
  orcai auth app --app-id <id> --key <path> --installation-id <id>

Credentials are stored in ~/.config/orcai/auth.json and validated immediately. Environment variables (ORCAI_PAT, ORCAI_APP_ID, etc.) override stored values at runtime without modifying the file.

See docs/app-auth.md for setting up GitHub App authentication and docs/AUTH-ENV-VARS.md for environment variable reference.

run

Execute a bulk upgrade job. For each repository in the YAML, orcai will:

  1. Find or create the GitHub Project for the org (idempotent)
  2. Find or create an issue using the issue template (idempotent)
  3. Add the issue to the GitHub Project (idempotent)
  4. Assign @copilot to the issue if no assignees are set
orcai run <yaml_file> [--verbose] [--auto-create-labels] [--skip-copilot]
Argument / Flag Required Description
<yaml_file> Yes Path to the YAML job configuration file
--verbose No Emit detailed per-repo progress messages
--auto-create-labels No Create any labels that don't exist in a repo before applying them
--skip-copilot No Skip assigning @copilot to issues

On success a lock file (<basename>.lock.json) is written alongside the YAML. On subsequent runs, if the YAML is unchanged the lock file is used to short-circuit all network calls.

info

Display a formatted snapshot of the current state of a job.

orcai info <yaml_file> [--skip-lock] [--save-lock]
Argument / Flag Required Description
<yaml_file> Yes Path to the YAML job configuration file
--skip-lock No Bypass the lock file and fetch live state from GitHub
--save-lock No After fetching live state from GitHub, persist a new lock file

By default, reads from the lock file if it exists (no network calls). Use --skip-lock --save-lock to force a fresh fetch and update the lock file.

cleanup

Tear down everything that run created for the same YAML configuration.

orcai cleanup <yaml_file> [--dryrun]
Argument / Flag Required Description
<yaml_file> Yes Path to the YAML job configuration file
--dryrun No Preview all deletions without making any changes

Closes open PRs linked to each issue, deletes each issue, deletes the GitHub Project, and removes the lock file.


For full flag details, output formats, lock file schema, and advanced usage see docs/cli-reference.md.


OrcAI Nushell Scripts

This repository contains Nushell scripts for managing GitHub projects and issues in bulk.

Prerequisites

Authentication

Local Environment

Run gh auth login to authenticate with GitHub CLI.

CI Environment

Set the GH_TOKEN environment variable with a GitHub Personal Access Token that has the necessary permissions (project and issue management).

Scripts

orca.nu

Creates a GitHub project and adds issues to it across multiple repositories.

Usage:

./orca.nu [--verbose] <yaml_file>

Options:

  • --verbose: Enable verbose output
  • yaml_file: Path to YAML configuration file

YAML Configuration Structure:

job:
  title: "Project Title"
  org: "organization-name"
repos:
  - "repo1"
  - "repo2"
issue:
  template: "path/to/issue-template.md"
  labels:
    - "label1"
    - "label2"

cleanup.nu

Deletes a GitHub project and cleans up associated issues and PRs.

Usage:

./cleanup.nu [--dryrun] <yaml_file>

Options:

  • --dryrun: Preview what would be deleted without actually deleting
  • yaml_file: Path to YAML configuration file

YAML Configuration Structure:

job:
  title: "Project Title"
  org: "organization-name"
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
0.8.1 125 6/16/2026
0.8.0 115 6/9/2026
0.7.5-beta6 93 6/9/2026
0.7.4-beta5 97 5/21/2026
0.7.3-beta4 109 5/19/2026
0.7.2-beta3 100 5/18/2026
0.7.1-beta2 113 5/18/2026
0.7.0-beta1 97 5/13/2026
0.6.0 116 5/7/2026
0.5.1 257 3/17/2026
0.5.0 131 3/16/2026
0.4.4 131 3/16/2026
0.4.3 124 3/16/2026
0.4.2 130 3/16/2026
0.4.1 123 3/15/2026
0.4.0 120 3/13/2026
0.3.0 124 3/11/2026

[BREAKING] Renamed package from `Orca.Tool` to `OrcAI.Tool` and CLI command from `orca` to `orcai`; [BREAKING] Renamed config directory from `~/.config/orca/` to `~/.config/orcai/`; [BREAKING] Renamed environment variables: `ORCA_PAT` → `ORCAI_PAT`, `ORCA_APP_ID` → `ORCAI_APP_ID`, `ORCA_APP_INSTALLATION_ID` → `ORCAI_APP_INSTALLATION_ID`, `ORCA_APP_KEY_PATH` → `ORCAI_APP_KEY_PATH`, `ORCA_APP_PRIVATE_KEY` → `ORCAI_APP_PRIVATE_KEY`