1mod bench;
14mod check;
15mod completions;
16mod config_cmd;
17mod connect;
18mod connector;
19mod contracts;
20mod crystallize;
21mod demo;
22mod dev;
23mod doctor;
24mod dump;
25mod eval;
26mod explain;
27mod fix;
28mod flow;
29mod graph;
30mod init;
31mod lint_fmt;
32mod local;
33mod mcp;
34mod merge_captain;
35mod models;
36mod orchestrator;
37mod pack;
38mod package;
39mod parse_tokens;
40mod persona;
41mod playground;
42mod portal;
43mod precompile;
44mod profile;
45mod provider;
46mod providers;
47mod quickstart;
48mod routes;
49mod run;
50mod runs;
51mod serve;
52mod session;
53mod skill;
54mod skills;
55mod supervisor;
56mod test;
57mod test_bench;
58mod time;
59mod tool;
60mod trace;
61mod trigger;
62mod trust;
63mod try_cmd;
64mod upgrade;
65mod util;
66mod verify;
67mod viz;
68mod watch;
69mod workflow;
70
71pub(crate) use bench::{BenchArgs, BenchCommand, BenchReplayArgs};
72pub(crate) use check::{CheckArgs, CheckOutputFormat};
73pub(crate) use completions::{CompletionShell, CompletionsArgs};
74pub(crate) use config_cmd::{ConfigArgs, ConfigCommand, ConfigInspectArgs, ConfigValidateArgs};
75pub(crate) use connect::{
76 ConnectApiKeyArgs, ConnectArgs, ConnectCommand, ConnectGenericArgs, ConnectGithubArgs,
77 ConnectLinearArgs, ConnectOAuthArgs, ConnectSetupPlanArgs, ConnectStatusArgs,
78};
79pub(crate) use connector::{
80 ConnectorArgs, ConnectorCheckArgs, ConnectorCommand, ConnectorTestArgs,
81};
82pub(crate) use contracts::{
83 ContractsArgs, ContractsBundleArgs, ContractsCommand, ContractsHostCapabilitiesArgs,
84 ContractsOutputArgs,
85};
86pub(crate) use crystallize::{
87 CrystallizeArgs, CrystallizeCommand, CrystallizeIngestArgs, CrystallizeShadowArgs,
88 CrystallizeValidateArgs,
89};
90pub(crate) use demo::DemoArgs;
91pub(crate) use dev::DevArgs;
92pub(crate) use doctor::DoctorArgs;
93pub(crate) use dump::{
94 DumpConnectorMatrixArgs, DumpHighlightKeywordsArgs, DumpProtocolArtifactsArgs,
95 DumpTriggerQuickrefArgs,
96};
97pub use eval::{
98 EvalArgs, EvalCommand, EvalPromptArgs, EvalPromptMode, EvalPromptOutput, EvalToolCallsArgs,
99 EvalToolCallsCommand, EvalToolCallsRegressionArgs,
100};
101pub(crate) use explain::{CatalogFormat, ExplainArgs};
102pub(crate) use fix::FixArgs;
103pub(crate) use flow::{
104 FlowArchivistCommand, FlowArchivistScanArgs, FlowArgs, FlowCommand, FlowReplayAuditArgs,
105 FlowShipCommand, FlowShipWatchArgs,
106};
107pub(crate) use graph::GraphArgs;
108pub(crate) use init::{InitArgs, NewArgs, ProjectTemplate};
109pub(crate) use lint_fmt::{FmtArgs, PathTargetsArgs};
110pub(crate) use local::{
111 LocalArgs, LocalCommand, LocalListArgs, LocalProfileArgs, LocalStatusArgs, LocalStopArgs,
112 LocalSwitchArgs,
113};
114pub(crate) use mcp::{McpArgs, McpCommand, McpLoginArgs, McpServeArgs, McpServerRefArgs};
115pub(crate) use merge_captain::{
116 MergeCaptainArgs, MergeCaptainAuditArgs, MergeCaptainAuditFormat, MergeCaptainBackendKind,
117 MergeCaptainCommand, MergeCaptainIterateArgs, MergeCaptainIterateFormat,
118 MergeCaptainLadderArgs, MergeCaptainLadderFormat, MergeCaptainMockCleanupArgs,
119 MergeCaptainMockCommand, MergeCaptainMockInitArgs, MergeCaptainMockServeArgs,
120 MergeCaptainMockStatusArgs, MergeCaptainMockStepArgs, MergeCaptainRunArgs,
121};
122pub(crate) use models::{
123 ModelRecommendArgs, ModelsArgs, ModelsCommand, ModelsInstallArgs, ModelsListArgs,
124 ModelsTestArgs,
125};
126pub(crate) use orchestrator::{
127 OrchestratorArgs, OrchestratorCommand, OrchestratorDeployArgs, OrchestratorDeployProvider,
128 OrchestratorDlqArgs, OrchestratorFireArgs, OrchestratorInspectArgs, OrchestratorLocalArgs,
129 OrchestratorLogFormat, OrchestratorQueueArgs, OrchestratorQueueCommand,
130 OrchestratorQueueDrainArgs, OrchestratorQueueLsArgs, OrchestratorQueuePurgeArgs,
131 OrchestratorRecoverArgs, OrchestratorReloadArgs, OrchestratorReplayArgs,
132 OrchestratorReplayOracleArgs, OrchestratorResumeArgs, OrchestratorServeArgs,
133 OrchestratorStatsArgs, OrchestratorTenantArgs, OrchestratorTenantCommand,
134 OrchestratorTenantCreateArgs, OrchestratorTenantDeleteArgs, OrchestratorTenantLsArgs,
135 OrchestratorTenantSuspendArgs,
136};
137pub use pack::PackArgs;
138pub(crate) use package::{
139 AddArgs, InstallArgs, PackageArgs, PackageArtifactsCommand, PackageCacheCommand,
140 PackageCommand, PublishArgs, RemoveArgs, UpdateArgs,
141};
142pub(crate) use parse_tokens::{ParseArgs, TokensArgs};
143pub(crate) use persona::{
144 PersonaArgs, PersonaCheckArgs, PersonaCommand, PersonaControlArgs, PersonaDoctorArgs,
145 PersonaInspectArgs, PersonaListArgs, PersonaNewArgs, PersonaSpendArgs, PersonaStatusArgs,
146 PersonaSupervisionCommand, PersonaSupervisionTailArgs, PersonaTemplateKind, PersonaTickArgs,
147 PersonaTriggerArgs,
148};
149pub(crate) use playground::PlaygroundArgs;
150pub(crate) use portal::PortalArgs;
151pub use precompile::PrecompileArgs;
152pub(crate) use profile::ProfileArgs;
153pub(crate) use provider::{
154 ModelInfoArgs, ProviderCatalogArgs, ProviderProbeArgs, ProviderReadyArgs,
155 ProviderToolProbeArgs, ProviderToolProbeModeArg,
156};
157pub(crate) use providers::{
158 ProvidersArgs, ProvidersCommand, ProvidersExportArgs, ProvidersRefreshArgs,
159 ProvidersValidateArgs,
160};
161pub(crate) use quickstart::QuickstartArgs;
162pub(crate) use routes::RoutesArgs;
163pub(crate) use run::RunArgs;
164pub(crate) use runs::{ReplayArgs, RunsArgs, RunsCommand};
165pub(crate) use serve::{
166 A2aServeArgs, ApiServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand,
167 ServeMcpArgs, ServeTlsMode,
168};
169pub(crate) use session::{
170 SessionArgs, SessionCommand, SessionExportArgs, SessionImportArgs, SessionSchemaArgs,
171 SessionValidateArgs,
172};
173pub(crate) use skill::{
174 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
175 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
176 SkillWhoSignedArgs,
177};
178pub(crate) use skills::{
179 SkillsArgs, SkillsCommand, SkillsDumpArgs, SkillsGetArgs, SkillsInspectArgs, SkillsInstallArgs,
180 SkillsListArgs, SkillsMatchArgs, SkillsNewArgs, SkillsResolvedArgs,
181};
182pub(crate) use supervisor::{
183 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
184 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
185 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
186 SupervisorStartArgs, SupervisorStopArgs,
187};
188pub(crate) use test::TestArgs;
189pub(crate) use test_bench::{
190 TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
191 TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
192};
193pub(crate) use time::{TimeArgs, TimeCommand, TimeRunArgs};
194pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
195pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
196pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
197pub(crate) use try_cmd::TryArgs;
198pub(crate) use upgrade::UpgradeArgs;
199#[allow(unused_imports)]
202pub(crate) use trust::{
203 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
204 TrustVerifyChainArgs,
205};
206pub(crate) use verify::VerifyArgs;
207pub(crate) use viz::VizArgs;
208pub(crate) use watch::WatchArgs;
209pub(crate) use workflow::{
210 WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
211 WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
212 WorkflowPatchValidateArgs,
213};
214
215use clap::{Parser, Subcommand};
216
217#[derive(Debug, Parser)]
218#[command(
219 name = "harn",
220 about = "The agent harness language",
221 version,
222 disable_help_subcommand = false,
223 arg_required_else_help = true
224)]
225pub(crate) struct Cli {
226 #[arg(long = "json-schemas", global = false)]
230 pub json_schemas: bool,
231
232 #[arg(
235 long = "command",
236 requires = "json_schemas",
237 value_name = "COMMAND",
238 global = false
239 )]
240 pub schema_command: Option<String>,
241
242 #[command(subcommand)]
243 pub command: Option<Command>,
244}
245
246#[derive(Debug, Subcommand)]
247pub(crate) enum Command {
248 #[command(long_about = "\
250Execute a .harn file or an inline expression.
251
252USAGE
253 harn run script.harn
254 harn run -e 'println(\"hello\")'
255 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
256
257CONCURRENCY
258 Harn supports first-class concurrency primitives:
259 - spawn { ... } — launch a task, return a handle
260 - parallel each LIST — concurrent map
261 - parallel settle LIST — concurrent map, collect Ok/Err
262 - parallel N — N-way fan-out
263 - with { max_concurrent: N } — cap in-flight workers
264 - channels, retry, select
265 https://harnlang.com/concurrency.html
266
267LLM THROTTLING
268 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
269 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
270 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
271
272SCRIPTING
273 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
274 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
275 Full docs: https://harnlang.com/
276")]
277 Run(RunArgs),
278 Check(CheckArgs),
280 Parse(ParseArgs),
282 Tokens(TokensArgs),
284 Config(ConfigArgs),
286 Explain(ExplainArgs),
291 Fix(FixArgs),
293 Contracts(ContractsArgs),
295 Lint(PathTargetsArgs),
297 Fmt(FmtArgs),
299 Test(TestArgs),
301 #[command(name = "test-bench")]
304 TestBench(TestBenchArgs),
305 Time(TimeArgs),
310 Init(InitArgs),
312 New(NewArgs),
314 Doctor(DoctorArgs),
319 Quickstart(QuickstartArgs),
321 Demo(DemoArgs),
324 Connect(Box<ConnectArgs>),
326 Connector(ConnectorArgs),
328 Serve(ServeArgs),
330 Mcp(McpArgs),
332 Watch(WatchArgs),
334 Dev(DevArgs),
350 Portal(PortalArgs),
352 Trigger(TriggerArgs),
354 Routes(RoutesArgs),
356 Graph(GraphArgs),
358 Flow(FlowArgs),
360 Workflow(WorkflowArgs),
362 Supervisor(SupervisorArgs),
364 Trace(TraceArgs),
366 Crystallize(CrystallizeArgs),
368 Trust(TrustArgs),
370 #[command(name = "trust-graph")]
372 TrustGraph(TrustArgs),
373 Verify(VerifyArgs),
375 Completions(CompletionsArgs),
377 Orchestrator(OrchestratorArgs),
379 Playground(PlaygroundArgs),
381 Runs(RunsArgs),
383 Session(SessionArgs),
385 Replay(ReplayArgs),
387 Eval(EvalArgs),
389 Repl,
391 Bench(BenchArgs),
393 Precompile(PrecompileArgs),
403 Pack(PackArgs),
417 Viz(VizArgs),
419 Install(InstallArgs),
421 Add(AddArgs),
423 Update(UpdateArgs),
425 Remove(RemoveArgs),
427 Lock,
429 Package(PackageArgs),
431 Publish(PublishArgs),
437 Persona(PersonaArgs),
439 #[command(name = "merge-captain")]
441 MergeCaptain(MergeCaptainArgs),
442 ModelInfo(ModelInfoArgs),
444 Models(ModelsArgs),
446 Local(LocalArgs),
449 Providers(ProvidersArgs),
451 ProviderCatalog(ProviderCatalogArgs),
453 ProviderReady(ProviderReadyArgs),
455 ProviderProbe(ProviderProbeArgs),
459 ProviderToolProbe(ProviderToolProbeArgs),
461 #[command(name = "try")]
464 Try(TryArgs),
465 Skills(SkillsArgs),
468 Skill(SkillArgs),
470 Tool(ToolArgs),
472 Version,
474 Upgrade(UpgradeArgs),
479 #[command(hide = true, name = "dump-highlight-keywords")]
485 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
486 #[command(hide = true, name = "dump-trigger-quickref")]
492 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
493 #[command(hide = true, name = "dump-connector-matrix")]
499 DumpConnectorMatrix(DumpConnectorMatrixArgs),
500 #[command(hide = true, name = "dump-protocol-artifacts")]
506 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
507}
508
509#[cfg(test)]
510mod tests;