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 version;
68mod viz;
69mod watch;
70mod workflow;
71
72pub(crate) use bench::{BenchArgs, BenchCommand, BenchReplayArgs};
73pub(crate) use check::{CheckArgs, CheckOutputFormat};
74pub(crate) use completions::{CompletionShell, CompletionsArgs};
75pub(crate) use config_cmd::{ConfigArgs, ConfigCommand, ConfigInspectArgs, ConfigValidateArgs};
76pub(crate) use connect::{
77 ConnectApiKeyArgs, ConnectArgs, ConnectCommand, ConnectGenericArgs, ConnectGithubArgs,
78 ConnectLinearArgs, ConnectOAuthArgs, ConnectSetupPlanArgs, ConnectStatusArgs,
79};
80pub(crate) use connector::{
81 ConnectorArgs, ConnectorCheckArgs, ConnectorCommand, ConnectorTestArgs,
82};
83pub(crate) use contracts::{
84 ContractsArgs, ContractsBundleArgs, ContractsCommand, ContractsHostCapabilitiesArgs,
85 ContractsOutputArgs,
86};
87pub(crate) use crystallize::{
88 CrystallizeArgs, CrystallizeCommand, CrystallizeIngestArgs, CrystallizeShadowArgs,
89 CrystallizeValidateArgs,
90};
91pub(crate) use demo::DemoArgs;
92pub(crate) use dev::DevArgs;
93pub(crate) use doctor::DoctorArgs;
94pub(crate) use dump::{
95 DumpConnectorMatrixArgs, DumpHighlightKeywordsArgs, DumpProtocolArtifactsArgs,
96 DumpTriggerQuickrefArgs,
97};
98pub use eval::{
99 EvalArgs, EvalCommand, EvalPromptArgs, EvalPromptMode, EvalPromptOutput, EvalToolCallsArgs,
100 EvalToolCallsCommand, EvalToolCallsRegressionArgs,
101};
102pub(crate) use explain::{CatalogFormat, ExplainArgs};
103pub(crate) use fix::FixArgs;
104pub(crate) use flow::{
105 FlowArchivistCommand, FlowArchivistScanArgs, FlowArgs, FlowCommand, FlowReplayAuditArgs,
106 FlowShipCommand, FlowShipWatchArgs,
107};
108pub(crate) use graph::GraphArgs;
109pub(crate) use init::{InitArgs, NewArgs, ProjectTemplate};
110pub(crate) use lint_fmt::{FmtArgs, PathTargetsArgs};
111pub(crate) use local::{
112 LocalArgs, LocalCommand, LocalListArgs, LocalProfileArgs, LocalStatusArgs, LocalStopArgs,
113 LocalSwitchArgs,
114};
115pub(crate) use mcp::{McpArgs, McpCommand, McpLoginArgs, McpServeArgs, McpServerRefArgs};
116pub(crate) use merge_captain::{
117 MergeCaptainArgs, MergeCaptainAuditArgs, MergeCaptainAuditFormat, MergeCaptainBackendKind,
118 MergeCaptainCommand, MergeCaptainIterateArgs, MergeCaptainIterateFormat,
119 MergeCaptainLadderArgs, MergeCaptainLadderFormat, MergeCaptainMockCleanupArgs,
120 MergeCaptainMockCommand, MergeCaptainMockInitArgs, MergeCaptainMockServeArgs,
121 MergeCaptainMockStatusArgs, MergeCaptainMockStepArgs, MergeCaptainRunArgs,
122};
123pub(crate) use models::{
124 ModelRecommendArgs, ModelsArgs, ModelsCommand, ModelsInstallArgs, ModelsListArgs,
125 ModelsTestArgs,
126};
127pub(crate) use orchestrator::{
128 OrchestratorArgs, OrchestratorCommand, OrchestratorDeployArgs, OrchestratorDeployProvider,
129 OrchestratorDlqArgs, OrchestratorFireArgs, OrchestratorInspectArgs, OrchestratorLocalArgs,
130 OrchestratorLogFormat, OrchestratorQueueArgs, OrchestratorQueueCommand,
131 OrchestratorQueueDrainArgs, OrchestratorQueueLsArgs, OrchestratorQueuePurgeArgs,
132 OrchestratorRecoverArgs, OrchestratorReloadArgs, OrchestratorReplayArgs,
133 OrchestratorReplayOracleArgs, OrchestratorResumeArgs, OrchestratorServeArgs,
134 OrchestratorStatsArgs, OrchestratorTenantArgs, OrchestratorTenantCommand,
135 OrchestratorTenantCreateArgs, OrchestratorTenantDeleteArgs, OrchestratorTenantLsArgs,
136 OrchestratorTenantSuspendArgs,
137};
138pub use pack::{PackArgs, PackCommand, PackVerifyArgs};
139pub(crate) use package::{
140 AddArgs, InstallArgs, PackageArgs, PackageArtifactsCommand, PackageCacheCommand,
141 PackageCommand, PackageScaffoldCommand, PackageScaffoldOpenapiArgs, PublishArgs, RemoveArgs,
142 UpdateArgs,
143};
144pub(crate) use parse_tokens::{ParseArgs, TokensArgs};
145pub(crate) use persona::{
146 PersonaArgs, PersonaCheckArgs, PersonaCommand, PersonaControlArgs, PersonaDoctorArgs,
147 PersonaInspectArgs, PersonaListArgs, PersonaNewArgs, PersonaSpendArgs, PersonaStatusArgs,
148 PersonaSupervisionCommand, PersonaSupervisionTailArgs, PersonaTemplateKind, PersonaTickArgs,
149 PersonaTriggerArgs,
150};
151pub(crate) use playground::PlaygroundArgs;
152pub(crate) use portal::PortalArgs;
153pub use precompile::PrecompileArgs;
154pub(crate) use profile::ProfileArgs;
155pub(crate) use provider::{
156 ModelInfoArgs, ProviderCatalogArgs, ProviderProbeArgs, ProviderReadyArgs,
157 ProviderToolProbeArgs, ProviderToolProbeModeArg,
158};
159pub(crate) use providers::{
160 ProvidersArgs, ProvidersCommand, ProvidersExportArgs, ProvidersRefreshArgs,
161 ProvidersValidateArgs,
162};
163pub(crate) use quickstart::QuickstartArgs;
164pub(crate) use routes::RoutesArgs;
165pub(crate) use run::RunArgs;
166pub(crate) use runs::{ReplayArgs, RunsArgs, RunsCommand};
167pub(crate) use serve::{
168 A2aServeArgs, ApiServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand,
169 ServeMcpArgs, ServeTlsMode,
170};
171pub(crate) use session::{
172 SessionArgs, SessionCommand, SessionExportArgs, SessionImportArgs, SessionSchemaArgs,
173 SessionValidateArgs,
174};
175pub(crate) use skill::{
176 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
177 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
178 SkillWhoSignedArgs,
179};
180pub(crate) use skills::{
181 SkillsArgs, SkillsCommand, SkillsDumpArgs, SkillsGetArgs, SkillsInspectArgs, SkillsInstallArgs,
182 SkillsListArgs, SkillsMatchArgs, SkillsNewArgs, SkillsResolvedArgs,
183};
184pub(crate) use supervisor::{
185 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
186 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
187 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
188 SupervisorStartArgs, SupervisorStopArgs,
189};
190pub(crate) use test::TestArgs;
191pub(crate) use test_bench::{
192 TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
193 TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
194};
195pub(crate) use time::{TimeArgs, TimeCommand, TimeRunArgs};
196pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
197pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
198pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
199pub(crate) use try_cmd::TryArgs;
200pub(crate) use upgrade::UpgradeArgs;
201#[allow(unused_imports)]
204pub(crate) use trust::{
205 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
206 TrustVerifyChainArgs,
207};
208pub(crate) use verify::VerifyArgs;
209pub(crate) use version::VersionArgs;
210pub(crate) use viz::VizArgs;
211pub(crate) use watch::WatchArgs;
212pub(crate) use workflow::{
213 WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
214 WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
215 WorkflowPatchValidateArgs,
216};
217
218use clap::{Parser, Subcommand};
219
220#[derive(Debug, Parser)]
221#[command(
222 name = "harn",
223 about = "The agent harness language",
224 version,
225 disable_help_subcommand = false,
226 arg_required_else_help = true
227)]
228pub(crate) struct Cli {
229 #[arg(long = "json-schemas", global = false)]
233 pub json_schemas: bool,
234
235 #[arg(
238 long = "command",
239 requires = "json_schemas",
240 value_name = "COMMAND",
241 global = false
242 )]
243 pub schema_command: Option<String>,
244
245 #[command(subcommand)]
246 pub command: Option<Command>,
247}
248
249#[derive(Debug, Subcommand)]
250pub(crate) enum Command {
251 #[command(long_about = "\
253Execute a .harn file or an inline expression.
254
255USAGE
256 harn run script.harn
257 harn run -e 'log(\"hello\")'
258 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
259
260CONCURRENCY
261 Harn supports first-class concurrency primitives:
262 - spawn { ... } — launch a task, return a handle
263 - parallel each LIST — concurrent map
264 - parallel settle LIST — concurrent map, collect Ok/Err
265 - parallel N — N-way fan-out
266 - with { max_concurrent: N } — cap in-flight workers
267 - channels, retry, select
268 https://harnlang.com/concurrency.html
269
270LLM THROTTLING
271 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
272 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
273 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
274
275SCRIPTING
276 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
277 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
278 Full docs: https://harnlang.com/
279")]
280 Run(RunArgs),
281 Check(CheckArgs),
283 Parse(ParseArgs),
285 Tokens(TokensArgs),
287 Config(ConfigArgs),
289 Explain(ExplainArgs),
294 Fix(FixArgs),
296 Contracts(ContractsArgs),
298 Lint(PathTargetsArgs),
300 Fmt(FmtArgs),
302 Test(TestArgs),
304 #[command(name = "test-bench")]
307 TestBench(TestBenchArgs),
308 Time(TimeArgs),
313 Init(InitArgs),
315 New(NewArgs),
317 Doctor(DoctorArgs),
322 Quickstart(QuickstartArgs),
324 Demo(DemoArgs),
327 Connect(Box<ConnectArgs>),
329 Connector(ConnectorArgs),
331 Serve(ServeArgs),
333 Mcp(McpArgs),
335 Watch(WatchArgs),
337 Dev(DevArgs),
353 Portal(PortalArgs),
355 Trigger(TriggerArgs),
357 Routes(RoutesArgs),
359 Graph(GraphArgs),
361 Flow(FlowArgs),
363 Workflow(WorkflowArgs),
365 Supervisor(SupervisorArgs),
367 Trace(TraceArgs),
369 Crystallize(CrystallizeArgs),
371 Trust(TrustArgs),
373 #[command(name = "trust-graph")]
375 TrustGraph(TrustArgs),
376 Verify(VerifyArgs),
378 Completions(CompletionsArgs),
380 Orchestrator(OrchestratorArgs),
382 Playground(PlaygroundArgs),
384 Runs(RunsArgs),
386 Session(SessionArgs),
388 Replay(ReplayArgs),
390 Eval(EvalArgs),
392 Repl,
394 Bench(BenchArgs),
396 Precompile(PrecompileArgs),
406 Pack(PackArgs),
424 Viz(VizArgs),
426 Install(InstallArgs),
428 Add(AddArgs),
430 Update(UpdateArgs),
432 Remove(RemoveArgs),
434 Lock,
436 Package(PackageArgs),
438 Publish(PublishArgs),
444 Persona(PersonaArgs),
446 #[command(name = "merge-captain")]
448 MergeCaptain(MergeCaptainArgs),
449 ModelInfo(ModelInfoArgs),
451 Models(ModelsArgs),
453 Local(LocalArgs),
456 Providers(ProvidersArgs),
458 ProviderCatalog(ProviderCatalogArgs),
460 ProviderReady(ProviderReadyArgs),
462 ProviderProbe(ProviderProbeArgs),
466 ProviderToolProbe(ProviderToolProbeArgs),
468 #[command(name = "try")]
471 Try(TryArgs),
472 Skills(SkillsArgs),
475 Skill(SkillArgs),
477 Tool(ToolArgs),
479 Version(VersionArgs),
481 Upgrade(UpgradeArgs),
486 #[command(hide = true, name = "dump-highlight-keywords")]
492 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
493 #[command(hide = true, name = "dump-trigger-quickref")]
499 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
500 #[command(hide = true, name = "dump-connector-matrix")]
506 DumpConnectorMatrix(DumpConnectorMatrixArgs),
507 #[command(hide = true, name = "dump-protocol-artifacts")]
513 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
514}
515
516#[cfg(test)]
517mod tests;