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