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, LocalProfileArgs, LocalStatusArgs, LocalStopArgs,
93 LocalSwitchArgs,
94};
95pub(crate) use mcp::{McpArgs, McpCommand, McpLoginArgs, McpServeArgs, McpServerRefArgs};
96pub(crate) use merge_captain::{
97 MergeCaptainArgs, MergeCaptainAuditArgs, MergeCaptainAuditFormat, MergeCaptainBackendKind,
98 MergeCaptainCommand, MergeCaptainIterateArgs, MergeCaptainIterateFormat,
99 MergeCaptainLadderArgs, MergeCaptainLadderFormat, MergeCaptainMockCleanupArgs,
100 MergeCaptainMockCommand, MergeCaptainMockInitArgs, MergeCaptainMockServeArgs,
101 MergeCaptainMockStatusArgs, MergeCaptainMockStepArgs, MergeCaptainRunArgs,
102};
103pub(crate) use models::{
104 ModelRecommendArgs, ModelsArgs, ModelsCommand, ModelsInstallArgs, ModelsListArgs,
105 ModelsTestArgs,
106};
107pub(crate) use orchestrator::{
108 OrchestratorArgs, OrchestratorCommand, OrchestratorDeployArgs, OrchestratorDeployProvider,
109 OrchestratorDlqArgs, OrchestratorFireArgs, OrchestratorInspectArgs, OrchestratorLocalArgs,
110 OrchestratorLogFormat, OrchestratorQueueArgs, OrchestratorQueueCommand,
111 OrchestratorQueueDrainArgs, OrchestratorQueueLsArgs, OrchestratorQueuePurgeArgs,
112 OrchestratorRecoverArgs, OrchestratorReloadArgs, OrchestratorReplayArgs,
113 OrchestratorReplayOracleArgs, OrchestratorResumeArgs, OrchestratorServeArgs,
114 OrchestratorStatsArgs, OrchestratorTenantArgs, OrchestratorTenantCommand,
115 OrchestratorTenantCreateArgs, OrchestratorTenantDeleteArgs, OrchestratorTenantLsArgs,
116 OrchestratorTenantSuspendArgs,
117};
118pub(crate) use package::{
119 AddArgs, InstallArgs, PackageArgs, PackageArtifactsCommand, PackageCacheCommand,
120 PackageCommand, PublishArgs, RemoveArgs, UpdateArgs,
121};
122pub(crate) use persona::{
123 PersonaArgs, PersonaCheckArgs, PersonaCommand, PersonaControlArgs, PersonaDoctorArgs,
124 PersonaInspectArgs, PersonaListArgs, PersonaNewArgs, PersonaSpendArgs, PersonaStatusArgs,
125 PersonaSupervisionCommand, PersonaSupervisionTailArgs, PersonaTemplateKind, PersonaTickArgs,
126 PersonaTriggerArgs,
127};
128pub(crate) use playground::PlaygroundArgs;
129pub(crate) use portal::PortalArgs;
130pub(crate) use profile::ProfileArgs;
131pub(crate) use provider::{
132 ModelInfoArgs, ProviderCatalogArgs, ProviderProbeArgs, ProviderReadyArgs,
133 ProviderToolProbeArgs, ProviderToolProbeModeArg,
134};
135pub(crate) use providers::{
136 ProvidersArgs, ProvidersCommand, ProvidersExportArgs, ProvidersRefreshArgs,
137 ProvidersValidateArgs,
138};
139pub(crate) use quickstart::QuickstartArgs;
140pub(crate) use run::RunArgs;
141pub(crate) use runs::{EvalArgs, ReplayArgs, RunsArgs, RunsCommand};
142pub(crate) use serve::{
143 A2aServeArgs, ApiServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand,
144 ServeMcpArgs, ServeTlsMode,
145};
146pub(crate) use session::{
147 SessionArgs, SessionCommand, SessionExportArgs, SessionImportArgs, SessionSchemaArgs,
148 SessionValidateArgs,
149};
150pub(crate) use skill::{
151 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
152 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
153 SkillWhoSignedArgs,
154};
155pub(crate) use skills::{
156 SkillsArgs, SkillsCommand, SkillsInspectArgs, SkillsInstallArgs, SkillsListArgs,
157 SkillsMatchArgs, SkillsNewArgs,
158};
159pub(crate) use supervisor::{
160 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
161 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
162 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
163 SupervisorStartArgs, SupervisorStopArgs,
164};
165pub(crate) use test::TestArgs;
166pub(crate) use test_bench::{
167 TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
168 TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
169};
170pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
171pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
172pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
173pub(crate) use try_cmd::TryArgs;
174#[allow(unused_imports)]
177pub(crate) use trust::{
178 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
179 TrustVerifyChainArgs,
180};
181pub(crate) use verify::VerifyArgs;
182pub(crate) use viz::VizArgs;
183pub(crate) use watch::WatchArgs;
184pub(crate) use workflow::{
185 WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
186 WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
187 WorkflowPatchValidateArgs,
188};
189
190use clap::{Parser, Subcommand};
191
192#[derive(Debug, Parser)]
193#[command(
194 name = "harn",
195 about = "The agent harness language",
196 version,
197 disable_help_subcommand = false,
198 arg_required_else_help = true
199)]
200pub(crate) struct Cli {
201 #[command(subcommand)]
202 pub command: Option<Command>,
203}
204
205#[derive(Debug, Subcommand)]
206pub(crate) enum Command {
207 #[command(long_about = "\
209Execute a .harn file or an inline expression.
210
211USAGE
212 harn run script.harn
213 harn run -e 'println(\"hello\")'
214 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
215
216CONCURRENCY
217 Harn supports first-class concurrency primitives:
218 - spawn { ... } — launch a task, return a handle
219 - parallel each LIST — concurrent map
220 - parallel settle LIST — concurrent map, collect Ok/Err
221 - parallel N — N-way fan-out
222 - with { max_concurrent: N } — cap in-flight workers
223 - channels, retry, select
224 https://harnlang.com/concurrency.html
225
226LLM THROTTLING
227 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
228 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
229 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
230
231SCRIPTING
232 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
233 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
234 Full docs: https://harnlang.com/
235")]
236 Run(RunArgs),
237 Check(CheckArgs),
239 Config(ConfigArgs),
241 Explain(ExplainArgs),
245 Contracts(ContractsArgs),
247 Lint(PathTargetsArgs),
249 Fmt(FmtArgs),
251 Test(TestArgs),
253 #[command(name = "test-bench")]
256 TestBench(TestBenchArgs),
257 Init(InitArgs),
259 New(NewArgs),
261 Doctor(DoctorArgs),
266 Quickstart(QuickstartArgs),
268 Connect(Box<ConnectArgs>),
270 Connector(ConnectorArgs),
272 Serve(ServeArgs),
274 Mcp(McpArgs),
276 Watch(WatchArgs),
278 Portal(PortalArgs),
280 Trigger(TriggerArgs),
282 Flow(FlowArgs),
284 Workflow(WorkflowArgs),
286 Supervisor(SupervisorArgs),
288 Trace(TraceArgs),
290 Crystallize(CrystallizeArgs),
292 Trust(TrustArgs),
294 #[command(name = "trust-graph")]
296 TrustGraph(TrustArgs),
297 Verify(VerifyArgs),
299 Completions(CompletionsArgs),
301 Orchestrator(OrchestratorArgs),
303 Playground(PlaygroundArgs),
305 Runs(RunsArgs),
307 Session(SessionArgs),
309 Replay(ReplayArgs),
311 Eval(EvalArgs),
313 Repl,
315 Bench(BenchArgs),
317 Viz(VizArgs),
319 Install(InstallArgs),
321 Add(AddArgs),
323 Update(UpdateArgs),
325 Remove(RemoveArgs),
327 Lock,
329 Package(PackageArgs),
331 Publish(PublishArgs),
337 Persona(PersonaArgs),
339 #[command(name = "merge-captain")]
341 MergeCaptain(MergeCaptainArgs),
342 ModelInfo(ModelInfoArgs),
344 Models(ModelsArgs),
346 Local(LocalArgs),
349 Providers(ProvidersArgs),
351 ProviderCatalog(ProviderCatalogArgs),
353 ProviderReady(ProviderReadyArgs),
355 ProviderProbe(ProviderProbeArgs),
359 ProviderToolProbe(ProviderToolProbeArgs),
361 #[command(name = "try")]
364 Try(TryArgs),
365 Skills(SkillsArgs),
367 Skill(SkillArgs),
369 Tool(ToolArgs),
371 Version,
373 #[command(hide = true, name = "dump-highlight-keywords")]
379 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
380 #[command(hide = true, name = "dump-trigger-quickref")]
386 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
387 #[command(hide = true, name = "dump-connector-matrix")]
393 DumpConnectorMatrix(DumpConnectorMatrixArgs),
394 #[command(hide = true, name = "dump-protocol-artifacts")]
400 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
401}
402
403#[cfg(test)]
404mod tests;