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