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