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