Scaffold and extend Flyology projects.

flyology_cli installs the flyology aggregate command. Use it to create an Alire crate, add shared project guidance, prepare a documentation website, or dispatch a separately installed extension command.

CLI 01

Install the aggregate command.

The crate is currently available from the Flyology source repository. Build and install it with Alire from the crate directory.

install from the source checkout
git clone https://github.com/flyology-ada/flyology.git
cd flyology/flyology_cli
alr install
flyology --version

Alire installs flyology into its configured binary prefix. Add that prefix to PATH if the shell cannot find the command.

CLI 02

Initialize the current directory or a destination.

Run flyology init without a destination to use the current directory. The CLI derives a default crate name from that directory. It prompts for an omitted crate kind and name.

interactive initialization in the current directory
mkdir telemetry_service
cd telemetry_service
flyology init

Pass a destination, name, and crate kind with --yes for non-interactive initialization. The command uses the documented profile, agent, and website defaults. It also approves Flyology index installation.

non-interactive consumer application
flyology init telemetry_service \
  --name telemetry_service \
  --bin --yes
CLI 03

Choose the crate shape and project profile.

The crate shape controls the generated Ada source and GPR project. Consumer metadata is the default. Use --flyology-project only for a crate maintained as part of Flyology. Both profiles add flyology = "^0.1.0" to alire.toml.

--bin
Creates an executable project, a main procedure, and an Alire executable entry.
--lib
Creates a static library project and a root package specification.
No profile flag
Creates downstream consumer metadata. Website generation defaults to disabled.
--flyology-project
Adds Flyology website metadata and tags. It does not enable website generation.

With --yes, omitted choices create a binary consumer. Agent guidance remains enabled, and website generation remains disabled for either profile.

CLI 04

Provision shared agent guidance.

Agent guidance is enabled by default. The CLI creates an apm.yml dependency on the flyology-ada/agents Ada-library profile. Website projects also receive the Flyology website profile.

The CLI then runs apm install and apm compile --target codex in the new project. Install APM 0.28.0, or pass --no-agents to skip this setup.

library with shared guidance
flyology init wire_protocol \
  --lib --flyology-project --yes

Use --no-agents when the repository manages agent resources another way.

CLI 05

Add website-kit and generation scripts.

Use --website to add flyology-ada/website-kit at vendor/website-kit. The CLI initializes a Git repository first when the destination does not have one.

The generated files include a starter page, GNATdoc theme metadata, an API documentation script, and a complete site build script.

build and validate the generated site
alr install gnatdoc_bin
./scripts/build-site.sh
CLI 06

Review the generated project boundary.

The CLI writes only the selected project surface. Generated build directories remain ignored.

binary consumer with agents and no website
telemetry_service/
├── .gitignore
├── AGENTS.md              # generated by APM
├── README.md
├── alire.toml
├── apm.lock.yaml          # generated by APM
├── apm.yml
├── telemetry_service.gpr
└── src/
    └── telemetry_service.adb

The GPR project uses the repository's 110-column Ada format settings. It also excludes Flyology from downstream GNATdoc analysis to avoid documenting the runtime dependency as part of the consumer API.

CLI 07

Extend the aggregate command through PATH.

When a command is not built in, the CLI searches PATH for flyology-<command>. It passes every remaining argument without shell parsing and returns the extension command's exit status.

extension command contract
flyology deploy staging --wait

# Equivalent executable invocation:
flyology-deploy staging --wait

This contract lets another crate install a focused command without changing flyology_cli. If no matching executable exists, the CLI reports an unknown command and returns failure.

CLI 08

Resolve collisions before initialization.

The CLI checks each file that it writes directly before writing project files. It refuses to overwrite an existing manifest, GPR project, source file, README, ignore file, APM manifest, website tree, or site script.

APM and Git manage AGENTS.md, apm.lock.yaml, and .gitmodules. Review existing integration files before enabling those tools.

An external command can fail after project files are written. For example, APM installation or Git submodule setup can fail because the network is unavailable. The CLI keeps those files for inspection and reports the command that failed; it does not delete the destination automatically.

review all command options
flyology init --help