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