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, EvalToolCallsArgs, EvalToolCallsCommand, EvalToolCallsRegressionArgs,
101};
102pub(crate) use explain::{CatalogFormat, ExplainArgs};
103pub(crate) use fix::{FixArgs, HarnessThreadingMode};
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, ProviderArgs, ProviderCapabilitiesCommand,
157 ProviderCapabilitiesPromoteFromEvalArgs, ProviderCatalogArgs, ProviderCommand,
158 ProviderProbeArgs, ProviderReadyArgs, ProviderToolProbeArgs, ProviderToolProbeModeArg,
159};
160pub(crate) use providers::{
161 ProvidersArgs, ProvidersCommand, ProvidersExportArgs, ProvidersMatrixArgs,
162 ProvidersRecommendArgs, ProvidersRefreshArgs, ProvidersSupportArgs, ProvidersValidateArgs,
163};
164pub(crate) use quickstart::QuickstartArgs;
165pub(crate) use routes::RoutesArgs;
166pub(crate) use run::RunArgs;
167pub(crate) use runs::{ReplayArgs, RunsArgs, RunsCommand};
168pub(crate) use serve::{
169 A2aServeArgs, ApiServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand,
170 ServeMcpArgs, ServeTlsMode,
171};
172pub(crate) use session::{
173 SessionArgs, SessionCommand, SessionExportArgs, SessionImportArgs, SessionSchemaArgs,
174 SessionValidateArgs,
175};
176pub(crate) use skill::{
177 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
178 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
179 SkillWhoSignedArgs,
180};
181pub(crate) use skills::{
182 SkillsArgs, SkillsCommand, SkillsDumpArgs, SkillsGetArgs, SkillsInspectArgs, SkillsInstallArgs,
183 SkillsListArgs, SkillsMatchArgs, SkillsNewArgs, SkillsResolvedArgs,
184};
185pub(crate) use supervisor::{
186 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
187 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
188 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
189 SupervisorStartArgs, SupervisorStopArgs,
190};
191pub(crate) use test::TestArgs;
192pub(crate) use test_bench::{
193 TestBenchArgs, TestBenchCommand, TestBenchExportAnnotationsArgs, TestBenchFidelityArgs,
194 TestBenchReplayArgs, TestBenchRunArgs, TestBenchValidateAnnotationsArgs,
195};
196pub(crate) use time::{TimeArgs, TimeCommand, TimeRunArgs};
197pub(crate) use tool::{ToolArgs, ToolCommand, ToolNewArgs};
198pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
199pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
200pub(crate) use try_cmd::TryArgs;
201pub(crate) use upgrade::UpgradeArgs;
202#[allow(unused_imports)]
205pub(crate) use trust::{
206 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
207 TrustVerifyChainArgs,
208};
209pub(crate) use verify::VerifyArgs;
210pub(crate) use version::VersionArgs;
211pub(crate) use viz::VizArgs;
212pub(crate) use watch::WatchArgs;
213pub(crate) use workflow::{
214 WorkflowArgs, WorkflowCommand, WorkflowFunctionToolsArgs, WorkflowNestedCeilingArgs,
215 WorkflowPatchApplyArgs, WorkflowPatchCommand, WorkflowPatchPreviewArgs,
216 WorkflowPatchValidateArgs,
217};
218
219use clap::{Parser, Subcommand};
220
221#[derive(Debug, Parser)]
222#[command(
223 name = "harn",
224 about = "The agent harness language",
225 version,
226 disable_help_subcommand = false,
227 arg_required_else_help = true
228)]
229pub(crate) struct Cli {
230 #[arg(long = "json-schemas", global = false)]
234 pub json_schemas: bool,
235
236 #[arg(
239 long = "command",
240 requires = "json_schemas",
241 value_name = "COMMAND",
242 global = false
243 )]
244 pub schema_command: Option<String>,
245
246 #[command(subcommand)]
247 pub command: Option<Command>,
248}
249
250#[derive(Debug, Subcommand)]
251pub(crate) enum Command {
252 #[command(long_about = "\
254Execute a .harn file or an inline expression.
255
256USAGE
257 harn run script.harn
258 harn run -e 'log(\"hello\")'
259 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
260
261CONCURRENCY
262 Harn supports first-class concurrency primitives:
263 - spawn { ... } — launch a task, return a handle
264 - parallel each LIST — concurrent map
265 - parallel settle LIST — concurrent map, collect Ok/Err
266 - parallel N — N-way fan-out
267 - with { max_concurrent: N } — cap in-flight workers
268 - channels, retry, select
269 https://harnlang.com/concurrency.html
270
271LLM THROTTLING
272 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
273 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
274 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
275
276SCRIPTING
277 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
278 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
279 Full docs: https://harnlang.com/
280")]
281 Run(RunArgs),
282 Check(CheckArgs),
284 Parse(ParseArgs),
286 Tokens(TokensArgs),
288 Config(ConfigArgs),
290 Explain(ExplainArgs),
295 Fix(FixArgs),
297 Contracts(ContractsArgs),
299 Lint(PathTargetsArgs),
301 Fmt(FmtArgs),
303 Test(TestArgs),
305 #[command(name = "test-bench")]
308 TestBench(TestBenchArgs),
309 Time(TimeArgs),
314 Init(InitArgs),
316 New(NewArgs),
318 Doctor(DoctorArgs),
323 Quickstart(QuickstartArgs),
325 Demo(DemoArgs),
328 Connect(Box<ConnectArgs>),
330 Connector(ConnectorArgs),
332 Serve(ServeArgs),
334 Mcp(McpArgs),
336 Watch(WatchArgs),
338 Dev(DevArgs),
354 Portal(PortalArgs),
356 Trigger(TriggerArgs),
358 Routes(RoutesArgs),
360 Graph(GraphArgs),
362 Flow(FlowArgs),
364 Workflow(WorkflowArgs),
366 Supervisor(SupervisorArgs),
368 Trace(TraceArgs),
370 Crystallize(CrystallizeArgs),
372 Trust(TrustArgs),
374 #[command(name = "trust-graph")]
376 TrustGraph(TrustArgs),
377 Verify(VerifyArgs),
379 Completions(CompletionsArgs),
381 Orchestrator(OrchestratorArgs),
383 Playground(PlaygroundArgs),
385 Runs(RunsArgs),
387 Session(SessionArgs),
389 Replay(ReplayArgs),
391 Eval(EvalArgs),
393 Repl,
395 Bench(BenchArgs),
397 Precompile(PrecompileArgs),
407 Pack(PackArgs),
425 Viz(VizArgs),
427 Install(InstallArgs),
429 Add(AddArgs),
431 Update(UpdateArgs),
433 Remove(RemoveArgs),
435 Lock,
437 Package(PackageArgs),
439 Publish(PublishArgs),
441 Persona(PersonaArgs),
443 #[command(name = "merge-captain")]
445 MergeCaptain(MergeCaptainArgs),
446 ModelInfo(ModelInfoArgs),
448 Models(ModelsArgs),
450 Local(LocalArgs),
453 Providers(ProvidersArgs),
455 Provider(ProviderArgs),
457 ProviderCatalog(ProviderCatalogArgs),
459 ProviderReady(ProviderReadyArgs),
461 ProviderProbe(ProviderProbeArgs),
465 ProviderToolProbe(ProviderToolProbeArgs),
467 #[command(name = "try")]
470 Try(TryArgs),
471 Skills(SkillsArgs),
474 Skill(SkillArgs),
476 Tool(ToolArgs),
478 Version(VersionArgs),
480 Upgrade(UpgradeArgs),
485 #[command(hide = true, name = "dump-highlight-keywords")]
491 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
492 #[command(hide = true, name = "dump-trigger-quickref")]
498 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
499 #[command(hide = true, name = "dump-connector-matrix")]
505 DumpConnectorMatrix(DumpConnectorMatrixArgs),
506 #[command(hide = true, name = "dump-protocol-artifacts")]
512 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
513}
514
515#[cfg(test)]
516mod tests;