mod bench;
mod check;
mod completions;
mod connect;
mod connector;
mod contracts;
mod crystallize;
mod doctor;
mod dump;
mod explain;
mod flow;
mod init;
mod lint_fmt;
mod mcp;
mod merge_captain;
mod models;
mod orchestrator;
mod package;
mod persona;
mod playground;
mod portal;
mod provider;
mod quickstart;
mod run;
mod runs;
mod serve;
mod skill;
mod skills;
mod test;
mod trace;
mod trigger;
mod trust;
mod try_cmd;
mod util;
mod verify;
mod viz;
mod watch;
pub(crate) use bench::BenchArgs;
pub(crate) use check::{CheckArgs, CheckOutputFormat};
pub(crate) use completions::{CompletionShell, CompletionsArgs};
pub(crate) use connect::{
ConnectArgs, ConnectCommand, ConnectGenericArgs, ConnectGithubArgs, ConnectLinearArgs,
ConnectOAuthArgs,
};
pub(crate) use connector::{
ConnectorArgs, ConnectorCheckArgs, ConnectorCommand, ConnectorTestArgs,
};
pub(crate) use contracts::{
ContractsArgs, ContractsBundleArgs, ContractsCommand, ContractsHostCapabilitiesArgs,
ContractsOutputArgs,
};
pub(crate) use crystallize::{
CrystallizeArgs, CrystallizeCommand, CrystallizeIngestArgs, CrystallizeShadowArgs,
CrystallizeValidateArgs,
};
pub(crate) use doctor::DoctorArgs;
pub(crate) use dump::{
DumpConnectorMatrixArgs, DumpHighlightKeywordsArgs, DumpTriggerQuickrefArgs,
};
pub(crate) use explain::ExplainArgs;
pub(crate) use flow::{
FlowArchivistCommand, FlowArchivistScanArgs, FlowArgs, FlowCommand, FlowReplayAuditArgs,
FlowShipCommand, FlowShipWatchArgs,
};
pub(crate) use init::{InitArgs, NewArgs, ProjectTemplate};
pub(crate) use lint_fmt::{FmtArgs, PathTargetsArgs};
pub(crate) use mcp::{McpArgs, McpCommand, McpLoginArgs, McpServeArgs, McpServerRefArgs};
pub(crate) use merge_captain::{
MergeCaptainArgs, MergeCaptainAuditArgs, MergeCaptainAuditFormat, MergeCaptainBackendKind,
MergeCaptainCommand, MergeCaptainIterateArgs, MergeCaptainIterateFormat,
MergeCaptainLadderArgs, MergeCaptainLadderFormat, MergeCaptainMockCleanupArgs,
MergeCaptainMockCommand, MergeCaptainMockInitArgs, MergeCaptainMockServeArgs,
MergeCaptainMockStatusArgs, MergeCaptainMockStepArgs, MergeCaptainRunArgs,
};
pub(crate) use models::{
ModelRecommendArgs, ModelsArgs, ModelsCommand, ModelsInstallArgs, ModelsListArgs,
ModelsTestArgs,
};
pub(crate) use orchestrator::{
OrchestratorArgs, OrchestratorCommand, OrchestratorDeployArgs, OrchestratorDeployProvider,
OrchestratorDlqArgs, OrchestratorFireArgs, OrchestratorInspectArgs, OrchestratorLocalArgs,
OrchestratorLogFormat, OrchestratorQueueArgs, OrchestratorQueueCommand,
OrchestratorQueueDrainArgs, OrchestratorQueueLsArgs, OrchestratorQueuePurgeArgs,
OrchestratorRecoverArgs, OrchestratorReloadArgs, OrchestratorReplayArgs,
OrchestratorResumeArgs, OrchestratorServeArgs, OrchestratorStatsArgs, OrchestratorTenantArgs,
OrchestratorTenantCommand, OrchestratorTenantCreateArgs, OrchestratorTenantDeleteArgs,
OrchestratorTenantLsArgs, OrchestratorTenantSuspendArgs,
};
pub(crate) use package::{
AddArgs, InstallArgs, PackageArgs, PackageCacheCommand, PackageCommand, PublishArgs,
RemoveArgs, UpdateArgs,
};
pub(crate) use persona::{
PersonaArgs, PersonaCheckArgs, PersonaCommand, PersonaControlArgs, PersonaDoctorArgs,
PersonaInspectArgs, PersonaListArgs, PersonaNewArgs, PersonaSpendArgs, PersonaStatusArgs,
PersonaTemplateKind, PersonaTickArgs, PersonaTriggerArgs,
};
pub(crate) use playground::PlaygroundArgs;
pub(crate) use portal::PortalArgs;
pub(crate) use provider::{ModelInfoArgs, ProviderCatalogArgs, ProviderReadyArgs};
pub(crate) use quickstart::QuickstartArgs;
pub(crate) use run::RunArgs;
pub(crate) use runs::{EvalArgs, ReplayArgs, RunsArgs, RunsCommand};
pub(crate) use serve::{
A2aServeArgs, McpServeTransport, ServeAcpArgs, ServeArgs, ServeCommand, ServeMcpArgs,
ServeTlsMode,
};
pub(crate) use skill::{
SkillArgs, SkillCommand, SkillEndorseArgs, SkillKeyCommand, SkillKeyGenerateArgs,
SkillSignArgs, SkillTrustAddArgs, SkillTrustCommand, SkillTrustListArgs, SkillVerifyArgs,
SkillWhoSignedArgs,
};
pub(crate) use skills::{
SkillsArgs, SkillsCommand, SkillsInspectArgs, SkillsInstallArgs, SkillsListArgs,
SkillsMatchArgs, SkillsNewArgs,
};
pub(crate) use test::TestArgs;
pub(crate) use trace::{TraceArgs, TraceCommand, TraceImportArgs};
pub(crate) use trigger::{TriggerArgs, TriggerCancelArgs, TriggerCommand, TriggerReplayArgs};
pub(crate) use try_cmd::TryArgs;
#[allow(unused_imports)]
pub(crate) use trust::{
TrustArgs, TrustCommand, TrustExportArgs, TrustOutcomeArg, TrustQueryArgs, TrustTierArg,
TrustVerifyChainArgs,
};
pub(crate) use verify::VerifyArgs;
pub(crate) use viz::VizArgs;
pub(crate) use watch::WatchArgs;
use clap::{Parser, Subcommand};
#[derive(Debug, Parser)]
#[command(
name = "harn",
about = "The agent harness language",
version,
disable_help_subcommand = false,
arg_required_else_help = true
)]
pub(crate) struct Cli {
#[command(subcommand)]
pub command: Option<Command>,
}
#[derive(Debug, Subcommand)]
pub(crate) enum Command {
#[command(long_about = "\
Execute a .harn file or an inline expression.
USAGE
harn run script.harn
harn run -e 'println(\"hello\")'
harn run script.harn -- arg1 arg2 (script reads `argv` as list<string>)
CONCURRENCY
Harn supports first-class concurrency primitives:
- spawn { ... } — launch a task, return a handle
- parallel each LIST — concurrent map
- parallel settle LIST — concurrent map, collect Ok/Err
- parallel N — N-way fan-out
- with { max_concurrent: N } — cap in-flight workers
- channels, retry, select
https://harnlang.com/concurrency.html
LLM THROTTLING
Providers can be rate-limited via `rpm:` in harn.toml / providers.toml
or via `HARN_RATE_LIMIT_<PROVIDER>=N`. Rate limits control throughput
(RPM); `max_concurrent` on `parallel` caps simultaneous in-flight jobs.
SCRIPTING
LLM-readable one-pager: https://harnlang.com/docs/llm/harn-quickref.html
Human cheatsheet: https://harnlang.com/scripting-cheatsheet.html
Full docs: https://harnlang.com/
")]
Run(RunArgs),
Check(CheckArgs),
Explain(ExplainArgs),
Contracts(ContractsArgs),
Lint(PathTargetsArgs),
Fmt(FmtArgs),
Test(TestArgs),
Init(InitArgs),
New(NewArgs),
Doctor(DoctorArgs),
Quickstart(QuickstartArgs),
Connect(Box<ConnectArgs>),
Connector(ConnectorArgs),
Serve(ServeArgs),
Mcp(McpArgs),
Watch(WatchArgs),
Portal(PortalArgs),
Trigger(TriggerArgs),
Flow(FlowArgs),
Trace(TraceArgs),
Crystallize(CrystallizeArgs),
Trust(TrustArgs),
#[command(name = "trust-graph")]
TrustGraph(TrustArgs),
Verify(VerifyArgs),
Completions(CompletionsArgs),
Orchestrator(OrchestratorArgs),
Playground(PlaygroundArgs),
Runs(RunsArgs),
Replay(ReplayArgs),
Eval(EvalArgs),
Repl,
Bench(BenchArgs),
Viz(VizArgs),
Install(InstallArgs),
Add(AddArgs),
Update(UpdateArgs),
Remove(RemoveArgs),
Lock,
Package(PackageArgs),
Publish(PublishArgs),
Persona(PersonaArgs),
#[command(name = "merge-captain")]
MergeCaptain(MergeCaptainArgs),
ModelInfo(ModelInfoArgs),
Models(ModelsArgs),
ProviderCatalog(ProviderCatalogArgs),
ProviderReady(ProviderReadyArgs),
#[command(name = "try")]
Try(TryArgs),
Skills(SkillsArgs),
Skill(SkillArgs),
Version,
#[command(hide = true, name = "dump-highlight-keywords")]
DumpHighlightKeywords(DumpHighlightKeywordsArgs),
#[command(hide = true, name = "dump-trigger-quickref")]
DumpTriggerQuickref(DumpTriggerQuickrefArgs),
#[command(hide = true, name = "dump-connector-matrix")]
DumpConnectorMatrix(DumpConnectorMatrixArgs),
}
#[cfg(test)]
mod tests;