Skip to main content

harn_cli/cli/
mod.rs

1//! Top-level clap definition for the `harn` CLI.
2//!
3//! Per-subcommand arg structs live in their own modules under
4//! `crates/harn-cli/src/cli/`. The `Cli` and `Command` enum here only
5//! reference types via `pub(crate) use ...` re-exports so external
6//! consumers can keep using `crate::cli::TypeName` unchanged.
7//!
8//! Some variants of subcommand enums are reached only by destructuring
9//! the parent (`SubCommand::Foo(args) => ...`) and are never referenced
10//! by name from outside this module. Those types stay private to their
11//! per-subcommand module and are accessed through their parent enum.
12
13mod bench;
14mod check;
15mod completions;
16mod config_cmd;
17mod connect;
18mod connector;
19mod contracts;
20mod crystallize;
21mod demo;
22mod dev;
23mod doctor;
24mod dump;
25mod eval;
26mod explain;
27mod fix;
28mod flow;
29mod graph;
30mod init;
31mod lint_fmt;
32mod local;
33mod mcp;
34mod merge_captain;
35mod models;
36mod orchestrator;
37mod pack;
38mod package;
39mod parse_tokens;
40mod persona;
41mod pg;
42mod playground;
43mod portal;
44mod precompile;
45mod profile;
46mod provider;
47mod providers;
48mod quickstart;
49mod routes;
50mod run;
51mod runs;
52mod serve;
53mod session;
54mod skill;
55mod skills;
56mod supervisor;
57mod test;
58mod test_bench;
59mod time;
60mod tool;
61mod trace;
62mod trigger;
63mod trust;
64mod try_cmd;
65mod upgrade;
66mod util;
67mod verify;
68mod version;
69mod viz;
70mod watch;
71mod workflow;
72
73pub(crate) use bench::{BenchArgs, BenchCommand, BenchReplayArgs};
74pub(crate) use check::{CheckArgs, CheckOutputFormat};
75pub(crate) use completions::{CompletionShell, CompletionsArgs};
76pub(crate) use config_cmd::{ConfigArgs, ConfigCommand, ConfigInspectArgs, ConfigValidateArgs};
77pub(crate) use connect::{
78    ConnectApiKeyArgs, ConnectArgs, ConnectCommand, ConnectGenericArgs, ConnectGithubArgs,
79    ConnectLinearArgs, ConnectOAuthArgs, ConnectSetupPlanArgs, ConnectStatusArgs,
80};
81pub(crate) use connector::{
82    ConnectorArgs, ConnectorCheckArgs, ConnectorCommand, ConnectorTestArgs,
83};
84pub(crate) use contracts::{
85    ContractsArgs, ContractsBundleArgs, ContractsCommand, ContractsHostCapabilitiesArgs,
86    ContractsOutputArgs,
87};
88pub(crate) use crystallize::{
89    CrystallizeArgs, CrystallizeCommand, CrystallizeIngestArgs, CrystallizeShadowArgs,
90    CrystallizeValidateArgs,
91};
92pub(crate) use demo::DemoArgs;
93pub(crate) use dev::DevArgs;
94pub(crate) use doctor::DoctorArgs;
95pub(crate) use dump::{
96    DumpConnectorMatrixArgs, DumpHighlightKeywordsArgs, DumpProtocolArtifactsArgs,
97    DumpTriggerQuickrefArgs,
98};
99pub use eval::{
100    EvalArgs, EvalCodingAgentArgs, EvalCommand, EvalContextArgs, EvalPromptArgs, EvalPromptMode,
101    EvalPromptOutput, EvalScopeTriageArgs, EvalToolCallsArgs, EvalToolCallsCommand,
102    EvalToolCallsRegressionArgs,
103};
104pub(crate) use explain::{CatalogFormat, ExplainArgs};
105pub(crate) use fix::{FixArgs, HarnessThreadingMode};
106pub(crate) use flow::{
107    FlowArchivistCommand, FlowArchivistScanArgs, FlowArgs, FlowCommand, FlowReplayAuditArgs,
108    FlowShipCommand, FlowShipWatchArgs,
109};
110pub(crate) use graph::GraphArgs;
111pub(crate) use init::{InitArgs, NewArgs, ProjectTemplate};
112pub(crate) use lint_fmt::{FmtArgs, PathTargetsArgs};
113pub(crate) use local::{
114    LocalArgs, LocalCommand, LocalListArgs, LocalProfileArgs, LocalStatusArgs, LocalStopArgs,
115    LocalSwitchArgs,
116};
117pub(crate) use mcp::{McpArgs, McpCommand, McpLoginArgs, McpServeArgs, McpServerRefArgs};
118pub(crate) use merge_captain::{
119    MergeCaptainArgs, MergeCaptainAuditArgs, MergeCaptainAuditFormat, MergeCaptainBackendKind,
120    MergeCaptainCommand, MergeCaptainIterateArgs, MergeCaptainIterateFormat,
121    MergeCaptainLadderArgs, MergeCaptainLadderFormat, MergeCaptainMockCleanupArgs,
122    MergeCaptainMockCommand, MergeCaptainMockInitArgs, MergeCaptainMockServeArgs,
123    MergeCaptainMockStatusArgs, MergeCaptainMockStepArgs, MergeCaptainRunArgs,
124};
125pub(crate) use models::{
126    ModelRecommendArgs, ModelsArgs, ModelsCommand, ModelsInstallArgs, ModelsListArgs,
127    ModelsTestArgs,
128};
129pub(crate) use orchestrator::{
130    OrchestratorArgs, OrchestratorCommand, OrchestratorDeployArgs, OrchestratorDeployProvider,
131    OrchestratorDlqArgs, OrchestratorFireArgs, OrchestratorInspectArgs, OrchestratorLocalArgs,
132    OrchestratorLogFormat, OrchestratorQueueArgs, OrchestratorQueueCommand,
133    OrchestratorQueueDrainArgs, OrchestratorQueueLsArgs, OrchestratorQueuePurgeArgs,
134    OrchestratorRecoverArgs, OrchestratorReloadArgs, OrchestratorReplayArgs,
135    OrchestratorReplayOracleArgs, OrchestratorResumeArgs, OrchestratorServeArgs,
136    OrchestratorStatsArgs, OrchestratorTenantArgs, OrchestratorTenantCommand,
137    OrchestratorTenantCreateArgs, OrchestratorTenantDeleteArgs, OrchestratorTenantLsArgs,
138    OrchestratorTenantSuspendArgs,
139};
140pub use pack::{PackArgs, PackCommand, PackVerifyArgs};
141pub(crate) use package::{
142    AddArgs, InstallArgs, PackageArgs, PackageArtifactsCommand, PackageCacheCommand,
143    PackageCommand, PackageScaffoldCommand, PackageScaffoldOpenapiArgs, PublishArgs, RemoveArgs,
144    UpdateArgs,
145};
146pub(crate) use parse_tokens::{ParseArgs, TokensArgs};
147pub(crate) use persona::{
148    PersonaArgs, PersonaCheckArgs, PersonaCommand, PersonaControlArgs, PersonaDoctorArgs,
149    PersonaInspectArgs, PersonaListArgs, PersonaNewArgs, PersonaSpendArgs, PersonaStatusArgs,
150    PersonaSupervisionCommand, PersonaSupervisionTailArgs, PersonaTemplateKind, PersonaTickArgs,
151    PersonaTriggerArgs,
152};
153pub(crate) use pg::{PgArgs, PgCodegenArgs, PgCommand};
154pub(crate) use playground::PlaygroundArgs;
155pub(crate) use portal::PortalArgs;
156pub use precompile::PrecompileArgs;
157pub(crate) use profile::ProfileArgs;
158pub(crate) use provider::{
159    ModelInfoArgs, ProviderArgs, ProviderCapabilitiesCommand,
160    ProviderCapabilitiesPromoteFromEvalArgs, ProviderCatalogArgs, ProviderCommand,
161    ProviderProbeArgs, ProviderReadyArgs, ProviderToolProbeArgs, ProviderToolProbeModeArg,
162};
163pub(crate) use providers::{
164    ProvidersArgs, ProvidersCommand, ProvidersExportArgs, ProvidersMatrixArgs,
165    ProvidersRecommendArgs, ProvidersRefreshArgs, ProvidersSupportArgs, ProvidersValidateArgs,
166};
167pub(crate) use quickstart::QuickstartArgs;
168pub(crate) use routes::RoutesArgs;
169pub(crate) use run::RunArgs;
170pub(crate) use runs::{ReplayArgs, RunsArgs, RunsCommand};
171pub(crate) use serve::{
172    A2aServeArgs, ApiServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand,
173    ServeMcpArgs, ServeObsMode, ServeTlsMode,
174};
175pub(crate) use session::{
176    SessionArgs, SessionCommand, SessionExportArgs, SessionImportArgs, SessionSchemaArgs,
177    SessionValidateArgs,
178};
179pub(crate) use skill::{
180    SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
181    SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
182    SkillWhoSignedArgs,
183};
184pub(crate) use skills::{
185    SkillsArgs, SkillsCommand, SkillsDumpArgs, SkillsGetArgs, SkillsInspectArgs, SkillsInstallArgs,
186    SkillsListArgs, SkillsMatchArgs, SkillsNewArgs, SkillsResolvedArgs,
187};
188pub(crate) use supervisor::{
189    SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
190    SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
191    SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
192    SupervisorStartArgs, SupervisorStopArgs,
193};
194pub(crate) use test::TestArgs;
195pub(crate) use test_bench::{
196    TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
197    TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
198};
199pub(crate) use time::{TimeArgs, TimeCommand, TimeRunArgs};
200pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
201pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
202pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
203pub(crate) use try_cmd::TryArgs;
204pub(crate) use upgrade::UpgradeArgs;
205// `TrustOutcomeArg` / `TrustTierArg` are referenced from the cli
206// parser tests only; they're matched via destructuring elsewhere.
207#[allow(unused_imports)]
208pub(crate) use trust::{
209    TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
210    TrustVerifyChainArgs,
211};
212pub(crate) use verify::VerifyArgs;
213pub(crate) use version::VersionArgs;
214pub(crate) use viz::VizArgs;
215pub(crate) use watch::WatchArgs;
216pub(crate) use workflow::{
217    WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
218    WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
219    WorkflowPatchValidateArgs,
220};
221
222use clap::{Parser, Subcommand};
223
224#[derive(Debug, Parser)]
225#[command(
226    name = "harn",
227    about = "The agent harness language",
228    version,
229    disable_help_subcommand = false,
230    arg_required_else_help = true
231)]
232pub(crate) struct Cli {
233    /// Emit the JSON-schema catalog for every `harn` subcommand that
234    /// exposes a structured `--json` envelope. Pair with
235    /// `--command <name>` to print just one entry.
236    #[arg(long = "json-schemas", global = false)]
237    pub json_schemas: bool,
238
239    /// When combined with `--json-schemas`, restrict the catalog to a
240    /// single command name (e.g. `--command run`).
241    #[arg(
242        long = "command",
243        requires = "json_schemas",
244        value_name = "COMMAND",
245        global = false
246    )]
247    pub schema_command: Option<String>,
248
249    #[command(subcommand)]
250    pub command: Option<Command>,
251}
252
253#[derive(Debug, Subcommand)]
254pub(crate) enum Command {
255    /// Execute a .harn file or an inline expression.
256    #[command(long_about = "\
257Execute a .harn file or an inline expression.
258
259USAGE
260    harn run script.harn
261    harn run -e 'log(\"hello\")'
262    harn run script.harn -- arg1 arg2   (script reads `argv` as list<string>)
263
264CONCURRENCY
265    Harn supports first-class concurrency primitives:
266      - spawn { ... }         — launch a task, return a handle
267      - parallel each LIST    — concurrent map
268      - parallel settle LIST  — concurrent map, collect Ok/Err
269      - parallel N            — N-way fan-out
270      - with { max_concurrent: N }  — cap in-flight workers
271      - channels, retry, select
272    https://harnlang.com/concurrency.html
273
274LLM THROTTLING
275    Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
276    or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
277    (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
278
279SCRIPTING
280    LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
281    Human cheatsheet:       https://harnlang.com/scripting-cheatsheet.html
282    Full docs:              https://harnlang.com/
283")]
284    Run(RunArgs),
285    /// Type-check .harn files or directories without executing them.
286    Check(CheckArgs),
287    /// Parse a .harn file and print its AST.
288    Parse(ParseArgs),
289    /// Tokenize a .harn file and print lexer tokens.
290    Tokens(TokensArgs),
291    /// Inspect, validate, and emit schemas for layered Harn runtime config.
292    Config(ConfigArgs),
293    /// Explain a diagnostic. Pass a stable `HARN-<CAT>-<NNN>` code
294    /// (optionally with `--json` for the structured envelope), or the
295    /// legacy `--invariant <NAME> <FUNCTION> <FILE>` form to walk the
296    /// control-flow path behind a Harn invariant violation.
297    Explain(ExplainArgs),
298    /// Plan or apply repair-bearing diagnostics under an explicit safety ceiling.
299    Fix(FixArgs),
300    /// Export machine-readable Harn contracts and bundle manifests.
301    Contracts(ContractsArgs),
302    /// Lint .harn files or directories for common issues.
303    Lint(PathTargetsArgs),
304    /// Format .harn files or directories.
305    Fmt(FmtArgs),
306    /// Run user tests or the conformance suite.
307    Test(TestArgs),
308    /// Run a .harn script under a hermetic testbench (paused clock,
309    /// optional LLM/process tapes, fs overlay, deny-by-default network).
310    #[command(name = "test-bench")]
311    TestBench(TestBenchArgs),
312    /// Instrument a wrapped subcommand with phase-level wall-clock
313    /// timing (parse, typecheck, bytecode compile + cache hit/miss,
314    /// run setup, run main) plus per-LLM-call and per-tool-call
315    /// latency. Pair with `--json` for an agent-readable envelope.
316    Time(TimeArgs),
317    /// Scaffold a new project with harn.toml.
318    Init(InitArgs),
319    /// Scaffold a new project, package, or connector from a starter template.
320    New(NewArgs),
321    /// Diagnose the local Harn environment: toolchain version, configured
322    /// LLM providers and credentials, MCP server reachability, file
323    /// permissions on `~/.harn`, and project manifest health. Reports
324    /// each check as ok/warn/fail with a suggested fix.
325    Doctor(DoctorArgs),
326    /// Configure a starter Harn project and LLM provider settings.
327    Quickstart(QuickstartArgs),
328    /// Run a bundled offline demo scenario to see Harn in action without
329    /// API keys. `harn demo` lists scenarios; `harn demo <id>` runs one.
330    Demo(DemoArgs),
331    /// Register outbound connector resources with a provider.
332    Connect(Box<ConnectArgs>),
333    /// Validate pure-Harn connector packages against the connector contract.
334    Connector(ConnectorArgs),
335    /// Serve a Harn workflow over a transport adapter.
336    Serve(ServeArgs),
337    /// Manage remote MCP OAuth credentials and status.
338    Mcp(McpArgs),
339    /// Watch a .harn file and re-run it on changes.
340    Watch(WatchArgs),
341    /// Watch a Harn project and re-typecheck only the modules whose
342    /// public interface fingerprint actually changed.
343    ///
344    /// USAGE
345    ///     harn dev --watch [<root>]
346    ///     harn dev --watch --json
347    ///     harn dev --watch --with-tests
348    ///
349    /// On each file change, the changed module's interface fingerprint
350    /// (BLAKE3 of types + signatures + `pub import` re-exports) is
351    /// recomputed. If it matches the previous fingerprint, only that
352    /// module is re-checked. If it changed, every transitive importer
353    /// is invalidated and re-checked. `--with-tests` extends the loop
354    /// to also re-run `test_*` / `@test`-attributed pipelines in
355    /// every invalidated module.
356    Dev(DevArgs),
357    /// Launch the local Harn observability portal.
358    Portal(PortalArgs),
359    /// Replay and inspect historical trigger dispatches from the event log.
360    Trigger(TriggerArgs),
361    /// Statically enumerate declared trigger routes and their requirements.
362    Routes(RoutesArgs),
363    /// Statically enumerate modules, symbols, imports, capabilities, effects, and host calls.
364    Graph(GraphArgs),
365    /// Inspect Harn Flow atom, slice, and predicate audit state.
366    Flow(FlowArgs),
367    /// Validate, preview, and run portable workflow bundles.
368    Workflow(WorkflowArgs),
369    /// Control local durable workflow automations for trusted hosts.
370    Supervisor(SupervisorArgs),
371    /// Import third-party eval traces into replayable Harn fixtures.
372    Trace(TraceArgs),
373    /// Mine repeated traces into a reviewable deterministic Harn workflow candidate.
374    Crystallize(CrystallizeArgs),
375    /// Query and manage trust-graph autonomy state.
376    Trust(TrustArgs),
377    /// Alias for `harn trust`. Query and verify trust-graph autonomy state.
378    #[command(name = "trust-graph")]
379    TrustGraph(TrustArgs),
380    /// Verify a signed Harn provenance receipt.
381    Verify(VerifyArgs),
382    /// Print shell completion script to stdout.
383    Completions(CompletionsArgs),
384    /// Start the orchestrator process that hosts triggers and connector dispatch.
385    Orchestrator(OrchestratorArgs),
386    /// Run a pipeline against a Harn-native host module for fast iteration.
387    Playground(PlaygroundArgs),
388    /// Inspect persisted workflow run records.
389    Runs(RunsArgs),
390    /// Export, import, and validate portable Harn session bundles.
391    Session(SessionArgs),
392    /// Replay a persisted workflow run record.
393    Replay(ReplayArgs),
394    /// Evaluate a run record, run directory, or eval manifest.
395    Eval(EvalArgs),
396    /// Start the interactive REPL.
397    Repl,
398    /// Benchmark a .harn pipeline over repeated runs.
399    Bench(BenchArgs),
400    /// Pre-compile `.harn` sources into the content-addressed bytecode
401    /// cache so cold-start `harn run` for the same source skips parse
402    /// and compile and goes straight to bytecode load.
403    ///
404    /// `harn precompile path/` walks the directory and compiles every
405    /// `.harn` file; `harn precompile script.harn` compiles a single
406    /// file. Artifacts are written adjacent to each source as
407    /// `<name>.harnbc` by default; pass `--out DIR` to redirect them
408    /// into a sibling tree.
409    Precompile(PrecompileArgs),
410    /// Build or verify a `.harnpack` content-addressed run bundle.
411    ///
412    /// `harn pack <entrypoint>` walks the entrypoint's transitive imports,
413    /// precompiles every module, snapshots the provider catalog and
414    /// stdlib pin, generates a minimal SBOM, and emits a deterministic
415    /// tar.zst container under `<entrypoint>.harnpack` (or `--out`).
416    ///
417    /// `harn pack verify <bundle.harnpack>` reads a bundle back, recomputes
418    /// its canonical hash, verifies the embedded Ed25519 signature (if any),
419    /// and cross-checks every per-module BLAKE3 against the manifest.
420    /// Exits non-zero on any mismatch.
421    ///
422    /// `--upgrade <old.harnpack>` reads an existing bundle (v1 or v2) and
423    /// re-emits it under the v2 manifest, preserving the prior bundle's
424    /// workflow graph, triggers, and prompt capsules. `--exclude-secrets`
425    /// refuses to bundle paths that look like secrets (`.env`, `*.pem`,
426    /// `credentials*`, anything under `secrets/`).
427    Pack(PackArgs),
428    /// Render a .harn file as a Mermaid workflow graph.
429    Viz(VizArgs),
430    /// Install dependencies declared in harn.toml.
431    Install(InstallArgs),
432    /// Add a dependency to harn.toml.
433    Add(AddArgs),
434    /// Refresh one or more dependency lock entries.
435    Update(UpdateArgs),
436    /// Remove a dependency from harn.toml and harn.lock.
437    Remove(RemoveArgs),
438    /// Resolve dependencies and write harn.lock without materializing packages.
439    Lock,
440    /// Manage Harn package caches and integrity verification.
441    Package(PackageArgs),
442    /// Publish a package by tagging the source repo and opening a package-index PR.
443    Publish(PublishArgs),
444    /// List and inspect durable agent persona manifests.
445    Persona(PersonaArgs),
446    /// Postgres developer tooling (codegen Harn record types from migrations).
447    Pg(PgArgs),
448    /// Merge Captain transcript oracle and audit (#1013).
449    #[command(name = "merge-captain")]
450    MergeCaptain(MergeCaptainArgs),
451    /// Print resolved metadata for a model alias or model id as JSON.
452    ModelInfo(ModelInfoArgs),
453    /// List, install, recommend, and test configured LLM models.
454    Models(ModelsArgs),
455    /// Manage local LLM runtime lifecycle: enumerate, switch, and stop
456    /// Ollama, llama.cpp, MLX, and other OpenAI-compatible local servers.
457    Local(LocalArgs),
458    /// Validate and generate provider/model catalog artifacts.
459    Providers(ProvidersArgs),
460    /// Inspect provider/model capabilities.
461    Provider(ProviderArgs),
462    /// Print the provider/model catalog Harn loaded as JSON.
463    ProviderCatalog(ProviderCatalogArgs),
464    /// Probe a provider's /models endpoint and optionally verify a served model.
465    ProviderReady(ProviderReadyArgs),
466    /// Snapshot a provider: readiness, served models, loaded models with
467    /// memory/context details. Designed for eval pipelines that need a
468    /// stable telemetry envelope per provider.
469    ProviderProbe(ProviderProbeArgs),
470    /// Run one-tool provider conformance and classify native/text fallback.
471    ProviderToolProbe(ProviderToolProbeArgs),
472    /// One-shot agent_loop with a prompt. Routes through the configured
473    /// provider (or `HARN_LLM_PROVIDER=mock` for offline use).
474    #[command(name = "try")]
475    Try(TryArgs),
476    /// Manage and inspect Harn skills (list/get/dump for the embedded
477    /// corpus; resolved/inspect/match/install/new for FS-resolved skills).
478    Skills(SkillsArgs),
479    /// Manage skill provenance: keys, signatures, verification, and trust policy.
480    Skill(SkillArgs),
481    /// Scaffold and inspect Harn-native custom tools.
482    Tool(ToolArgs),
483    /// Print the decorated version banner.
484    Version(VersionArgs),
485    /// Download and atomically replace the running `harn` binary with
486    /// the latest published GitHub release (or a specific tag via
487    /// `--version`). Verifies the archive against the release's
488    /// `SHA256SUMS` manifest before installing.
489    Upgrade(UpgradeArgs),
490    /// Regenerate docs/theme/harn-keywords.js from the live lexer + stdlib sets.
491    ///
492    /// Dev-only. Hidden from `--help` — invoke via
493    /// `cargo run -p harn-cli -- dump-highlight-keywords` or the
494    /// `make gen-highlight` target.
495    #[command(hide = true, name = "dump-highlight-keywords")]
496    DumpHighlightKeywords(DumpHighlightKeywordsArgs),
497    /// Regenerate docs/llm/harn-triggers-quickref.md from the live trigger provider catalog.
498    ///
499    /// Dev-only. Hidden from `--help` — invoke via
500    /// `cargo run -p harn-cli -- dump-trigger-quickref` or the
501    /// `make gen-trigger-quickref` target.
502    #[command(hide = true, name = "dump-trigger-quickref")]
503    DumpTriggerQuickref(DumpTriggerQuickrefArgs),
504    /// Regenerate docs/src/connectors/parity-matrix.md from connector package manifests.
505    ///
506    /// Dev-only. Hidden from `--help` — invoke via
507    /// `cargo run -p harn-cli -- dump-connector-matrix` or the
508    /// `make gen-connector-matrix` target.
509    #[command(hide = true, name = "dump-connector-matrix")]
510    DumpConnectorMatrix(DumpConnectorMatrixArgs),
511    /// Regenerate Harn protocol schemas and TypeScript/Swift bindings.
512    ///
513    /// Dev-only. Hidden from `--help` — invoke via
514    /// `cargo run -p harn-cli -- dump-protocol-artifacts` or the
515    /// `make gen-protocol-artifacts` target.
516    #[command(hide = true, name = "dump-protocol-artifacts")]
517    DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
518}
519
520#[cfg(test)]
521mod tests;