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