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 models;
29mod orchestrator;
30mod package;
31mod persona;
32mod playground;
33mod portal;
34mod provider;
35mod quickstart;
36mod run;
37mod runs;
38mod serve;
39mod skill;
40mod skills;
41mod supervisor;
42mod test;
43mod test_bench;
44mod trace;
45mod trigger;
46mod trust;
47mod try_cmd;
48mod util;
49mod verify;
50mod viz;
51mod watch;
52mod workflow;
53
54pub(crate) use bench::BenchArgs;
55pub(crate) use check::{CheckArgs, CheckOutputFormat};
56pub(crate) use completions::{CompletionShell, CompletionsArgs};
57pub(crate) use connect::{
58 ConnectApiKeyArgs, ConnectArgs, ConnectCommand, ConnectGenericArgs, ConnectGithubArgs,
59 ConnectLinearArgs, ConnectOAuthArgs, ConnectSetupPlanArgs, ConnectStatusArgs,
60};
61pub(crate) use connector::{
62 ConnectorArgs, ConnectorCheckArgs, ConnectorCommand, ConnectorTestArgs,
63};
64pub(crate) use contracts::{
65 ContractsArgs, ContractsBundleArgs, ContractsCommand, ContractsHostCapabilitiesArgs,
66 ContractsOutputArgs,
67};
68pub(crate) use crystallize::{
69 CrystallizeArgs, CrystallizeCommand, CrystallizeIngestArgs, CrystallizeShadowArgs,
70 CrystallizeValidateArgs,
71};
72pub(crate) use doctor::DoctorArgs;
73pub(crate) use dump::{
74 DumpConnectorMatrixArgs, DumpHighlightKeywordsArgs, DumpProtocolArtifactsArgs,
75 DumpTriggerQuickrefArgs,
76};
77pub(crate) use explain::ExplainArgs;
78pub(crate) use flow::{
79 FlowArchivistCommand, FlowArchivistScanArgs, FlowArgs, FlowCommand, FlowReplayAuditArgs,
80 FlowShipCommand, FlowShipWatchArgs,
81};
82pub(crate) use init::{InitArgs, NewArgs, ProjectTemplate};
83pub(crate) use lint_fmt::{FmtArgs, PathTargetsArgs};
84pub(crate) use mcp::{McpArgs, McpCommand, McpLoginArgs, McpServeArgs, McpServerRefArgs};
85pub(crate) use merge_captain::{
86 MergeCaptainArgs, MergeCaptainAuditArgs, MergeCaptainAuditFormat, MergeCaptainBackendKind,
87 MergeCaptainCommand, MergeCaptainIterateArgs, MergeCaptainIterateFormat,
88 MergeCaptainLadderArgs, MergeCaptainLadderFormat, MergeCaptainMockCleanupArgs,
89 MergeCaptainMockCommand, MergeCaptainMockInitArgs, MergeCaptainMockServeArgs,
90 MergeCaptainMockStatusArgs, MergeCaptainMockStepArgs, MergeCaptainRunArgs,
91};
92pub(crate) use models::{
93 ModelRecommendArgs, ModelsArgs, ModelsCommand, ModelsInstallArgs, ModelsListArgs,
94 ModelsTestArgs,
95};
96pub(crate) use orchestrator::{
97 OrchestratorArgs, OrchestratorCommand, OrchestratorDeployArgs, OrchestratorDeployProvider,
98 OrchestratorDlqArgs, OrchestratorFireArgs, OrchestratorInspectArgs, OrchestratorLocalArgs,
99 OrchestratorLogFormat, OrchestratorQueueArgs, OrchestratorQueueCommand,
100 OrchestratorQueueDrainArgs, OrchestratorQueueLsArgs, OrchestratorQueuePurgeArgs,
101 OrchestratorRecoverArgs, OrchestratorReloadArgs, OrchestratorReplayArgs,
102 OrchestratorReplayOracleArgs, OrchestratorResumeArgs, OrchestratorServeArgs,
103 OrchestratorStatsArgs, OrchestratorTenantArgs, OrchestratorTenantCommand,
104 OrchestratorTenantCreateArgs, OrchestratorTenantDeleteArgs, OrchestratorTenantLsArgs,
105 OrchestratorTenantSuspendArgs,
106};
107pub(crate) use package::{
108 AddArgs, InstallArgs, PackageArgs, PackageCacheCommand, PackageCommand, PublishArgs,
109 RemoveArgs, UpdateArgs,
110};
111pub(crate) use persona::{
112 PersonaArgs, PersonaCheckArgs, PersonaCommand, PersonaControlArgs, PersonaDoctorArgs,
113 PersonaInspectArgs, PersonaListArgs, PersonaNewArgs, PersonaSpendArgs, PersonaStatusArgs,
114 PersonaTemplateKind, PersonaTickArgs, PersonaTriggerArgs,
115};
116pub(crate) use playground::PlaygroundArgs;
117pub(crate) use portal::PortalArgs;
118pub(crate) use provider::{ModelInfoArgs, ProviderCatalogArgs, ProviderReadyArgs};
119pub(crate) use quickstart::QuickstartArgs;
120pub(crate) use run::RunArgs;
121pub(crate) use runs::{EvalArgs, ReplayArgs, RunsArgs, RunsCommand};
122pub(crate) use serve::{
123 A2aServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand, ServeMcpArgs,
124 ServeTlsMode,
125};
126pub(crate) use skill::{
127 SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
128 SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
129 SkillWhoSignedArgs,
130};
131pub(crate) use skills::{
132 SkillsArgs, SkillsCommand, SkillsInspectArgs, SkillsInstallArgs, SkillsListArgs,
133 SkillsMatchArgs, SkillsNewArgs,
134};
135pub(crate) use supervisor::{
136 SupervisorArgs, SupervisorCommand, SupervisorDlqCommand, SupervisorDlqListArgs,
137 SupervisorDlqReplayArgs, SupervisorFireArgs, SupervisorInspectArgs, SupervisorListArgs,
138 SupervisorPauseArgs, SupervisorRecoverArgs, SupervisorReplayArgs, SupervisorResumeArgs,
139 SupervisorStartArgs, SupervisorStopArgs,
140};
141pub(crate) use test::TestArgs;
142pub(crate) use test_bench::{
143 TestBenchArgs, TestBenchCommand, TestBenchReplayArgs, TestBenchRunArgs,
144};
145pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
146pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
147pub(crate) use try_cmd::TryArgs;
148#[allow(unused_imports)]
151pub(crate) use trust::{
152 TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
153 TrustVerifyChainArgs,
154};
155pub(crate) use verify::VerifyArgs;
156pub(crate) use viz::VizArgs;
157pub(crate) use watch::WatchArgs;
158pub(crate) use workflow::{WorkflowArgs, WorkflowCommand};
159
160use clap::{Parser, Subcommand};
161
162#[derive(Debug, Parser)]
163#[command(
164 name = "harn",
165 about = "The agent harness language",
166 version,
167 disable_help_subcommand = false,
168 arg_required_else_help = true
169)]
170pub(crate) struct Cli {
171 #[command(subcommand)]
172 pub command: Option<Command>,
173}
174
175#[derive(Debug, Subcommand)]
176pub(crate) enum Command {
177 #[command(long_about = "\
179Execute a .harn file or an inline expression.
180
181USAGE
182 harn run script.harn
183 harn run -e 'println(\"hello\")'
184 harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
185
186CONCURRENCY
187 Harn supports first-class concurrency primitives:
188 - spawn { ... } — launch a task, return a handle
189 - parallel each LIST — concurrent map
190 - parallel settle LIST — concurrent map, collect Ok/Err
191 - parallel N — N-way fan-out
192 - with { max_concurrent: N } — cap in-flight workers
193 - channels, retry, select
194 https://harnlang.com/concurrency.html
195
196LLM THROTTLING
197 Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
198 or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
199 (RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
200
201SCRIPTING
202 LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
203 Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
204 Full docs: https://harnlang.com/
205")]
206 Run(RunArgs),
207 Check(CheckArgs),
209 Explain(ExplainArgs),
213 Contracts(ContractsArgs),
215 Lint(PathTargetsArgs),
217 Fmt(FmtArgs),
219 Test(TestArgs),
221 #[command(name = "test-bench")]
224 TestBench(TestBenchArgs),
225 Init(InitArgs),
227 New(NewArgs),
229 Doctor(DoctorArgs),
234 Quickstart(QuickstartArgs),
236 Connect(Box<ConnectArgs>),
238 Connector(ConnectorArgs),
240 Serve(ServeArgs),
242 Mcp(McpArgs),
244 Watch(WatchArgs),
246 Portal(PortalArgs),
248 Trigger(TriggerArgs),
250 Flow(FlowArgs),
252 Workflow(WorkflowArgs),
254 Supervisor(SupervisorArgs),
256 Trace(TraceArgs),
258 Crystallize(CrystallizeArgs),
260 Trust(TrustArgs),
262 #[command(name = "trust-graph")]
264 TrustGraph(TrustArgs),
265 Verify(VerifyArgs),
267 Completions(CompletionsArgs),
269 Orchestrator(OrchestratorArgs),
271 Playground(PlaygroundArgs),
273 Runs(RunsArgs),
275 Replay(ReplayArgs),
277 Eval(EvalArgs),
279 Repl,
281 Bench(BenchArgs),
283 Viz(VizArgs),
285 Install(InstallArgs),
287 Add(AddArgs),
289 Update(UpdateArgs),
291 Remove(RemoveArgs),
293 Lock,
295 Package(PackageArgs),
297 Publish(PublishArgs),
303 Persona(PersonaArgs),
305 #[command(name = "merge-captain")]
307 MergeCaptain(MergeCaptainArgs),
308 ModelInfo(ModelInfoArgs),
310 Models(ModelsArgs),
312 ProviderCatalog(ProviderCatalogArgs),
314 ProviderReady(ProviderReadyArgs),
316 #[command(name = "try")]
319 Try(TryArgs),
320 Skills(SkillsArgs),
322 Skill(SkillArgs),
324 Version,
326 #[command(hide = true, name = "dump-highlight-keywords")]
332 DumpHighlightKeywords(DumpHighlightKeywordsArgs),
333 #[command(hide = true, name = "dump-trigger-quickref")]
339 DumpTriggerQuickref(DumpTriggerQuickrefArgs),
340 #[command(hide = true, name = "dump-connector-matrix")]
346 DumpConnectorMatrix(DumpConnectorMatrixArgs),
347 #[command(hide = true, name = "dump-protocol-artifacts")]
353 DumpProtocolArtifacts(DumpProtocolArtifactsArgs),
354}
355
356#[cfg(test)]
357mod tests;