@hesed/harness
v0.2.0
Published
Extensible CLI harness for running configurable AI coding agents
Readme
harness
Extensible CLI harness for running configurable AI coding agents
Quick start
$ ai profile add fast --provider openai --model gpt-4.1 --api openai-responses --api-key-env OPENAI_API_KEY --use
$ ai workspace add app --mode sandbox --repo https://github.com/example/app.git --clone --use
$ ai skills add review ./skills/review/SKILL.md --description "Code review workflow"
$ ai lsp list --workspace app
$ ai tools list
$ ai prompt add summarize "Inspect the project and summarize the architecture" --description "Architecture summary"
$ ai prompt run summarize --profile fast --workspace app
$ ai run "Inspect the project and summarize the architecture" --profile fast --workspace appProfiles, workspaces, and skills are stored in ~/.ai-harness/config.json by default. Set HARNESS_HOME to use a different config root, which is useful for tests or separate environments. Saved prompts are persisted separately through @hesed/plugin-lib under the CLI's standard config directory (override with AI_CONFIG_DIR).
Usage
$ npm install -g @hesed/harness
$ ai COMMAND
running command...
$ ai (--version)
@hesed/harness/0.2.0 linux-x64 node-v24.17.0
$ ai --help [COMMAND]
USAGE
$ ai COMMAND
...Commands
ai lsp listai profile add NAMEai profile listai profile show [NAME]ai profile use NAMEai prompt add NAME BODYai prompt delete NAMEai prompt edit NAME [BODY]ai prompt listai prompt rm NAMEai prompt run NAMEai prompt show NAMEai run [MESSAGE]ai skills add NAME PATHai skills listai tools call TOOLai tools listai workspace add NAMEai workspace listai workspace show [NAME]ai workspace use NAME
ai lsp list
Detect language servers for a workspace
USAGE
$ ai lsp list [-w <value>]
FLAGS
-w, --workspace=<value> Workspace name to inspect
DESCRIPTION
Detect language servers for a workspaceSee code: src/commands/lsp/list.ts
ai profile add NAME
Create or update an LLM provider profile
USAGE
$ ai profile add NAME --api
anthropic-messages|azure-openai-responses|google-generative-ai|google-vertex|mistral|openai-codex-responses|openai-c
ompletions|openai-responses --model <value> --provider <value> [--api-key-env <value>] [--base-url <value>] [--use]
ARGUMENTS
NAME Profile name
FLAGS
--api=<option> (required) Provider API adapter
<options: anthropic-messages|azure-openai-responses|google-generative-ai|google-vertex|mistral|
openai-codex-responses|openai-completions|openai-responses>
--api-key-env=<value> Environment variable containing the API key
--base-url=<value> Custom provider base URL
--model=<value> (required) Model id
--provider=<value> (required) Provider id
--use Set this profile active
DESCRIPTION
Create or update an LLM provider profileSee code: src/commands/profile/add.ts
ai profile list
List configured LLM provider profiles
USAGE
$ ai profile list
DESCRIPTION
List configured LLM provider profilesSee code: src/commands/profile/list.ts
ai profile show [NAME]
Show one LLM provider profile
USAGE
$ ai profile show [NAME]
ARGUMENTS
[NAME] Profile name. Defaults to active profile.
DESCRIPTION
Show one LLM provider profileSee code: src/commands/profile/show.ts
ai profile use NAME
Select the default LLM provider profile
USAGE
$ ai profile use NAME
ARGUMENTS
NAME Profile name
DESCRIPTION
Select the default LLM provider profileSee code: src/commands/profile/use.ts
ai prompt add NAME BODY
Create or overwrite a saved prompt
USAGE
$ ai prompt add NAME BODY [-d <value>]
ARGUMENTS
NAME Prompt name
BODY Prompt text to save
FLAGS
-d, --description=<value> Short prompt description
DESCRIPTION
Create or overwrite a saved promptSee code: src/commands/prompt/add.ts
ai prompt delete NAME
Delete a saved prompt
USAGE
$ ai prompt delete NAME
ARGUMENTS
NAME Prompt name
DESCRIPTION
Delete a saved prompt
ALIASES
$ ai prompt rmSee code: src/commands/prompt/delete.ts
ai prompt edit NAME [BODY]
Edit a saved prompt
USAGE
$ ai prompt edit NAME [BODY] [-d <value>]
ARGUMENTS
NAME Prompt name
[BODY] Replacement prompt text
FLAGS
-d, --description=<value> Replacement prompt description
DESCRIPTION
Edit a saved promptSee code: src/commands/prompt/edit.ts
ai prompt list
List saved prompts
USAGE
$ ai prompt list
DESCRIPTION
List saved promptsSee code: src/commands/prompt/list.ts
ai prompt rm NAME
Delete a saved prompt
USAGE
$ ai prompt rm NAME
ARGUMENTS
NAME Prompt name
DESCRIPTION
Delete a saved prompt
ALIASES
$ ai prompt rmai prompt run NAME
Execute a saved prompt through a selected profile and workspace
USAGE
$ ai prompt run NAME [--dry-run] [-p <value>] [-w <value>]
ARGUMENTS
NAME Prompt name
FLAGS
-p, --profile=<value> Profile name to use
-w, --workspace=<value> Workspace name to use
--dry-run Print the resolved launch context without starting Pi
DESCRIPTION
Execute a saved prompt through a selected profile and workspaceSee code: src/commands/prompt/run.ts
ai prompt show NAME
View a saved prompt
USAGE
$ ai prompt show NAME
ARGUMENTS
NAME Prompt name
DESCRIPTION
View a saved promptSee code: src/commands/prompt/show.ts
ai run [MESSAGE]
Run the Pi coding agent through a selected harness profile and workspace
USAGE
$ ai run [MESSAGE] [--dry-run] [-p <value>] [-w <value>]
ARGUMENTS
[MESSAGE] Prompt to send to the agent
FLAGS
-p, --profile=<value> Profile name to use
-w, --workspace=<value> Workspace name to use
--dry-run Print the resolved launch context without starting Pi
DESCRIPTION
Run the Pi coding agent through a selected harness profile and workspaceSee code: src/commands/run/index.ts
ai skills add NAME PATH
Register a reusable skill for the agent
USAGE
$ ai skills add NAME PATH [-d <value>]
ARGUMENTS
NAME Skill name
PATH Path to a skill file or directory
FLAGS
-d, --description=<value> Short skill description
DESCRIPTION
Register a reusable skill for the agentSee code: src/commands/skills/add.ts
ai skills list
List registered skills
USAGE
$ ai skills list
DESCRIPTION
List registered skillsSee code: src/commands/skills/list.ts
ai tools call TOOL
Call a harness tool: a built-in workspace tool or any host command
USAGE
$ ai tools call TOOL... [-w <value>]
ARGUMENTS
TOOL... Tool name: a built-in workspace tool or a host command
FLAGS
-w, --workspace=<value> Workspace name to use
DESCRIPTION
Call a harness tool: a built-in workspace tool or any host command
EXAMPLES
$ ai tools call read src/index.ts
$ ai tools call grep "needle with spaces"
$ ai tools call profile:add -- fast --provider openai --model gpt-4.1See code: src/commands/tools/call.ts
ai tools list
List the tools available to the harness: built-in workspace tools and every host command
USAGE
$ ai tools list
DESCRIPTION
List the tools available to the harness: built-in workspace tools and every host commandSee code: src/commands/tools/list.ts
ai workspace add NAME
Create or update a workspace
USAGE
$ ai workspace add NAME [--branch <value>] [--clone] [--mode local|sandbox] [--path <value>] [--repo <value>]
[--use]
ARGUMENTS
NAME Workspace name
FLAGS
--branch=<value> Git branch to clone or record
--clone Clone --repo into the workspace path
--mode=<option> [default: local] Workspace mode
<options: local|sandbox>
--path=<value> Workspace path. Defaults to cwd for local or harness sandbox root for sandbox.
--repo=<value> Git repository URL stored in workspace config
--use Set this workspace active
DESCRIPTION
Create or update a workspaceSee code: src/commands/workspace/add.ts
ai workspace list
List configured workspaces
USAGE
$ ai workspace list
DESCRIPTION
List configured workspacesSee code: src/commands/workspace/list.ts
ai workspace show [NAME]
Show one workspace
USAGE
$ ai workspace show [NAME]
ARGUMENTS
[NAME] Workspace name. Defaults to active workspace.
DESCRIPTION
Show one workspaceSee code: src/commands/workspace/show.ts
ai workspace use NAME
Select the default workspace
USAGE
$ ai workspace use NAME
ARGUMENTS
NAME Workspace name
DESCRIPTION
Select the default workspaceSee code: src/commands/workspace/use.ts
