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