1mod app;
14mod bench;
15mod canon;
16mod check;
17mod codemod;
18mod completion;
19mod config_cmd;
20mod conformance_helper;
21mod connect;
22mod connector;
23mod contracts;
24mod crystallize;
25mod dap;
26mod demo;
27mod dev;
28mod doc;
29mod doctor;
30mod dump;
31mod eval;
32mod explain;
33mod fix;
34mod flow;
35mod graph;
36mod guard;
37mod host;
38mod init;
39mod lint_fmt;
40mod local;
41mod mcp;
42mod merge_captain;
43mod models;
44mod orchestrator;
45mod pack;
46mod package;
47mod parse_tokens;
48mod persona;
49mod pg;
50mod playground;
51mod portable;
52mod portal;
53mod precompile;
54mod profile;
55mod provider;
56mod providers;
57mod quickstart;
58mod routes;
59mod rule;
60mod run;
61pub(crate) mod run_source;
62pub(crate) mod runs;
63mod sandbox;
64mod scan;
65mod serve;
66mod session;
67mod skill;
68mod skills;
69mod supervisor;
70mod test;
71mod test_bench;
72mod time;
73mod tool;
74mod trace;
75mod trigger;
76mod trust;
77mod try_cmd;
78mod upgrade;
79mod usage;
80mod util;
81mod verify;
82mod version;
83mod viz;
84mod watch;
85mod workflow;
86
87pub(crate) use app::{AppArgs, AppCommand};
88pub(crate) use bench::{BenchArgs, BenchCommand, BenchPortableArgs, BenchReplayArgs};
89pub(crate) use canon::{CanonArgs, CanonCheckArgs, CanonCommand};
90pub(crate) use check::{CheckArgs, CheckOutputFormat};
91pub(crate) use codemod::CodemodArgs;
92pub(crate) use completion::{CompletionArgs, CompletionShell};
93pub(crate) use config_cmd::{ConfigArgs, ConfigCommand, ConfigInspectArgs, ConfigValidateArgs};
94pub(crate) use conformance_helper::{
95 ConformanceHelperArgs, ConformanceHelperBridgeMockHostArgs, ConformanceHelperCommand,
96 ConformanceHelperHttpProxyArgs,
97};
98pub(crate) use connect::{
99 ConnectApiKeyArgs, ConnectArgs, ConnectCommand, ConnectGenericArgs, ConnectGithubArgs,
100 ConnectLinearArgs, ConnectOAuthArgs, ConnectSetupPlanArgs, ConnectStatusArgs,
101};
102pub(crate) use connector::{ConnectorArgs, ConnectorCheckArgs, ConnectorCommand};
103pub(crate) use contracts::{
104 ContractsArgs, ContractsBundleArgs, ContractsCommand, ContractsHostCapabilitiesArgs,
105 ContractsOutputArgs,
106};
107pub(crate) use crystallize::{
108 CrystallizeArgs, CrystallizeCommand, CrystallizeIngestArgs, CrystallizeShadowArgs,
109 CrystallizeValidateArgs,
110};
111pub(crate) use dap::DapArgs;
112pub(crate) use demo::DemoArgs;
113pub(crate) use dev::DevArgs;
114pub(crate) use doc::DocArgs;
115pub(crate) use doctor::DoctorArgs;
116pub(crate) use dump::{
117 ConnectorSchemaCodegenArgs, DumpConnectorMatrixArgs, DumpHarnessMigrationsArgs,
118 DumpHighlightKeywordsArgs, DumpPortableBenchmarkSchemaArgs, DumpPromptGrammarArgs,
119 DumpProtocolArtifactsArgs, DumpTriggerQuickrefArgs,
120};
121pub use eval::{
122 EvalArgs, EvalCodingAgentArgs, EvalCommand, EvalContextArgs, EvalPromptArgs, EvalPromptMode,
123 EvalPromptOutput, EvalScopeTriageArgs, EvalSkillGateArgs, EvalToolCallsArgs,
124 EvalToolCallsCommand, EvalToolCallsRegressionArgs,
125};
126pub(crate) use explain::{CatalogFormat, ExplainArgs};
127pub(crate) use fix::FixArgs;
128pub(crate) use flow::{
129 FlowArchivistCommand, FlowArchivistScanArgs, FlowArgs, FlowCommand, FlowReplayAuditArgs,
130 FlowShipCommand, FlowShipWatchArgs,
131};
132pub(crate) use graph::GraphArgs;
133pub(crate) use guard::{
134 GuardArgs, GuardCommand, GuardInstallArgs, GuardListArgs, GuardRemoveArgs, GuardStatusArgs,
135};
136pub(crate) use host::{
137 HostArgs, HostCommand, HostLeaseAcquireArgs, HostLeaseArgs, HostLeaseCommand,
138 HostLeasePriorityArg, HostLeaseReleaseArgs, HostLeaseRenewArgs, HostLeaseResourceClassArg,
139 HostLeaseRunArgs, HostLeaseRunCargoArgs, HostLeaseRunCargoWorkerArgs, HostLeaseRunCommand,
140 HostLeaseStatusArgs,
141};
142pub(crate) use init::{InitArgs, NewArgs, ProjectTemplate};
143pub(crate) use lint_fmt::{FmtArgs, PathTargetsArgs};
144pub(crate) use local::{
145 LocalArgs, LocalCommand, LocalLaunchArgs, LocalListArgs, LocalProfileArgs, LocalStatusArgs,
146 LocalStopArgs, LocalSwitchArgs,
147};
148pub(crate) use mcp::{
149 McpArgs, McpCallArgs, McpCommand, McpDiscoverArgs, McpLoginArgs, McpMockCommand,
150 McpMockEvalArgs, McpMockRecordArgs, McpMockReplayArgs, McpMockVerifyArgs, McpMockWorldArgs,
151 McpPresetsArgs, McpServeArgs, McpServerRefArgs,
152};
153pub(crate) use merge_captain::{
154 MergeCaptainArgs, MergeCaptainAuditArgs, MergeCaptainAuditFormat, MergeCaptainBackendKind,
155 MergeCaptainCommand, MergeCaptainIterateArgs, MergeCaptainIterateFormat,
156 MergeCaptainLadderArgs, MergeCaptainLadderFormat, MergeCaptainMockCleanupArgs,
157 MergeCaptainMockCommand, MergeCaptainMockInitArgs, MergeCaptainMockServeArgs,
158 MergeCaptainMockStatusArgs, MergeCaptainMockStepArgs, MergeCaptainRunArgs,
159};
160pub(crate) use models::{
161 ModelInfoArgs, ModelRecommendArgs, ModelsArgs, ModelsBatchArgs, ModelsBatchCancelArgs,
162 ModelsBatchCommand, ModelsBatchDownloadArgs, ModelsBatchExecuteArgs, ModelsBatchExecuteCommand,
163 ModelsBatchExecuteInitArgs, ModelsBatchManifestArgs, ModelsBatchPlanArgs,
164 ModelsBatchPrepareArgs, ModelsBatchRejoinArgs, ModelsBatchStatusArgs, ModelsBatchSubmitArgs,
165 ModelsCommand, ModelsInstallArgs, ModelsListArgs, ModelsListSort, ModelsLoraArgs,
166 ModelsLoraBehaviorStrataPolicy, ModelsLoraCommand, ModelsLoraExportArgs, ModelsLoraInspectArgs,
167 ModelsLoraManifestArgs, ModelsLoraPlanArgs, ModelsLoraPreflightArgs, ModelsLoraPromoteArgs,
168 ModelsLoraTrainArgs, ModelsTestArgs,
169};
170pub(crate) use orchestrator::{
171 OrchestratorArgs, OrchestratorCommand, OrchestratorDeployArgs, OrchestratorDeployProvider,
172 OrchestratorDlqArgs, OrchestratorFireArgs, OrchestratorInspectArgs, OrchestratorLocalArgs,
173 OrchestratorLogFormat, OrchestratorQueueArgs, OrchestratorQueueCommand,
174 OrchestratorQueueDrainArgs, OrchestratorQueueLsArgs, OrchestratorQueuePurgeArgs,
175 OrchestratorRecoverArgs, OrchestratorReloadArgs, OrchestratorReplayArgs,
176 OrchestratorReplayOracleArgs, OrchestratorResumeArgs, OrchestratorServeArgs,
177 OrchestratorStatsArgs, OrchestratorTenantArgs, OrchestratorTenantCommand,
178 OrchestratorTenantCreateArgs, OrchestratorTenantDeleteArgs, OrchestratorTenantLsArgs,
179 OrchestratorTenantSuspendArgs,
180};
181pub use pack::{PackArgs, PackCommand, PackRepackArgs, PackUnpackArgs, PackVerifyArgs};
182pub(crate) use package::{
183 AddArgs, InstallArgs, PackageArgs, PackageArtifactsCommand, PackageCacheCommand,
184 PackageCommand, PackageRegistryCommand, PackageScaffoldCommand, PackageScaffoldOpenapiArgs,
185 PackageSearchArgs, PackageVerifyArgs, PublishArgs, RemoveArgs, UpdateArgs,
186};
187pub(crate) use parse_tokens::{ParseArgs, TokensArgs};
188pub(crate) use persona::{
189 PersonaActivateArgs, PersonaActivationsArgs, PersonaArgs, PersonaCheckArgs, PersonaCommand,
190 PersonaCompilePromptArgs, PersonaControlArgs, PersonaDeactivateArgs, PersonaDoctorArgs,
191 PersonaInspectArgs, PersonaListArgs, PersonaMaterializeArgs, PersonaNewArgs, PersonaSpendArgs,
192 PersonaStatusArgs, PersonaSupervisionCommand, PersonaSupervisionTailArgs, PersonaTemplateKind,
193 PersonaTickArgs, PersonaTriggerArgs,
194};
195pub(crate) use pg::{PgArgs, PgCodegenArgs, PgCommand};
196pub(crate) use playground::PlaygroundArgs;
197pub(crate) use portable::{
198 PortableArgs, PortableCommand, PortableCompileArgs, PortableEntryKindArg, PortablePackageArgs,
199 PortableResumeArgs, PortableStartArgs,
200};
201pub(crate) use portal::PortalArgs;
202pub use precompile::PrecompileArgs;
203pub(crate) use profile::ProfileArgs;
204pub(crate) use provider::ProviderToolProbeFormatArg;
205#[cfg(test)]
206pub(crate) use provider::ProviderToolProbeModeArg;
207pub(crate) use provider::{
208 refresh_provider_catalog_if_requested, ProviderArgs, ProviderCacheProbeArgs,
209 ProviderCapabilitiesArgs, ProviderCapabilitiesCommand, ProviderCapabilitiesPromoteFromEvalArgs,
210 ProviderCommand, ProviderDispatchAuditArgs, ProviderDispatchAuditVariantArg,
211 ProviderDispatchExplainArgs, ProviderLimitsArgs, ProviderProbeArgs, ProviderToolCalibrateArgs,
212 ProviderToolProbeArgs, ProviderToolProbeAuditArgs, ProviderToolProbeCaseArg,
213 ProviderToolScorecardArgs,
214};
215pub(crate) use providers::{
216 ProviderCatalogCommand, ProvidersExportArgs, ProvidersGenerateArgs, ProvidersMatrixArgs,
217 ProvidersOverlayAuditArgs, ProvidersRecommendArgs, ProvidersRefreshArgs, ProvidersSupportArgs,
218 ProvidersValidateArgs,
219};
220pub(crate) use quickstart::QuickstartArgs;
221pub(crate) use routes::RoutesArgs;
222pub(crate) use rule::{RuleArgs, RuleCommand, RuleTestArgs};
223pub(crate) use run::RunArgs;
224pub(crate) use run_source::resolve_run_path_or_exit;
225pub(crate) use runs::{
226 run_runs_command, ReplayArgs, RunsArgs, RunsExportTrainingArgs, RunsReportArgs, RunsReviewArgs,
227};
228pub(crate) use sandbox::SandboxArgs;
229pub(crate) use scan::ScanArgs;
230pub(crate) use serve::{
231 A2aServeArgs, AcpServeTransport, ApiServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs,
232 ServeCommand, ServeMcpArgs, ServeObsMode, ServeTlsMode, SiteServeArgs, WorkerServeArgs,
233};
234pub(crate) use session::{
235 SessionArgs, SessionCheckpointArgs, SessionCommand, SessionExportArgs, SessionImportArgs,
236 SessionListArgs, SessionSchemaArgs, SessionValidateArgs,
237};
238pub(crate) use skill::{
239 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
240 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
241 SkillWhoSignedArgs,
242};
243pub(crate) use skills::{
244 SkillsDumpArgs, SkillsGetArgs, SkillsInspectArgs, SkillsInstallArgs, SkillsListArgs,
245 SkillsMatchArgs, SkillsNewArgs, SkillsResolvedArgs, SkillsValidateArgs,
246};
247pub(crate) use supervisor::{
248 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
249 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
250 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
251 SupervisorStartArgs, SupervisorStopArgs,
252};
253pub(crate) use test::{InternalConformanceWorkerMode, TestArgs};
254pub(crate) use test_bench::{
255 TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
256 TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
257};
258pub(crate) use time::{TimeArgs, TimeCommand, TimeRunArgs};
259pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
260pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
261pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
262pub(crate) use try_cmd::TryArgs;
263pub(crate) use upgrade::UpgradeArgs;
264pub(crate) use usage::{UsageArgs, UsageGroupBy};
265#[allow(unused_imports)]
268pub(crate) use trust::{
269 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
270 TrustVerifyChainArgs,
271};
272pub(crate) use verify::VerifyArgs;
273pub(crate) use version::VersionArgs;
274pub(crate) use viz::VizArgs;
275pub(crate) use watch::WatchArgs;
276pub(crate) use workflow::{
277 WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
278 WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
279 WorkflowPatchValidateArgs,
280};
281
282use clap::{Parser, Subcommand};
283
284#[derive(Debug, Parser)]
285#[command(
286 name = "harn",
287 about = "The agent harness language",
288 version,
289 disable_help_subcommand = false,
290 arg_required_else_help = true
291)]
292pub(crate) struct Cli {
293 #[arg(long = "json-schemas", global = false)]
297 pub json_schemas: bool,
298
299 #[arg(
302 long = "command",
303 requires = "json_schemas",
304 value_name = "COMMAND",
305 global = false
306 )]
307 pub schema_command: Option<String>,
308
309 #[command(subcommand)]
310 pub command: Option<Command>,
311}
312
313#[derive(Debug, Subcommand)]
314pub(crate) enum Command {
315 App(AppArgs),
317 Portable(PortableArgs),
319 #[command(long_about = "\
321Execute a .harn file or an inline expression.
322
323USAGE
324 harn run script.harn
325 harn run -e 'log(\"hello\")'
326 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
327
328CONCURRENCY
329 Harn supports first-class concurrency primitives:
330 - spawn { ... } — launch a task, return a handle
331 - parallel each LIST — concurrent map
332 - parallel settle LIST — concurrent map, collect Ok/Err
333 - parallel N — N-way fan-out
334 - with { max_concurrent: N } — cap in-flight workers
335 - channels, retry, select
336 https://harnlang.com/concurrency.html
337
338LLM THROTTLING
339 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
340 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
341 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
342
343SCRIPTING
344 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
345 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
346 Full docs: https://harnlang.com/
347")]
348 Run(RunArgs),
349 Check(CheckArgs),
351 Parse(ParseArgs),
353 Tokens(TokensArgs),
355 Config(ConfigArgs),
357 Explain(ExplainArgs),
362 Fix(FixArgs),
364 Contracts(ContractsArgs),
366 Lint(PathTargetsArgs),
368 Fmt(FmtArgs),
370 Guard(GuardArgs),
372 Test(TestArgs),
374 #[command(name = "test-bench")]
377 TestBench(TestBenchArgs),
378 Time(TimeArgs),
383 Init(InitArgs),
385 New(NewArgs),
387 Doctor(DoctorArgs),
392 Host(HostArgs),
394 Quickstart(QuickstartArgs),
396 Demo(DemoArgs),
399 Connect(Box<ConnectArgs>),
401 Connector(ConnectorArgs),
403 Serve(ServeArgs),
405 Mcp(McpArgs),
407 Dap(DapArgs),
414 Watch(WatchArgs),
416 Dev(DevArgs),
432 Portal(PortalArgs),
434 Trigger(TriggerArgs),
436 Routes(RoutesArgs),
438 Usage(UsageArgs),
444 Graph(GraphArgs),
446 Doc(DocArgs),
452 Flow(FlowArgs),
454 Canon(CanonArgs),
456 Workflow(WorkflowArgs),
458 Supervisor(SupervisorArgs),
460 Trace(TraceArgs),
462 Crystallize(CrystallizeArgs),
464 Trust(TrustArgs),
466 Verify(VerifyArgs),
468 Completion(CompletionArgs),
470 Orchestrator(OrchestratorArgs),
472 Playground(PlaygroundArgs),
474 Runs(RunsArgs),
476 Session(SessionArgs),
478 Replay(ReplayArgs),
480 Eval(EvalArgs),
482 Repl,
484 Bench(BenchArgs),
486 Precompile(PrecompileArgs),
496 Pack(PackArgs),
515 Viz(VizArgs),
517 Install(InstallArgs),
519 Add(AddArgs),
521 Update(UpdateArgs),
523 Remove(RemoveArgs),
525 Lock,
527 Package(PackageArgs),
529 Publish(PublishArgs),
531 Persona(PersonaArgs),
533 Pg(PgArgs),
535 #[command(name = "merge-captain")]
537 MergeCaptain(MergeCaptainArgs),
538 Models(ModelsArgs),
540 Local(LocalArgs),
543 Provider(ProviderArgs),
545 Scan(ScanArgs),
548 Codemod(CodemodArgs),
551 Rule(RuleArgs),
554 #[command(name = "try")]
557 Try(TryArgs),
558 Skill(SkillArgs),
562 Tool(ToolArgs),
564 Version(VersionArgs),
566 Upgrade(UpgradeArgs),
571 #[command(hide = true, name = "dump-highlight-keywords")]
577 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
578 #[command(hide = true, name = "dump-portable-benchmark-schema")]
581 DumpPortableBenchmarkSchema(DumpPortableBenchmarkSchemaArgs),
582 #[command(hide = true, name = "dump-prompt-grammar")]
589 DumpPromptGrammar(DumpPromptGrammarArgs),
590 #[command(hide = true, name = "dump-trigger-quickref")]
596 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
597 #[command(hide = true, name = "dump-connector-matrix")]
603 DumpConnectorMatrix(DumpConnectorMatrixArgs),
604 #[command(hide = true, name = "dump-protocol-artifacts")]
610 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
611 #[command(hide = true, name = "connector-schema-codegen")]
618 ConnectorSchemaCodegen(ConnectorSchemaCodegenArgs),
619 #[command(hide = true, name = "dump-harness-migrations")]
626 DumpHarnessMigrations(DumpHarnessMigrationsArgs),
627 #[command(hide = true, name = "conformance-helper")]
629 ConformanceHelper(ConformanceHelperArgs),
630}
631
632#[cfg(test)]
633mod tests;