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