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 run_source;
62pub(crate) mod runs;
63mod sandbox;
64mod scan;
65mod serve;
66mod session;
67mod skill;
68mod skills;
69mod supervisor;
70mod test;
71mod test_bench;
72mod time;
73mod tool;
74mod trace;
75mod trigger;
76mod trust;
77mod try_cmd;
78mod upgrade;
79mod usage;
80mod util;
81mod verify;
82mod version;
83mod viz;
84mod watch;
85mod workflow;
86
87pub(crate) use app::{AppArgs, AppCommand};
88pub(crate) use bench::{BenchArgs, BenchCommand, BenchPortableArgs, BenchReplayArgs};
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, DumpHarnessMigrationsArgs,
118 DumpHighlightKeywordsArgs, DumpPortableBenchmarkSchemaArgs, DumpPromptGrammarArgs,
119 DumpProtocolArtifactsArgs, 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 portable::{
198 PortableArgs, PortableCommand, PortableCompileArgs, PortableEntryKindArg, PortablePackageArgs,
199 PortableResumeArgs, PortableStartArgs,
200};
201pub(crate) use portal::PortalArgs;
202pub use precompile::PrecompileArgs;
203pub(crate) use profile::ProfileArgs;
204pub(crate) use provider::ProviderToolProbeFormatArg;
205#[cfg(test)]
206pub(crate) use provider::ProviderToolProbeModeArg;
207pub(crate) use provider::{
208 refresh_provider_catalog_if_requested, ProviderArgs, ProviderCacheProbeArgs,
209 ProviderCapabilitiesArgs, ProviderCapabilitiesCommand, ProviderCapabilitiesPromoteFromEvalArgs,
210 ProviderCommand, ProviderDispatchAuditArgs, ProviderDispatchAuditVariantArg,
211 ProviderDispatchExplainArgs, ProviderLimitsArgs, ProviderProbeArgs, ProviderToolCalibrateArgs,
212 ProviderToolProbeArgs, ProviderToolProbeAuditArgs, ProviderToolProbeCaseArg,
213 ProviderToolScorecardArgs,
214};
215pub(crate) use providers::{
216 ProviderCatalogCommand, ProvidersExportArgs, ProvidersGenerateArgs, ProvidersMatrixArgs,
217 ProvidersOverlayAuditArgs, ProvidersRecommendArgs, ProvidersRefreshArgs, ProvidersSupportArgs,
218 ProvidersValidateArgs,
219};
220pub(crate) use quickstart::QuickstartArgs;
221pub(crate) use routes::RoutesArgs;
222pub(crate) use rule::{RuleArgs, RuleCommand, RuleTestArgs};
223pub(crate) use run::RunArgs;
224pub(crate) use run_source::resolve_run_path_or_exit;
225pub(crate) use runs::{
226 run_runs_command, ReplayArgs, RunsArgs, RunsExportTrainingArgs, RunsReportArgs, RunsReviewArgs,
227};
228pub(crate) use sandbox::SandboxArgs;
229pub(crate) use scan::ScanArgs;
230pub(crate) use serve::{
231 A2aServeArgs, AcpServeTransport, ApiServeArgs, McpServeSurface, McpServeTransport,
232 ServeAcpArgs, ServeArgs, ServeCommand, ServeMcpArgs, ServeObsMode, ServeTlsMode, SiteServeArgs,
233 WorkerServeArgs,
234};
235pub(crate) use session::{
236 SessionArgs, SessionCheckpointArgs, SessionCommand, SessionExportArgs, SessionImportArgs,
237 SessionListArgs, SessionSchemaArgs, SessionValidateArgs, SessionViewFixturesArgs,
238};
239pub(crate) use skill::{
240 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
241 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
242 SkillWhoSignedArgs,
243};
244pub(crate) use skills::{
245 SkillsDumpArgs, SkillsGetArgs, SkillsInspectArgs, SkillsInstallArgs, SkillsListArgs,
246 SkillsMatchArgs, SkillsNewArgs, SkillsResolvedArgs, SkillsValidateArgs,
247};
248pub(crate) use supervisor::{
249 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
250 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
251 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
252 SupervisorStartArgs, SupervisorStopArgs,
253};
254pub(crate) use test::{InternalConformanceWorkerMode, TestArgs};
255pub(crate) use test_bench::{
256 TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
257 TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
258};
259pub(crate) use time::{TimeArgs, TimeCommand, TimeRunArgs};
260pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
261pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
262pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
263pub(crate) use try_cmd::TryArgs;
264pub(crate) use upgrade::UpgradeArgs;
265pub(crate) use usage::{UsageArgs, UsageGroupBy};
266#[allow(unused_imports)]
269pub(crate) use trust::{
270 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
271 TrustVerifyChainArgs,
272};
273pub(crate) use verify::VerifyArgs;
274pub(crate) use version::VersionArgs;
275pub(crate) use viz::VizArgs;
276pub(crate) use watch::WatchArgs;
277pub(crate) use workflow::{
278 WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
279 WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
280 WorkflowPatchValidateArgs,
281};
282
283use clap::{Parser, Subcommand};
284
285#[derive(Debug, Parser)]
286#[command(
287 name = "harn",
288 about = "The agent harness language",
289 version,
290 disable_help_subcommand = false,
291 arg_required_else_help = true
292)]
293pub(crate) struct Cli {
294 #[arg(long = "json-schemas", global = false)]
298 pub json_schemas: bool,
299
300 #[arg(
303 long = "command",
304 requires = "json_schemas",
305 value_name = "COMMAND",
306 global = false
307 )]
308 pub schema_command: Option<String>,
309
310 #[command(subcommand)]
311 pub command: Option<Command>,
312}
313
314#[derive(Debug, Subcommand)]
315pub(crate) enum Command {
316 App(AppArgs),
318 Portable(PortableArgs),
320 #[command(long_about = "\
322Execute a .harn file or an inline expression.
323
324USAGE
325 harn run script.harn
326 harn run -e 'log(\"hello\")'
327 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
328
329CONCURRENCY
330 Harn supports first-class concurrency primitives:
331 - spawn { ... } — launch a task, return a handle
332 - parallel each LIST — concurrent map
333 - parallel settle LIST — concurrent map, collect Ok/Err
334 - parallel N — N-way fan-out
335 - with { max_concurrent: N } — cap in-flight workers
336 - channels, retry, select
337 https://harnlang.com/concurrency.html
338
339LLM THROTTLING
340 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
341 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
342 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
343
344SCRIPTING
345 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
346 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
347 Full docs: https://harnlang.com/
348")]
349 Run(RunArgs),
350 Check(CheckArgs),
352 Parse(ParseArgs),
354 Tokens(TokensArgs),
356 Config(ConfigArgs),
358 Explain(ExplainArgs),
363 Fix(FixArgs),
365 Contracts(ContractsArgs),
367 Lint(PathTargetsArgs),
369 Fmt(FmtArgs),
371 Guard(GuardArgs),
373 Test(TestArgs),
375 #[command(name = "test-bench")]
378 TestBench(TestBenchArgs),
379 Time(TimeArgs),
384 Init(InitArgs),
386 New(NewArgs),
388 Doctor(DoctorArgs),
393 Host(HostArgs),
395 Quickstart(QuickstartArgs),
397 Demo(DemoArgs),
400 Connect(Box<ConnectArgs>),
402 Connector(ConnectorArgs),
404 Serve(ServeArgs),
406 Mcp(McpArgs),
408 Dap(DapArgs),
415 Watch(WatchArgs),
417 Dev(DevArgs),
433 Portal(PortalArgs),
435 Trigger(TriggerArgs),
437 Routes(RoutesArgs),
439 Usage(UsageArgs),
445 Graph(GraphArgs),
447 Doc(DocArgs),
453 Flow(FlowArgs),
455 Canon(CanonArgs),
457 Workflow(WorkflowArgs),
459 Supervisor(SupervisorArgs),
461 Trace(TraceArgs),
463 Crystallize(CrystallizeArgs),
465 Trust(TrustArgs),
467 Verify(VerifyArgs),
469 Completion(CompletionArgs),
471 Orchestrator(OrchestratorArgs),
473 Playground(PlaygroundArgs),
475 Runs(RunsArgs),
477 Session(SessionArgs),
479 Replay(ReplayArgs),
481 Eval(EvalArgs),
483 Repl,
485 Bench(BenchArgs),
487 Precompile(PrecompileArgs),
497 Pack(PackArgs),
516 Viz(VizArgs),
518 Install(InstallArgs),
520 Add(AddArgs),
522 Update(UpdateArgs),
524 Remove(RemoveArgs),
526 Lock,
528 Package(PackageArgs),
530 Publish(PublishArgs),
532 Persona(PersonaArgs),
534 Pg(PgArgs),
536 #[command(name = "merge-captain")]
538 MergeCaptain(MergeCaptainArgs),
539 Models(ModelsArgs),
541 Local(LocalArgs),
544 Provider(ProviderArgs),
546 Scan(ScanArgs),
549 Codemod(CodemodArgs),
552 Rule(RuleArgs),
555 #[command(name = "try")]
558 Try(TryArgs),
559 Skill(SkillArgs),
563 Tool(ToolArgs),
565 Version(VersionArgs),
567 Upgrade(UpgradeArgs),
572 #[command(hide = true, name = "dump-highlight-keywords")]
578 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
579 #[command(hide = true, name = "dump-portable-benchmark-schema")]
582 DumpPortableBenchmarkSchema(DumpPortableBenchmarkSchemaArgs),
583 #[command(hide = true, name = "dump-prompt-grammar")]
590 DumpPromptGrammar(DumpPromptGrammarArgs),
591 #[command(hide = true, name = "dump-trigger-quickref")]
597 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
598 #[command(hide = true, name = "dump-connector-matrix")]
604 DumpConnectorMatrix(DumpConnectorMatrixArgs),
605 #[command(hide = true, name = "dump-protocol-artifacts")]
611 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
612 #[command(hide = true, name = "connector-schema-codegen")]
619 ConnectorSchemaCodegen(ConnectorSchemaCodegenArgs),
620 #[command(hide = true, name = "dump-harness-migrations")]
627 DumpHarnessMigrations(DumpHarnessMigrationsArgs),
628 #[command(hide = true, name = "conformance-helper")]
630 ConformanceHelper(ConformanceHelperArgs),
631}
632
633#[cfg(test)]
634mod tests;