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