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