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::{ModelInfoArgs, ProviderCatalogArgs, ProviderReadyArgs};
131pub(crate) use providers::{
132 ProvidersArgs, ProvidersCommand, ProvidersExportArgs, ProvidersRefreshArgs,
133 ProvidersValidateArgs,
134};
135pub(crate) use quickstart::QuickstartArgs;
136pub(crate) use run::RunArgs;
137pub(crate) use runs::{EvalArgs, ReplayArgs, RunsArgs, RunsCommand};
138pub(crate) use serve::{
139 A2aServeArgs, ApiServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand,
140 ServeMcpArgs, ServeTlsMode,
141};
142pub(crate) use session::{
143 SessionArgs, SessionCommand, SessionExportArgs, SessionImportArgs, SessionSchemaArgs,
144 SessionValidateArgs,
145};
146pub(crate) use skill::{
147 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
148 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
149 SkillWhoSignedArgs,
150};
151pub(crate) use skills::{
152 SkillsArgs, SkillsCommand, SkillsInspectArgs, SkillsInstallArgs, SkillsListArgs,
153 SkillsMatchArgs, SkillsNewArgs,
154};
155pub(crate) use supervisor::{
156 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
157 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
158 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
159 SupervisorStartArgs, SupervisorStopArgs,
160};
161pub(crate) use test::TestArgs;
162pub(crate) use test_bench::{
163 TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
164 TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
165};
166pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
167pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
168pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
169pub(crate) use try_cmd::TryArgs;
170#[allow(unused_imports)]
173pub(crate) use trust::{
174 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
175 TrustVerifyChainArgs,
176};
177pub(crate) use verify::VerifyArgs;
178pub(crate) use viz::VizArgs;
179pub(crate) use watch::WatchArgs;
180pub(crate) use workflow::{
181 WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
182 WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
183 WorkflowPatchValidateArgs,
184};
185
186use clap::{Parser, Subcommand};
187
188#[derive(Debug, Parser)]
189#[command(
190 name = "harn",
191 about = "The agent harness language",
192 version,
193 disable_help_subcommand = false,
194 arg_required_else_help = true
195)]
196pub(crate) struct Cli {
197 #[command(subcommand)]
198 pub command: Option<Command>,
199}
200
201#[derive(Debug, Subcommand)]
202pub(crate) enum Command {
203 #[command(long_about = "\
205Execute a .harn file or an inline expression.
206
207USAGE
208 harn run script.harn
209 harn run -e 'println(\"hello\")'
210 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
211
212CONCURRENCY
213 Harn supports first-class concurrency primitives:
214 - spawn { ... } — launch a task, return a handle
215 - parallel each LIST — concurrent map
216 - parallel settle LIST — concurrent map, collect Ok/Err
217 - parallel N — N-way fan-out
218 - with { max_concurrent: N } — cap in-flight workers
219 - channels, retry, select
220 https://harnlang.com/concurrency.html
221
222LLM THROTTLING
223 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
224 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
225 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
226
227SCRIPTING
228 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
229 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
230 Full docs: https://harnlang.com/
231")]
232 Run(RunArgs),
233 Check(CheckArgs),
235 Config(ConfigArgs),
237 Explain(ExplainArgs),
241 Contracts(ContractsArgs),
243 Lint(PathTargetsArgs),
245 Fmt(FmtArgs),
247 Test(TestArgs),
249 #[command(name = "test-bench")]
252 TestBench(TestBenchArgs),
253 Init(InitArgs),
255 New(NewArgs),
257 Doctor(DoctorArgs),
262 Quickstart(QuickstartArgs),
264 Connect(Box<ConnectArgs>),
266 Connector(ConnectorArgs),
268 Serve(ServeArgs),
270 Mcp(McpArgs),
272 Watch(WatchArgs),
274 Portal(PortalArgs),
276 Trigger(TriggerArgs),
278 Flow(FlowArgs),
280 Workflow(WorkflowArgs),
282 Supervisor(SupervisorArgs),
284 Trace(TraceArgs),
286 Crystallize(CrystallizeArgs),
288 Trust(TrustArgs),
290 #[command(name = "trust-graph")]
292 TrustGraph(TrustArgs),
293 Verify(VerifyArgs),
295 Completions(CompletionsArgs),
297 Orchestrator(OrchestratorArgs),
299 Playground(PlaygroundArgs),
301 Runs(RunsArgs),
303 Session(SessionArgs),
305 Replay(ReplayArgs),
307 Eval(EvalArgs),
309 Repl,
311 Bench(BenchArgs),
313 Viz(VizArgs),
315 Install(InstallArgs),
317 Add(AddArgs),
319 Update(UpdateArgs),
321 Remove(RemoveArgs),
323 Lock,
325 Package(PackageArgs),
327 Publish(PublishArgs),
333 Persona(PersonaArgs),
335 #[command(name = "merge-captain")]
337 MergeCaptain(MergeCaptainArgs),
338 ModelInfo(ModelInfoArgs),
340 Models(ModelsArgs),
342 Local(LocalArgs),
345 Providers(ProvidersArgs),
347 ProviderCatalog(ProviderCatalogArgs),
349 ProviderReady(ProviderReadyArgs),
351 #[command(name = "try")]
354 Try(TryArgs),
355 Skills(SkillsArgs),
357 Skill(SkillArgs),
359 Tool(ToolArgs),
361 Version,
363 #[command(hide = true, name = "dump-highlight-keywords")]
369 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
370 #[command(hide = true, name = "dump-trigger-quickref")]
376 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
377 #[command(hide = true, name = "dump-connector-matrix")]
383 DumpConnectorMatrix(DumpConnectorMatrixArgs),
384 #[command(hide = true, name = "dump-protocol-artifacts")]
390 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
391}
392
393#[cfg(test)]
394mod tests;