Open-source, desktop client/UI build to harness Claude Code, Codex and any other Agent accepting Agent Client Protocol. Run multiple AI coding agents side by side with rich tool visualization, MCP integrations, built-in terminal, git, browser and just about anything else you may need.
$ npx -y skills add OpenSource03/harnss --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: OpenSource03/harnss
What's inside
[!CAUTION] Harnss is currently pending a large rewrite to improve usability, performance and overall codebase into a more production ready app. I will share more info about it soon.
[!WARNING] Harnss is in early development and issues are to be expected. Please feel free to report bugs and issues in the Issues section.
Harnss is a cross-platform desktop app that gives you one interface to run, manage, and switch between AI coding agents โ Claude Code, Codex, and any ACP-compatible agent โ without losing context, sessions, or tool state.
Why Harnss?
https://github.com/user-attachments/assets/41f5bcbc-c141-4a16-b430-79f8e01d107e
Run Claude Code (via the Anthropic SDK), Codex, and ACP-compatible agents in parallel. Each session has its own state, history, and context. Switch between them instantly.
Every tool call renders as an interactive card. File edits show word-level diffs with syntax highlighting. Bash output appears inline. Subagent tasks nest with step-by-step progress tracking. File changes are summarized per turn with a dedicated Changes panel.
Connect any MCP server per project via stdio, SSE, or HTTP transport. OAuth flows are handled automatically. Server status and available tool counts are visible at a glance. Jira, Confluence, and other integrations render with dedicated UIs rather than raw JSON.
Stage, unstage, commit, and push without leaving the app. Browse branches, view commit history, and manage git worktrees. AI-generated commit messages are available from the staged diff.
Multi-tab PTY terminal backed by native shell processes. An embedded browser for opening URLs inline and providing additional context to the agent. Both panels stay mounted while you work.
Projects map to folders on disk. Spaces let you organize projects into named groups with custom icons and colors. Sessions, history, and panel settings are all scoped per project.
Browse and install agents from the ACP community registry directly in the app. Add custom agents by specifying a command, arguments, environment variables, and an icon. All configuration is managed through Settings โ no config files.
Work in plan mode to have the agent draft a plan before making any changes. Three permission levels โ Ask First, Accept Edits, Allow All โ control how much autonomy the agent has. Switch modes at any point without interrupting context.
Task agents spawned during a session continue running in the background and are tracked in a dedicated panel. Keep working in other sessions while long-running tasks complete.
Attach screenshots or images directly in the chat. An built-in annotation tool lets you draw, highlight, and mark up images with freehand strokes before sending them to the agent.
Voice input via native macOS dictation or an on-device Whisper model (no API key required). Configurable OS notifications for plan approval requests, permission prompts, agent questions, and session completion.
Full-text search across session titles and message content. Import and resume conversations previously started in the Claude Code CLI.
Harnss supports three execution engines out of the box:
| Engine | Protocol | Requirements |
|---|---|---|
| Claude Code | Anthropic Agent SDK | Claude account (subscription or API key) |
| Codex | JSON-RPC app-server | Codex CLI in PATH + OpenAI API key or ChatGPT account |
| ACP agents | Agent Client Protocol | Agent-specific (see registry) |
Claude Code and Codex are built-in. ACP agents can be installed from the ACP Agent Registry inside the app, or configured manually.
Examples of installable ACP-compatible agents:
| Agent | Command | Notes |
|---|---|---|
| Gemini CLI | gemini --experimental-acp | Experimental ACP flag |
| Goose | goose acp | |
| Docker cagent | cagent acp agent.yml | Container-based agents |
Open Settings โ ACP Agents. The Agent Store tab lets you browse and install agents from the community registry. The My Agents tab lets you create custom agents โ set the binary command, arguments, environment variables, and icon, or paste a JSON definition to auto-fill the form.
MCP servers are configured per project through the MCP Servers panel in the right-side toolbar. Supported transports: stdio, SSE, and HTTP. OAuth authentication is handled in-app with token persistence across sessions.
[!NOTE] Pre-built binaries are currently unsigned. On macOS, right-click the app and choose Open to bypass the Gatekeeper warning on first launch. On Windows, click More info โ Run anyway if Windows Defender flags the installer.
| Platform | Download |
|---|---|
| macOS (Apple Silicon) | .dmg (arm64) |
| macOS (Intel) | .dmg (x64) |
| Windows (x64) | .exe installer |
| Windows (ARM64) | .exe installer |
| Linux | .AppImage / .deb |
git clone https://github.com/OpenSource03/harnss.git
cd harnss
pnpm install
pnpm dev
pnpm dist:mac # macOS DMG (arm64 + x64)
pnpm dist:win # Windows NSIS installer (x64 + ARM64)
pnpm dist:linux # Linux AppImage + deb
CLAUDE.mdpnpm devMIT
.agents/
skills/
release/
references/
release-notes-template.md
SKILL.md
vercel-react-best-practices/
AGENTS.md
README.md
rules/
_sections.md
_template.md
advanced-event-handler-refs.md
advanced-init-once.md
advanced-use-latest.md
async-api-routes.md
async-defer-await.md
async-dependencies.md
async-parallel.md
async-suspense-boundaries.md
bundle-barrel-imports.md
bundle-conditional.md
bundle-defer-third-party.md
bundle-dynamic-imports.md
bundle-preload.md
client-event-listeners.md
client-localstorage-schema.md
client-passive-event-listeners.md
client-swr-dedup.md
js-batch-dom-css.md
js-cache-function-results.md
js-cache-property-access.md
js-cache-storage.md
js-combine-iterations.md
js-early-exit.md
js-flatmap-filter.md
js-hoist-regexp.md
js-index-maps.md
js-length-check-first.md
js-min-max-loop.md
js-set-map-lookups.md
js-tosorted-immutable.md
rendering-activity.md
rendering-animate-svg-wrapper.md
rendering-conditional-render.md
rendering-content-visibility.md
rendering-hoist-jsx.md
rendering-hydration-no-flicker.md
rendering-hydration-suppress-warning.md
rendering-resource-hints.md
rendering-script-defer-async.md
rendering-svg-precision.md
rendering-usetransition-loading.md
rerender-defer-reads.md
rerender-dependencies.md
rerender-derived-state-no-effect.md
rerender-derived-state.md
rerender-functional-setstate.md
rerender-lazy-state-init.md
rerender-memo-with-default-value.md
rerender-memo.md
rerender-move-effect-to-event.md
rerender-no-inline-components.md
rerender-simple-expression-in-memo.md
rerender-transitions.md
rerender-use-ref-transient-values.md
server-after-nonblocking.md
server-auth-actions.md
server-cache-lru.md
server-cache-react.md
server-dedup-props.md
server-hoist-static-io.md
server-parallel-fetching.md
server-serialization.md
SKILL.md
.claude/
agents/
clean-code-refactor.md
code-quality-reviewer.md
docs-researcher.md
perf-deep-audit.md
refactor-analyst.md
refactor-validator.md
typescript-type-reviewer.md
skills/
release/
references/
release-notes-template.md
SKILL.md
vercel-react-best-practices
.github/
banner.png
CODEOWNERS
FUNDING.yml
ISSUE_TEMPLATE/
bug_report.yml
config.yml
feature_request.yml
pull_request_template.md
workflows/
build.yml
.gitignore
.harnss/
worktree.json
.npmrc
AGENTS.md
build/
entitlements.mac.plist
icon.icns
icon.ico
icon.icon/
Assets/
harnss-light 2.png
harnss.pngdark.png
icon.json
icon.png
icons/
1024x1024.png
128x128.png
16x16.png
24x24.png
256x256.png
32x32.png
48x48.png
512x512.png
64x64.png
CLAUDE.md
components.json
electron/
electron-builder.config.js
src/
ipc/
acp-sessions.ts
agent-registry.ts
cc-import.ts
claude-sessions.ts
codex-sessions.ts
files.ts
folders.ts
git.ts
jira.ts
mcp.ts
projects.ts
sessions.ts
settings.ts
spaces.ts
terminal.ts
title-gen.ts
lib/
__tests__/
acp-auth.test.ts
chat-scroll.test.ts
claude-binary.test.ts
layout-constants.test.ts
logger.test.ts
notification-utils.test.ts
sdk.test.ts
session-derived-data.test.ts
terminal-history.test.ts
terminal-tabs.test.ts
updater.test.ts
acp-auth.ts
acp-utility-prompt.ts
agent-registry.ts
app-settings.ts
async-channel.ts
claude-binary.ts
claude-model-cache.ts
codex-binary.ts
codex-rpc.ts
codex-utility-prompt.ts
data-dir.ts
error-utils.ts
git-exec.ts
glass.ts
jira-client.ts
jira-oauth-store.ts
jira-store.ts
json-file-store.ts
logger.ts
mcp-oauth-flow.ts
mcp-oauth-provider.ts
mcp-oauth-store.ts
mcp-store.ts
migration.ts
posthog.ts
prerelease-check.ts
safe-send.ts
sdk.ts
terminal-history.ts
updater.ts
main.ts
preload.ts
tsconfig.json
index.html
LICENSE
package.json
pnpm-lock.yaml
pnpm-workspace.yaml
public/
icon.png
sounds/
notification.wav
README.md
scripts/
delay.js
notarize.js
test-update-local.sh
shared/
lib/
acp-helpers.ts
async-channel.ts
codex-helpers.ts
codex-rpc.ts
error-utils.ts
mcp-config.ts
session-persistence.ts
types/
acp.ts
codex-protocol/
AbsolutePathBuf.ts
AddConversationListenerParams.ts
AddConversationSubscriptionResponse.ts
AgentMessageContent.ts
AgentMessageContentDeltaEvent.ts
AgentMessageDeltaEvent.ts
AgentMessageEvent.ts
AgentMessageItem.ts
AgentReasoningDeltaEvent.ts
AgentReasoningEvent.ts
AgentReasoningRawContentDeltaEvent.ts
AgentReasoningRawContentEvent.ts
AgentReasoningSectionBreakEvent.ts
AgentStatus.ts
ApplyPatchApprovalParams.ts
ApplyPatchApprovalRequestEvent.ts
ApplyPatchApprovalResponse.ts
ArchiveConversationParams.ts
ArchiveConversationResponse.ts
AskForApproval.ts
AuthMode.ts
AuthStatusChangeNotification.ts
BackgroundEventEvent.ts
ByteRange.ts
CallToolResult.ts
CancelLoginChatGptParams.ts
CancelLoginChatGptResponse.ts
ClientInfo.ts
ClientNotification.ts
ClientRequest.ts
CodexErrorInfo.ts
CollabAgentInteractionBeginEvent.ts
CollabAgentInteractionEndEvent.ts
CollabAgentRef.ts
CollabAgentSpawnBeginEvent.ts
CollabAgentSpawnEndEvent.ts
CollabAgentStatusEntry.ts
CollabCloseBeginEvent.ts
CollabCloseEndEvent.ts
CollaborationMode.ts
CollaborationModeMask.ts
CollabResumeBeginEvent.ts
CollabResumeEndEvent.ts
CollabWaitingBeginEvent.ts
CollabWaitingEndEvent.ts
ContentItem.ts
ContextCompactedEvent.ts
ContextCompactionItem.ts
ConversationGitInfo.ts
ConversationSummary.ts
CreditsSnapshot.ts
CustomPrompt.ts
DeprecationNoticeEvent.ts
DynamicToolCallRequest.ts
ElicitationRequestEvent.ts
ErrorEvent.ts
EventMsg.ts
ExecApprovalRequestEvent.ts
ExecCommandApprovalParams.ts
ExecCommandApprovalResponse.ts
ExecCommandBeginEvent.ts
ExecCommandEndEvent.ts
ExecCommandOutputDeltaEvent.ts
ExecCommandSource.ts
ExecCommandStatus.ts
ExecOneOffCommandParams.ts
ExecOneOffCommandResponse.ts
ExecOutputStream.ts
ExecPolicyAmendment.ts
ExitedReviewModeEvent.ts
FileChange.ts
FileSystemPermissions.ts
ForcedLoginMethod.ts
ForkConversationParams.ts
ForkConversationResponse.ts
FunctionCallOutputBody.ts
FunctionCallOutputContentItem.ts
FunctionCallOutputPayload.ts
FuzzyFileSearchParams.ts
FuzzyFileSearchResponse.ts
FuzzyFileSearchResult.ts
FuzzyFileSearchSessionCompletedNotification.ts
FuzzyFileSearchSessionUpdatedNotification.ts
GetAuthStatusParams.ts
GetAuthStatusResponse.ts
GetConversationSummaryParams.ts
GetConversationSummaryResponse.ts
GetHistoryEntryResponseEvent.ts
GetUserAgentResponse.ts
GetUserSavedConfigResponse.ts
GhostCommit.ts
GitDiffToRemoteParams.ts
GitDiffToRemoteResponse.ts
GitSha.ts
HistoryEntry.ts
index.ts
InitializeCapabilities.ts
InitializeParams.ts
InitializeResponse.ts
InputItem.ts
InputModality.ts
InterruptConversationParams.ts
InterruptConversationResponse.ts
ItemCompletedEvent.ts
ItemStartedEvent.ts
ListConversationsParams.ts
ListConversationsResponse.ts
ListCustomPromptsResponseEvent.ts
ListRemoteSkillsResponseEvent.ts
ListSkillsResponseEvent.ts
LocalShellAction.ts
LocalShellExecAction.ts
LocalShellStatus.ts
LoginApiKeyParams.ts
LoginApiKeyResponse.ts
LoginChatGptCompleteNotification.ts
LoginChatGptResponse.ts
LogoutChatGptResponse.ts
MacOsAutomationValue.ts
MacOsPermissions.ts
MacOsPreferencesValue.ts
McpAuthStatus.ts
McpInvocation.ts
McpListToolsResponseEvent.ts
McpStartupCompleteEvent.ts
McpStartupFailure.ts
McpStartupStatus.ts
McpStartupUpdateEvent.ts
McpToolCallBeginEvent.ts
McpToolCallEndEvent.ts
MessagePhase.ts
ModeKind.ts
ModelRerouteEvent.ts
ModelRerouteReason.ts
NetworkAccess.ts
NetworkApprovalContext.ts
NetworkApprovalProtocol.ts
NetworkPolicyAmendment.ts
NetworkPolicyRuleAction.ts
NewConversationParams.ts
NewConversationResponse.ts
ParsedCommand.ts
PatchApplyBeginEvent.ts
PatchApplyEndEvent.ts
PatchApplyStatus.ts
PermissionProfile.ts
Personality.ts
PlanDeltaEvent.ts
PlanItem.ts
PlanItemArg.ts
PlanType.ts
Profile.ts
RateLimitSnapshot.ts
RateLimitWindow.ts
RawResponseItemEvent.ts
ReadOnlyAccess.ts
RealtimeAudioFrame.ts
RealtimeConversationClosedEvent.ts
RealtimeConversationRealtimeEvent.ts
RealtimeConversationStartedEvent.ts
RealtimeEvent.ts
ReasoningContentDeltaEvent.ts
ReasoningEffort.ts
ReasoningItem.ts
ReasoningItemContent.ts
ReasoningItemReasoningSummary.ts
ReasoningRawContentDeltaEvent.ts
ReasoningSummary.ts
RejectConfig.ts
RemoteSkillDownloadedEvent.ts
RemoteSkillSummary.ts
RemoveConversationListenerParams.ts
RemoveConversationSubscriptionResponse.ts
RequestId.ts
RequestUserInputEvent.ts
RequestUserInputQuestion.ts
RequestUserInputQuestionOption.ts
Resource.ts
ResourceTemplate.ts
ResponseItem.ts
... 713 moreFAQ
harnss is a Claude Code plugin with 1 hand-picked skill for development work, indexed on Flowy. Install it with the command on its page. It includes release. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.