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