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