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