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