by harnessclaw
An LLM programming assistant engine built with Go, supporting WebSocket, multi-turn dialogues, tool calling, permission control, and skill extension.
# Add to your Claude Code skills
git clone https://github.com/harnessclaw/harnessclaw-engineGuides for using ai agents skills like harnessclaw-engine.
Last scanned: 5/20/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-20T07:43:54.422Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}harnessclaw-engine is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by harnessclaw. An LLM programming assistant engine built with Go, supporting WebSocket, multi-turn dialogues, tool calling, permission control, and skill extension. It has 281 GitHub stars.
Yes. harnessclaw-engine passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/harnessclaw/harnessclaw-engine" and add it to your Claude Code skills directory (see the Installation section above).
harnessclaw-engine is primarily written in Go. It is open-source under harnessclaw on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh harnessclaw-engine against similar tools.
No comments yet. Be the first to share your thoughts!
An LLM programming assistant engine built with Go. It provides capabilities via the WebSocket protocol, supporting multi-turn dialogues, tool calling, permission control, and skill extension.
┌───────────-──┐ ┌─────────────┐ ┌─────────────┐
│ WebSocket │ │ HTTP │ │ Feishu │
│ Channel │ │ Channel │ │ Channel │
└──────┬───────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
└──────────────────┼──────────────────┘
▼
┌──────────────────┐
│Router + Middleware│ Auth / RateLimit / Logging
└────────┬─────────┘
▼
┌──────────────────┐
│ Query Engine │ 5-Phase Loop
│ (queryloop.go) │ Preprocessing → LLM Streaming → Error Recovery
└───┬──────────┬───┘ → Tool Execution → Continuation Check
│ │
┌─────▼──-─┐ ┌──▼──────────┐
│ Provider │ │ Tool System │
│ (LLM) │ │ 7 Built-in │
└───────-──┘ └─────────────┘
Dependency Direction: Channel → Router → Engine → Provider / Tool (Unidirectional, no circular dependencies)
SKILL.md files, supporting YAML frontmatter, parameter substitution, and priority overridego_rebuild/
├── cmd/server/ # Entry point & Integration tests
│ ├── main.go # 11-step startup process
│ └── main_test.go # E2E tests (build tag: integration)
├── configs/
│ └── config.yaml # Default configuration
├── internal/
│ ├── channel/ # Multi-protocol access layer (WebSocket / HTTP / Feishu)
│ ├── command/ # Command registration & Priority system
│ ├── config/ # Viper configuration management (50+ defaults)
│ ├── engine/ # Core query engine
│ │ ├── queryloop.go # QueryEngine main loop (831 lines)
│ │ ├── executor.go # Parallel/Serial tool executor
│ │ ├── compact/ # LLM context compaction
│ │ ├── context/ # System prompt assembly
│ │ └── session/ # Session state & Lifecycle
│ ├── event/ # In-process pub/sub event bus
│ ├── permission/ # 6-step permission pipeline (6 modes)
│ ├── provider/ # LLM Provider abstraction
│ │ ├── anthropic/ # Direct Anthropic SSE client
│ │ ├── bifrost/ # Multi-Provider adapter
│ │ └── retry/ # Exponential backoff + 529 overload switching
│ ├── router/ # Message routing + Middleware chain
│ ├── skill/ # SKILL.md loading & Parameter substitution
│ ├── storage/ # Storage interfaces (Memory implementation)
│ └── tool/ # Tool system
│ ├── tool.go # Tool interface + 10 extension interfaces
│ ├── registry.go # Thread-safe tool registry
│ ├── pool.go # Immutable per-query tool pool
│ └── bash/fileread/fileedit/filewrite/grep/glob/webfetch/skilltool/
├── pkg/
│ ├── types/ # Shared types (Message, Event, ToolCall, Context)
│ └── errors/ # Domain errors (16 error codes)
├── docs/
│ ├── protocols/ # WebSocket protocol specification (v1.4)
├── Makefile # Build/Run/Test/Lint
└── go.mod # Go 1.26.1
# Build
make build # Outputs to ./dist/harnessclaw-engine
# Run (using default configuration)
make run # go run ./cmd/server -config ./configs/config.yaml
# Run directly with a specific configuration file
./dist/harnessclaw-engine -config ./configs/config.yaml
# Unit tests
make test # go test ./... -v -race -count=1
# Coverage report
make test-cover # Generates coverage.html
# Integration tests (requires real LLM API)
go test -tags=integration ./cmd/server/ -v
go test -tags=integration ./internal/provider/bifrost/ -v
make fmt # Format code
make tidy # Tidy go.mod
make lint # Run linters
make vuln # Scan for vulnerabilities
make clean # Clean build artifacts
The configuration file is located at configs/config.yaml. Main configuration items:
| Configuration Item | Description | Default Value |
|---|---|---|
server.port |
HTTP server port | 8080 |
channels.websocket.port |
WebSocket port | 8081 |
channels.websocket.path |
WebSocket path | /ws |
llm.default_provider |
LLM Provider | anthropic |
llm.providers.anthropic.model |
Model name | astron-code-latest |
engine.max_turns |
Max tool calls per turn | 50 |
engine.auto_compact_threshold |
Token ratio threshold for auto-compaction | 0.8 |
session.idle_timeout |
Session idle timeout | 30m |
permission.mode |
Permission mode | default |
tools.* |
Individual tool toggles | All true |
Connection Address: ws://host:8081/ws
Client Server
│ │
│── session.create ──────────────────────>│
│<────────────────────── session.created ─│
│ │
│── user.message ────────────────────────>│
│<──────────────────── message.start ─────│
│<──── content.start / content.delta ─────│ (Streaming Text)
│<──────── tool.start / tool.end ─────────│ (Server-side Tool)
│<──────────── tool.call ─────────────────│ (Client-side Tool)
│── tool.result ─────────────────────────>│
│<──── permission.request ────────────────│ (Permission Request)
│── permission.response ─────────────────>│
│<──────────────── content.stop ──────────│
│<──────────────── message.stop ──────────│
│<──────────────── task.end ──────────────│
│ │
│── abort ───────────────────────────────>│ (Interrupt)
For detailed protocol specifications, see docs/protocols/websocket.md.
Apache-2.0 License. See LICENSE for details.