1mod bench;
14mod check;
15mod connect;
16mod connector;
17mod contracts;
18mod crystallize;
19mod doctor;
20mod dump;
21mod explain;
22mod flow;
23mod init;
24mod lint_fmt;
25mod mcp;
26mod merge_captain;
27mod orchestrator;
28mod package;
29mod persona;
30mod playground;
31mod portal;
32mod provider;
33mod run;
34mod runs;
35mod serve;
36mod skill;
37mod skills;
38mod test;
39mod trace;
40mod trigger;
41mod trust;
42mod util;
43mod verify;
44mod viz;
45mod watch;
46
47pub(crate) use bench::BenchArgs;
48pub(crate) use check::{CheckArgs, CheckOutputFormat};
49pub(crate) use connect::{
50 ConnectArgs, ConnectCommand, ConnectGenericArgs, ConnectGithubArgs, ConnectLinearArgs,
51 ConnectOAuthArgs,
52};
53pub(crate) use connector::{
54 ConnectorArgs, ConnectorCheckArgs, ConnectorCommand, ConnectorTestArgs,
55};
56pub(crate) use contracts::{
57 ContractsArgs, ContractsBundleArgs, ContractsCommand, ContractsHostCapabilitiesArgs,
58 ContractsOutputArgs,
59};
60pub(crate) use crystallize::{
61 CrystallizeArgs, CrystallizeCommand, CrystallizeIngestArgs, CrystallizeShadowArgs,
62 CrystallizeValidateArgs,
63};
64pub(crate) use doctor::DoctorArgs;
65pub(crate) use dump::{
66 DumpConnectorMatrixArgs, DumpHighlightKeywordsArgs, DumpTriggerQuickrefArgs,
67};
68pub(crate) use explain::ExplainArgs;
69pub(crate) use flow::{
70 FlowArchivistCommand, FlowArchivistScanArgs, FlowArgs, FlowCommand, FlowReplayAuditArgs,
71 FlowShipCommand, FlowShipWatchArgs,
72};
73pub(crate) use init::{InitArgs, NewArgs, ProjectTemplate};
74pub(crate) use lint_fmt::{FmtArgs, PathTargetsArgs};
75pub(crate) use mcp::{McpArgs, McpCommand, McpLoginArgs, McpServeArgs, McpServerRefArgs};
76pub(crate) use merge_captain::{
77 MergeCaptainArgs, MergeCaptainAuditArgs, MergeCaptainAuditFormat, MergeCaptainBackendKind,
78 MergeCaptainCommand, MergeCaptainIterateArgs, MergeCaptainIterateFormat,
79 MergeCaptainLadderArgs, MergeCaptainLadderFormat, MergeCaptainMockCleanupArgs,
80 MergeCaptainMockCommand, MergeCaptainMockInitArgs, MergeCaptainMockServeArgs,
81 MergeCaptainMockStatusArgs, MergeCaptainMockStepArgs, MergeCaptainRunArgs,
82};
83pub(crate) use orchestrator::{
84 OrchestratorArgs, OrchestratorCommand, OrchestratorDeployArgs, OrchestratorDeployProvider,
85 OrchestratorDlqArgs, OrchestratorFireArgs, OrchestratorInspectArgs, OrchestratorLocalArgs,
86 OrchestratorLogFormat, OrchestratorQueueArgs, OrchestratorQueueCommand,
87 OrchestratorQueueDrainArgs, OrchestratorQueueLsArgs, OrchestratorQueuePurgeArgs,
88 OrchestratorRecoverArgs, OrchestratorReloadArgs, OrchestratorReplayArgs,
89 OrchestratorResumeArgs, OrchestratorServeArgs, OrchestratorStatsArgs, OrchestratorTenantArgs,
90 OrchestratorTenantCommand, OrchestratorTenantCreateArgs, OrchestratorTenantDeleteArgs,
91 OrchestratorTenantLsArgs, OrchestratorTenantSuspendArgs,
92};
93pub(crate) use package::{
94 AddArgs, InstallArgs, PackageArgs, PackageCacheCommand, PackageCommand, PublishArgs,
95 RemoveArgs, UpdateArgs,
96};
97pub(crate) use persona::{
98 PersonaArgs, PersonaCheckArgs, PersonaCommand, PersonaControlArgs, PersonaDoctorArgs,
99 PersonaInspectArgs, PersonaListArgs, PersonaNewArgs, PersonaSpendArgs, PersonaStatusArgs,
100 PersonaTemplateKind, PersonaTickArgs, PersonaTriggerArgs,
101};
102pub(crate) use playground::PlaygroundArgs;
103pub(crate) use portal::PortalArgs;
104pub(crate) use provider::{ModelInfoArgs, ProviderCatalogArgs, ProviderReadyArgs};
105pub(crate) use run::RunArgs;
106pub(crate) use runs::{EvalArgs, ReplayArgs, RunsArgs, RunsCommand};
107pub(crate) use serve::{
108 A2aServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand, ServeMcpArgs,
109 ServeTlsMode,
110};
111pub(crate) use skill::{
112 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
113 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
114 SkillWhoSignedArgs,
115};
116pub(crate) use skills::{
117 SkillsArgs, SkillsCommand, SkillsInspectArgs, SkillsInstallArgs, SkillsListArgs,
118 SkillsMatchArgs, SkillsNewArgs,
119};
120pub(crate) use test::TestArgs;
121pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
122pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
123#[allow(unused_imports)]
126pub(crate) use trust::{
127 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
128 TrustVerifyChainArgs,
129};
130pub(crate) use verify::VerifyArgs;
131pub(crate) use viz::VizArgs;
132pub(crate) use watch::WatchArgs;
133
134use clap::{Parser, Subcommand};
135
136#[derive(Debug, Parser)]
137#[command(
138 name = "harn",
139 about = "The agent harness language",
140 version,
141 disable_help_subcommand = false,
142 arg_required_else_help = true
143)]
144pub(crate) struct Cli {
145 #[command(subcommand)]
146 pub command: Option<Command>,
147}
148
149#[derive(Debug, Subcommand)]
150pub(crate) enum Command {
151 #[command(long_about = "\
153Execute a .harn file or an inline expression.
154
155USAGE
156 harn run script.harn
157 harn run -e 'println(\"hello\")'
158 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
159
160CONCURRENCY
161 Harn supports first-class concurrency primitives:
162 - spawn { ... } — launch a task, return a handle
163 - parallel each LIST — concurrent map
164 - parallel settle LIST — concurrent map, collect Ok/Err
165 - parallel N — N-way fan-out
166 - with { max_concurrent: N } — cap in-flight workers
167 - channels, retry, select
168 https://harnlang.com/concurrency.html
169
170LLM THROTTLING
171 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
172 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
173 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
174
175SCRIPTING
176 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
177 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
178 Full docs: https://harnlang.com/
179")]
180 Run(RunArgs),
181 Check(CheckArgs),
183 Explain(ExplainArgs),
187 Contracts(ContractsArgs),
189 Lint(PathTargetsArgs),
191 Fmt(FmtArgs),
193 Test(TestArgs),
195 Init(InitArgs),
197 New(NewArgs),
199 Doctor(DoctorArgs),
204 Connect(Box<ConnectArgs>),
206 Connector(ConnectorArgs),
208 Serve(ServeArgs),
210 Mcp(McpArgs),
212 Watch(WatchArgs),
214 Portal(PortalArgs),
216 Trigger(TriggerArgs),
218 Flow(FlowArgs),
220 Trace(TraceArgs),
222 Crystallize(CrystallizeArgs),
224 Trust(TrustArgs),
226 #[command(name = "trust-graph")]
228 TrustGraph(TrustArgs),
229 Verify(VerifyArgs),
231 Orchestrator(OrchestratorArgs),
233 Playground(PlaygroundArgs),
235 Runs(RunsArgs),
237 Replay(ReplayArgs),
239 Eval(EvalArgs),
241 Repl,
243 Bench(BenchArgs),
245 Viz(VizArgs),
247 Install(InstallArgs),
249 Add(AddArgs),
251 Update(UpdateArgs),
253 Remove(RemoveArgs),
255 Lock,
257 Package(PackageArgs),
259 Publish(PublishArgs),
265 Persona(PersonaArgs),
267 #[command(name = "merge-captain")]
269 MergeCaptain(MergeCaptainArgs),
270 ModelInfo(ModelInfoArgs),
272 ProviderCatalog(ProviderCatalogArgs),
274 ProviderReady(ProviderReadyArgs),
276 Skills(SkillsArgs),
278 Skill(SkillArgs),
280 Version,
282 #[command(hide = true, name = "dump-highlight-keywords")]
288 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
289 #[command(hide = true, name = "dump-trigger-quickref")]
295 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
296 #[command(hide = true, name = "dump-connector-matrix")]
302 DumpConnectorMatrix(DumpConnectorMatrixArgs),
303}
304
305#[cfg(test)]
306mod tests;