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