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 PersonaTemplateKind, PersonaTickArgs, PersonaTriggerArgs,
115};
116pub(crate) use playground::PlaygroundArgs;
117pub(crate) use portal::PortalArgs;
118pub(crate) use provider::{ModelInfoArgs, ProviderCatalogArgs, ProviderReadyArgs};
119pub(crate) use quickstart::QuickstartArgs;
120pub(crate) use run::RunArgs;
121pub(crate) use runs::{EvalArgs, ReplayArgs, RunsArgs, RunsCommand};
122pub(crate) use serve::{
123 A2aServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand, ServeMcpArgs,
124 ServeTlsMode,
125};
126pub(crate) use skill::{
127 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
128 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
129 SkillWhoSignedArgs,
130};
131pub(crate) use skills::{
132 SkillsArgs, SkillsCommand, SkillsInspectArgs, SkillsInstallArgs, SkillsListArgs,
133 SkillsMatchArgs, SkillsNewArgs,
134};
135pub(crate) use supervisor::{
136 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
137 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
138 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
139 SupervisorStartArgs, SupervisorStopArgs,
140};
141pub(crate) use test::TestArgs;
142pub(crate) use test_bench::{
143 TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
144 TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
145};
146pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
147pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
148pub(crate) use try_cmd::TryArgs;
149#[allow(unused_imports)]
152pub(crate) use trust::{
153 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
154 TrustVerifyChainArgs,
155};
156pub(crate) use verify::VerifyArgs;
157pub(crate) use viz::VizArgs;
158pub(crate) use watch::WatchArgs;
159pub(crate) use workflow::{
160 WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
161 WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
162 WorkflowPatchValidateArgs,
163};
164
165use clap::{Parser, Subcommand};
166
167#[derive(Debug, Parser)]
168#[command(
169 name = "harn",
170 about = "The agent harness language",
171 version,
172 disable_help_subcommand = false,
173 arg_required_else_help = true
174)]
175pub(crate) struct Cli {
176 #[command(subcommand)]
177 pub command: Option<Command>,
178}
179
180#[derive(Debug, Subcommand)]
181pub(crate) enum Command {
182 #[command(long_about = "\
184Execute a .harn file or an inline expression.
185
186USAGE
187 harn run script.harn
188 harn run -e 'println(\"hello\")'
189 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
190
191CONCURRENCY
192 Harn supports first-class concurrency primitives:
193 - spawn { ... } — launch a task, return a handle
194 - parallel each LIST — concurrent map
195 - parallel settle LIST — concurrent map, collect Ok/Err
196 - parallel N — N-way fan-out
197 - with { max_concurrent: N } — cap in-flight workers
198 - channels, retry, select
199 https://harnlang.com/concurrency.html
200
201LLM THROTTLING
202 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
203 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
204 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
205
206SCRIPTING
207 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
208 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
209 Full docs: https://harnlang.com/
210")]
211 Run(RunArgs),
212 Check(CheckArgs),
214 Explain(ExplainArgs),
218 Contracts(ContractsArgs),
220 Lint(PathTargetsArgs),
222 Fmt(FmtArgs),
224 Test(TestArgs),
226 #[command(name = "test-bench")]
229 TestBench(TestBenchArgs),
230 Init(InitArgs),
232 New(NewArgs),
234 Doctor(DoctorArgs),
239 Quickstart(QuickstartArgs),
241 Connect(Box<ConnectArgs>),
243 Connector(ConnectorArgs),
245 Serve(ServeArgs),
247 Mcp(McpArgs),
249 Watch(WatchArgs),
251 Portal(PortalArgs),
253 Trigger(TriggerArgs),
255 Flow(FlowArgs),
257 Workflow(WorkflowArgs),
259 Supervisor(SupervisorArgs),
261 Trace(TraceArgs),
263 Crystallize(CrystallizeArgs),
265 Trust(TrustArgs),
267 #[command(name = "trust-graph")]
269 TrustGraph(TrustArgs),
270 Verify(VerifyArgs),
272 Completions(CompletionsArgs),
274 Orchestrator(OrchestratorArgs),
276 Playground(PlaygroundArgs),
278 Runs(RunsArgs),
280 Replay(ReplayArgs),
282 Eval(EvalArgs),
284 Repl,
286 Bench(BenchArgs),
288 Viz(VizArgs),
290 Install(InstallArgs),
292 Add(AddArgs),
294 Update(UpdateArgs),
296 Remove(RemoveArgs),
298 Lock,
300 Package(PackageArgs),
302 Publish(PublishArgs),
308 Persona(PersonaArgs),
310 #[command(name = "merge-captain")]
312 MergeCaptain(MergeCaptainArgs),
313 ModelInfo(ModelInfoArgs),
315 Models(ModelsArgs),
317 ProviderCatalog(ProviderCatalogArgs),
319 ProviderReady(ProviderReadyArgs),
321 #[command(name = "try")]
324 Try(TryArgs),
325 Skills(SkillsArgs),
327 Skill(SkillArgs),
329 Version,
331 #[command(hide = true, name = "dump-highlight-keywords")]
337 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
338 #[command(hide = true, name = "dump-trigger-quickref")]
344 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
345 #[command(hide = true, name = "dump-connector-matrix")]
351 DumpConnectorMatrix(DumpConnectorMatrixArgs),
352 #[command(hide = true, name = "dump-protocol-artifacts")]
358 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
359}
360
361#[cfg(test)]
362mod tests;