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