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