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