1mod bench;
14mod check;
15mod completions;
16mod config_cmd;
17mod connect;
18mod connector;
19mod contracts;
20mod crystallize;
21mod demo;
22mod dev;
23mod doctor;
24mod dump;
25mod eval;
26mod explain;
27mod fix;
28mod flow;
29mod init;
30mod lint_fmt;
31mod local;
32mod mcp;
33mod merge_captain;
34mod models;
35mod orchestrator;
36mod pack;
37mod package;
38mod persona;
39mod playground;
40mod portal;
41mod precompile;
42mod profile;
43mod provider;
44mod providers;
45mod quickstart;
46mod routes;
47mod run;
48mod runs;
49mod serve;
50mod session;
51mod skill;
52mod skills;
53mod supervisor;
54mod test;
55mod test_bench;
56mod time;
57mod tool;
58mod trace;
59mod trigger;
60mod trust;
61mod try_cmd;
62mod upgrade;
63mod util;
64mod verify;
65mod viz;
66mod watch;
67mod workflow;
68
69pub(crate) use bench::{BenchArgs, BenchCommand, BenchReplayArgs};
70pub(crate) use check::{CheckArgs, CheckOutputFormat};
71pub(crate) use completions::{CompletionShell, CompletionsArgs};
72pub(crate) use config_cmd::{ConfigArgs, ConfigCommand, ConfigInspectArgs, ConfigValidateArgs};
73pub(crate) use connect::{
74 ConnectApiKeyArgs, ConnectArgs, ConnectCommand, ConnectGenericArgs, ConnectGithubArgs,
75 ConnectLinearArgs, ConnectOAuthArgs, ConnectSetupPlanArgs, ConnectStatusArgs,
76};
77pub(crate) use connector::{
78 ConnectorArgs, ConnectorCheckArgs, ConnectorCommand, ConnectorTestArgs,
79};
80pub(crate) use contracts::{
81 ContractsArgs, ContractsBundleArgs, ContractsCommand, ContractsHostCapabilitiesArgs,
82 ContractsOutputArgs,
83};
84pub(crate) use crystallize::{
85 CrystallizeArgs, CrystallizeCommand, CrystallizeIngestArgs, CrystallizeShadowArgs,
86 CrystallizeValidateArgs,
87};
88pub(crate) use demo::DemoArgs;
89pub(crate) use dev::DevArgs;
90pub(crate) use doctor::DoctorArgs;
91pub(crate) use dump::{
92 DumpConnectorMatrixArgs, DumpHighlightKeywordsArgs, DumpProtocolArtifactsArgs,
93 DumpTriggerQuickrefArgs,
94};
95pub use eval::{
96 EvalArgs, EvalCommand, EvalPromptArgs, EvalPromptMode, EvalPromptOutput, EvalToolCallsArgs,
97 EvalToolCallsCommand, EvalToolCallsRegressionArgs,
98};
99pub(crate) use explain::ExplainArgs;
100pub(crate) use fix::FixArgs;
101pub(crate) use flow::{
102 FlowArchivistCommand, FlowArchivistScanArgs, FlowArgs, FlowCommand, FlowReplayAuditArgs,
103 FlowShipCommand, FlowShipWatchArgs,
104};
105pub(crate) use init::{InitArgs, NewArgs, ProjectTemplate};
106pub(crate) use lint_fmt::{FmtArgs, PathTargetsArgs};
107pub(crate) use local::{
108 LocalArgs, LocalCommand, LocalListArgs, LocalProfileArgs, LocalStatusArgs, LocalStopArgs,
109 LocalSwitchArgs,
110};
111pub(crate) use mcp::{McpArgs, McpCommand, McpLoginArgs, McpServeArgs, McpServerRefArgs};
112pub(crate) use merge_captain::{
113 MergeCaptainArgs, MergeCaptainAuditArgs, MergeCaptainAuditFormat, MergeCaptainBackendKind,
114 MergeCaptainCommand, MergeCaptainIterateArgs, MergeCaptainIterateFormat,
115 MergeCaptainLadderArgs, MergeCaptainLadderFormat, MergeCaptainMockCleanupArgs,
116 MergeCaptainMockCommand, MergeCaptainMockInitArgs, MergeCaptainMockServeArgs,
117 MergeCaptainMockStatusArgs, MergeCaptainMockStepArgs, MergeCaptainRunArgs,
118};
119pub(crate) use models::{
120 ModelRecommendArgs, ModelsArgs, ModelsCommand, ModelsInstallArgs, ModelsListArgs,
121 ModelsTestArgs,
122};
123pub(crate) use orchestrator::{
124 OrchestratorArgs, OrchestratorCommand, OrchestratorDeployArgs, OrchestratorDeployProvider,
125 OrchestratorDlqArgs, OrchestratorFireArgs, OrchestratorInspectArgs, OrchestratorLocalArgs,
126 OrchestratorLogFormat, OrchestratorQueueArgs, OrchestratorQueueCommand,
127 OrchestratorQueueDrainArgs, OrchestratorQueueLsArgs, OrchestratorQueuePurgeArgs,
128 OrchestratorRecoverArgs, OrchestratorReloadArgs, OrchestratorReplayArgs,
129 OrchestratorReplayOracleArgs, OrchestratorResumeArgs, OrchestratorServeArgs,
130 OrchestratorStatsArgs, OrchestratorTenantArgs, OrchestratorTenantCommand,
131 OrchestratorTenantCreateArgs, OrchestratorTenantDeleteArgs, OrchestratorTenantLsArgs,
132 OrchestratorTenantSuspendArgs,
133};
134pub use pack::PackArgs;
135pub(crate) use package::{
136 AddArgs, InstallArgs, PackageArgs, PackageArtifactsCommand, PackageCacheCommand,
137 PackageCommand, PublishArgs, RemoveArgs, UpdateArgs,
138};
139pub(crate) use persona::{
140 PersonaArgs, PersonaCheckArgs, PersonaCommand, PersonaControlArgs, PersonaDoctorArgs,
141 PersonaInspectArgs, PersonaListArgs, PersonaNewArgs, PersonaSpendArgs, PersonaStatusArgs,
142 PersonaSupervisionCommand, PersonaSupervisionTailArgs, PersonaTemplateKind, PersonaTickArgs,
143 PersonaTriggerArgs,
144};
145pub(crate) use playground::PlaygroundArgs;
146pub(crate) use portal::PortalArgs;
147pub use precompile::PrecompileArgs;
148pub(crate) use profile::ProfileArgs;
149pub(crate) use provider::{
150 ModelInfoArgs, ProviderCatalogArgs, ProviderProbeArgs, ProviderReadyArgs,
151 ProviderToolProbeArgs, ProviderToolProbeModeArg,
152};
153pub(crate) use providers::{
154 ProvidersArgs, ProvidersCommand, ProvidersExportArgs, ProvidersRefreshArgs,
155 ProvidersValidateArgs,
156};
157pub(crate) use quickstart::QuickstartArgs;
158pub(crate) use routes::RoutesArgs;
159pub(crate) use run::RunArgs;
160pub(crate) use runs::{ReplayArgs, RunsArgs, RunsCommand};
161pub(crate) use serve::{
162 A2aServeArgs, ApiServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand,
163 ServeMcpArgs, ServeTlsMode,
164};
165pub(crate) use session::{
166 SessionArgs, SessionCommand, SessionExportArgs, SessionImportArgs, SessionSchemaArgs,
167 SessionValidateArgs,
168};
169pub(crate) use skill::{
170 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
171 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
172 SkillWhoSignedArgs,
173};
174pub(crate) use skills::{
175 SkillsArgs, SkillsCommand, SkillsDumpArgs, SkillsGetArgs, SkillsInspectArgs, SkillsInstallArgs,
176 SkillsListArgs, SkillsMatchArgs, SkillsNewArgs, SkillsResolvedArgs,
177};
178pub(crate) use supervisor::{
179 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
180 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
181 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
182 SupervisorStartArgs, SupervisorStopArgs,
183};
184pub(crate) use test::TestArgs;
185pub(crate) use test_bench::{
186 TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
187 TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
188};
189pub(crate) use time::{TimeArgs, TimeCommand, TimeRunArgs};
190pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
191pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
192pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
193pub(crate) use try_cmd::TryArgs;
194pub(crate) use upgrade::UpgradeArgs;
195#[allow(unused_imports)]
198pub(crate) use trust::{
199 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
200 TrustVerifyChainArgs,
201};
202pub(crate) use verify::VerifyArgs;
203pub(crate) use viz::VizArgs;
204pub(crate) use watch::WatchArgs;
205pub(crate) use workflow::{
206 WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
207 WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
208 WorkflowPatchValidateArgs,
209};
210
211use clap::{Parser, Subcommand};
212
213#[derive(Debug, Parser)]
214#[command(
215 name = "harn",
216 about = "The agent harness language",
217 version,
218 disable_help_subcommand = false,
219 arg_required_else_help = true
220)]
221pub(crate) struct Cli {
222 #[arg(long = "json-schemas", global = false)]
226 pub json_schemas: bool,
227
228 #[arg(
231 long = "command",
232 requires = "json_schemas",
233 value_name = "COMMAND",
234 global = false
235 )]
236 pub schema_command: Option<String>,
237
238 #[command(subcommand)]
239 pub command: Option<Command>,
240}
241
242#[derive(Debug, Subcommand)]
243pub(crate) enum Command {
244 #[command(long_about = "\
246Execute a .harn file or an inline expression.
247
248USAGE
249 harn run script.harn
250 harn run -e 'println(\"hello\")'
251 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
252
253CONCURRENCY
254 Harn supports first-class concurrency primitives:
255 - spawn { ... } — launch a task, return a handle
256 - parallel each LIST — concurrent map
257 - parallel settle LIST — concurrent map, collect Ok/Err
258 - parallel N — N-way fan-out
259 - with { max_concurrent: N } — cap in-flight workers
260 - channels, retry, select
261 https://harnlang.com/concurrency.html
262
263LLM THROTTLING
264 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
265 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
266 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
267
268SCRIPTING
269 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
270 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
271 Full docs: https://harnlang.com/
272")]
273 Run(RunArgs),
274 Check(CheckArgs),
276 Config(ConfigArgs),
278 Explain(ExplainArgs),
283 Fix(FixArgs),
285 Contracts(ContractsArgs),
287 Lint(PathTargetsArgs),
289 Fmt(FmtArgs),
291 Test(TestArgs),
293 #[command(name = "test-bench")]
296 TestBench(TestBenchArgs),
297 Time(TimeArgs),
302 Init(InitArgs),
304 New(NewArgs),
306 Doctor(DoctorArgs),
311 Quickstart(QuickstartArgs),
313 Demo(DemoArgs),
316 Connect(Box<ConnectArgs>),
318 Connector(ConnectorArgs),
320 Serve(ServeArgs),
322 Mcp(McpArgs),
324 Watch(WatchArgs),
326 Dev(DevArgs),
342 Portal(PortalArgs),
344 Trigger(TriggerArgs),
346 Routes(RoutesArgs),
348 Flow(FlowArgs),
350 Workflow(WorkflowArgs),
352 Supervisor(SupervisorArgs),
354 Trace(TraceArgs),
356 Crystallize(CrystallizeArgs),
358 Trust(TrustArgs),
360 #[command(name = "trust-graph")]
362 TrustGraph(TrustArgs),
363 Verify(VerifyArgs),
365 Completions(CompletionsArgs),
367 Orchestrator(OrchestratorArgs),
369 Playground(PlaygroundArgs),
371 Runs(RunsArgs),
373 Session(SessionArgs),
375 Replay(ReplayArgs),
377 Eval(EvalArgs),
379 Repl,
381 Bench(BenchArgs),
383 Precompile(PrecompileArgs),
393 Pack(PackArgs),
407 Viz(VizArgs),
409 Install(InstallArgs),
411 Add(AddArgs),
413 Update(UpdateArgs),
415 Remove(RemoveArgs),
417 Lock,
419 Package(PackageArgs),
421 Publish(PublishArgs),
427 Persona(PersonaArgs),
429 #[command(name = "merge-captain")]
431 MergeCaptain(MergeCaptainArgs),
432 ModelInfo(ModelInfoArgs),
434 Models(ModelsArgs),
436 Local(LocalArgs),
439 Providers(ProvidersArgs),
441 ProviderCatalog(ProviderCatalogArgs),
443 ProviderReady(ProviderReadyArgs),
445 ProviderProbe(ProviderProbeArgs),
449 ProviderToolProbe(ProviderToolProbeArgs),
451 #[command(name = "try")]
454 Try(TryArgs),
455 Skills(SkillsArgs),
458 Skill(SkillArgs),
460 Tool(ToolArgs),
462 Version,
464 Upgrade(UpgradeArgs),
469 #[command(hide = true, name = "dump-highlight-keywords")]
475 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
476 #[command(hide = true, name = "dump-trigger-quickref")]
482 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
483 #[command(hide = true, name = "dump-connector-matrix")]
489 DumpConnectorMatrix(DumpConnectorMatrixArgs),
490 #[command(hide = true, name = "dump-protocol-artifacts")]
496 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
497}
498
499#[cfg(test)]
500mod tests;