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