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, ModelsListSort, ModelsLoraArgs, ModelsLoraCommand,
161 ModelsLoraExportArgs, ModelsLoraInspectArgs, ModelsLoraManifestArgs, ModelsLoraPlanArgs,
162 ModelsLoraPreflightArgs, 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;
194pub(crate) use provider::ProviderToolProbeFormatArg;
195#[cfg(test)]
196pub(crate) use provider::ProviderToolProbeModeArg;
197pub(crate) use provider::{
198 refresh_provider_catalog_if_requested, ProviderArgs, ProviderCacheProbeArgs,
199 ProviderCapabilitiesArgs, ProviderCapabilitiesCommand, ProviderCapabilitiesPromoteFromEvalArgs,
200 ProviderCommand, ProviderDispatchAuditArgs, ProviderDispatchAuditVariantArg,
201 ProviderDispatchExplainArgs, ProviderLimitsArgs, ProviderProbeArgs, ProviderToolCalibrateArgs,
202 ProviderToolProbeArgs, ProviderToolProbeAuditArgs, ProviderToolProbeCaseArg,
203 ProviderToolScorecardArgs,
204};
205pub(crate) use providers::{
206 ProviderCatalogCommand, ProvidersExportArgs, ProvidersGenerateArgs, ProvidersMatrixArgs,
207 ProvidersRecommendArgs, ProvidersRefreshArgs, ProvidersSupportArgs, ProvidersValidateArgs,
208};
209pub(crate) use quickstart::QuickstartArgs;
210pub(crate) use routes::RoutesArgs;
211pub(crate) use rule::{RuleArgs, RuleCommand, RuleTestArgs};
212pub(crate) use run::RunArgs;
213pub(crate) use runs::{print_view as print_runs_view, ReplayArgs, RunsArgs, RunsCommand};
214pub(crate) use scan::ScanArgs;
215pub(crate) use serve::{
216 A2aServeArgs, AcpServeTransport, ApiServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs,
217 ServeCommand, ServeMcpArgs, ServeObsMode, ServeTlsMode, SiteServeArgs, WorkerServeArgs,
218};
219pub(crate) use session::{
220 SessionArgs, SessionCheckpointArgs, SessionCommand, SessionExportArgs, SessionImportArgs,
221 SessionSchemaArgs, SessionValidateArgs,
222};
223pub(crate) use skill::{
224 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
225 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
226 SkillWhoSignedArgs,
227};
228pub(crate) use skills::{
229 SkillsDumpArgs, SkillsGetArgs, SkillsInspectArgs, SkillsInstallArgs, SkillsListArgs,
230 SkillsMatchArgs, SkillsNewArgs, SkillsResolvedArgs,
231};
232pub(crate) use supervisor::{
233 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
234 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
235 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
236 SupervisorStartArgs, SupervisorStopArgs,
237};
238pub(crate) use test::TestArgs;
239pub(crate) use test_bench::{
240 TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
241 TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
242};
243pub(crate) use time::{TimeArgs, TimeCommand, TimeRunArgs};
244pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
245pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
246pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
247pub(crate) use try_cmd::TryArgs;
248pub(crate) use upgrade::UpgradeArgs;
249pub(crate) use usage::{UsageArgs, UsageGroupBy};
250#[allow(unused_imports)]
253pub(crate) use trust::{
254 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
255 TrustVerifyChainArgs,
256};
257pub(crate) use verify::VerifyArgs;
258pub(crate) use version::VersionArgs;
259pub(crate) use viz::VizArgs;
260pub(crate) use watch::WatchArgs;
261pub(crate) use workflow::{
262 WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
263 WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
264 WorkflowPatchValidateArgs,
265};
266
267use clap::{Parser, Subcommand};
268
269#[derive(Debug, Parser)]
270#[command(
271 name = "harn",
272 about = "The agent harness language",
273 version,
274 disable_help_subcommand = false,
275 arg_required_else_help = true
276)]
277pub(crate) struct Cli {
278 #[arg(long = "json-schemas", global = false)]
282 pub json_schemas: bool,
283
284 #[arg(
287 long = "command",
288 requires = "json_schemas",
289 value_name = "COMMAND",
290 global = false
291 )]
292 pub schema_command: Option<String>,
293
294 #[command(subcommand)]
295 pub command: Option<Command>,
296}
297
298#[derive(Debug, Subcommand)]
299pub(crate) enum Command {
300 #[command(long_about = "\
302Execute a .harn file or an inline expression.
303
304USAGE
305 harn run script.harn
306 harn run -e 'log(\"hello\")'
307 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
308
309CONCURRENCY
310 Harn supports first-class concurrency primitives:
311 - spawn { ... } — launch a task, return a handle
312 - parallel each LIST — concurrent map
313 - parallel settle LIST — concurrent map, collect Ok/Err
314 - parallel N — N-way fan-out
315 - with { max_concurrent: N } — cap in-flight workers
316 - channels, retry, select
317 https://harnlang.com/concurrency.html
318
319LLM THROTTLING
320 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
321 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
322 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
323
324SCRIPTING
325 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
326 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
327 Full docs: https://harnlang.com/
328")]
329 Run(RunArgs),
330 Check(CheckArgs),
332 Parse(ParseArgs),
334 Tokens(TokensArgs),
336 Config(ConfigArgs),
338 Explain(ExplainArgs),
343 Fix(FixArgs),
345 Contracts(ContractsArgs),
347 Lint(PathTargetsArgs),
349 Fmt(FmtArgs),
351 Guard(GuardArgs),
353 Test(TestArgs),
355 #[command(name = "test-bench")]
358 TestBench(TestBenchArgs),
359 Time(TimeArgs),
364 Init(InitArgs),
366 New(NewArgs),
368 Doctor(DoctorArgs),
373 Host(HostArgs),
375 Quickstart(QuickstartArgs),
377 Demo(DemoArgs),
380 Connect(Box<ConnectArgs>),
382 Connector(ConnectorArgs),
384 Serve(ServeArgs),
386 Mcp(McpArgs),
388 Dap(DapArgs),
395 Watch(WatchArgs),
397 Dev(DevArgs),
413 Portal(PortalArgs),
415 Trigger(TriggerArgs),
417 Routes(RoutesArgs),
419 Usage(UsageArgs),
425 Graph(GraphArgs),
427 Doc(DocArgs),
433 Flow(FlowArgs),
435 Canon(CanonArgs),
437 Workflow(WorkflowArgs),
439 Supervisor(SupervisorArgs),
441 Trace(TraceArgs),
443 Crystallize(CrystallizeArgs),
445 Trust(TrustArgs),
447 Verify(VerifyArgs),
449 Completion(CompletionArgs),
451 Orchestrator(OrchestratorArgs),
453 Playground(PlaygroundArgs),
455 Runs(RunsArgs),
457 Session(SessionArgs),
459 Replay(ReplayArgs),
461 Eval(EvalArgs),
463 Repl,
465 Bench(BenchArgs),
467 Precompile(PrecompileArgs),
477 Pack(PackArgs),
495 Viz(VizArgs),
497 Install(InstallArgs),
499 Add(AddArgs),
501 Update(UpdateArgs),
503 Remove(RemoveArgs),
505 Lock,
507 Package(PackageArgs),
509 Publish(PublishArgs),
511 Persona(PersonaArgs),
513 Pg(PgArgs),
515 #[command(name = "merge-captain")]
517 MergeCaptain(MergeCaptainArgs),
518 Models(ModelsArgs),
520 Local(LocalArgs),
523 Provider(ProviderArgs),
525 Scan(ScanArgs),
528 Codemod(CodemodArgs),
531 Rule(RuleArgs),
534 #[command(name = "try")]
537 Try(TryArgs),
538 Skill(SkillArgs),
542 Tool(ToolArgs),
544 Version(VersionArgs),
546 Upgrade(UpgradeArgs),
551 #[command(hide = true, name = "dump-highlight-keywords")]
557 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
558 #[command(hide = true, name = "dump-trigger-quickref")]
564 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
565 #[command(hide = true, name = "dump-connector-matrix")]
571 DumpConnectorMatrix(DumpConnectorMatrixArgs),
572 #[command(hide = true, name = "dump-protocol-artifacts")]
578 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
579 #[command(hide = true, name = "connector-schema-codegen")]
586 ConnectorSchemaCodegen(ConnectorSchemaCodegenArgs),
587 #[command(hide = true, name = "conformance-helper")]
589 ConformanceHelper(ConformanceHelperArgs),
590}
591
592#[cfg(test)]
593mod tests;