Make your OpenClaw happy, give it Honcho
83
stars
56
commits
TypeScript
primary language
Sep 1, 2026
updated
AI-native memory with dialectic reasoning for OpenClaw. Uses Honcho's peer paradigm to build and maintain separate models of the user and the agent — enabling context-aware conversations that improve over time. No local infrastructure required.
This plugin uses OpenClaw's slot system (kind: "memory") to replace the built-in memory plugins (memory-core, memory-lancedb). During setup, existing memory files can be migrated to Honcho. Workspace docs (SOUL.md, AGENTS.md, BOOTSTRAP.md) can be updated manually to reference Honcho's tools instead of the old file-based system.
openclaw plugins install @honcho-ai/openclaw-honcho
openclaw config set plugins.entries.openclaw-honcho.hooks.allowConversationAccess true
openclaw honcho setup
openclaw gateway restart
Important: The
allowConversationAccessis required to save new messages to Honcho. The plugin will log a warning at startup if this flag is missing.
openclaw honcho setup prompts for your Honcho API key, writes the config, and optionally uploads any legacy memory files to Honcho.
Use the honcho-setup skill to run migration interactively from within a chat session:
# 1. Install the skill
npx clawhub install honcho-setup
# 2. Restart OpenClaw to pick up the new skill
# 3. Install the plugin
openclaw plugins install @honcho-ai/openclaw-honcho
# 4. Restart the gateway
openclaw gateway restart
# 5. Open an agent session and invoke the skill
# The skill will prompt for your Honcho API key and run setup interactively
If you have existing workspace memory files (USER.md, MEMORY.md, IDENTITY.md, memory/, canvas/, etc.), openclaw honcho setup will detect them and offer to migrate them.
Migration is non-destructive — files are uploaded to Honcho. Originals are never deleted or moved.
User/owner files (content describes the user):
USER.md, MEMORY.mdmemory/ and canvas/ directories (treated as user content)Agent/self files (content describes the agent):
SOUL.md, IDENTITY.md, AGENTS.md, TOOLS.md, BOOTSTRAP.mdFiles are uploaded via session.uploadFile(). User/owner files go to the owner peer; agent/self files go to the agent peer (agent-{agentId}, e.g. agent-main).
The plugin ships template files in node_modules/@honcho-ai/openclaw-honcho/workspace_md/. Copy or merge these templates into your workspace for AGENTS.md, SOUL.md, and BOOTSTRAP.md. These templates reference the Honcho tools (honcho_context, honcho_search_conclusions, honcho_ask, honcho_search_messages, honcho_session) instead of the old file-based memory system.
Run openclaw honcho setup to configure interactively, or set values directly in ~/.openclaw/openclaw.json under plugins.entries["openclaw-honcho"].config.
| Key | Type | Default | Description |
|---|---|---|---|
apiKey | string | — | Honcho API key (required for managed; omit for self-hosted). |
workspaceId | string | "openclaw" | Honcho workspace ID for memory isolation. |
baseUrl | string | "https://api.honcho.dev" | API endpoint (for self-hosted instances). |
noisePatterns | string[] | built-in defaults | Patterns to skip messages. User-provided patterns are merged with built-in defaults (unless disableDefaultNoisePatterns is set). |
disableDefaultNoisePatterns | boolean | false | When true, built-in noise patterns are not applied — only noisePatterns entries are used. |
crossSessionSearch | boolean | true | Default scope for memory_search. true = results span every session the participant peer has written to; false = scope to the active session. memory_search accepts an optional crossSessionSearch boolean parameter to override this per-call. |
ownerObserveOthers | boolean | false | Whether the owner peer observes agent messages in Honcho's social model. |
Run openclaw honcho setup, enter a blank API key, and set the Base URL to your instance (e.g., http://localhost:8000).
For setting up a local Honcho server, see the Honcho local development guide.
The plugin automatically drops messages that match noise patterns before saving to Honcho. Built-in defaults filter:
HEARTBEAT_OK — assistant heartbeat acknowledgmentsA scheduled reminder has been triggered — cron reminder boilerplateExecute your Session Startup sequence now — session startup commandsQueued messages from — queued message wrapper headersAdd custom patterns via noisePatterns in your config:
{
"plugins": {
"entries": {
"openclaw-honcho": {
"config": {
"noisePatterns": ["my custom noise string"]
}
}
}
}
}
Custom patterns are merged with the built-in defaults. Each pattern matches if the message equals it or starts with it. Patterns starting with / are treated as anchored regex (e.g., /^HEARTBEAT/i).
Honcho's observeOthers controls whether a peer forms representations of other peers based on messages it witnessed in shared sessions. The agent peer always has observeOthers: true — it sees and reasons about the user's messages. The owner (user) peer defaults to observeOthers: false — modeled only from what the user said, not what the agent replied.
Set ownerObserveOthers: true to let the owner peer also observe agent messages. This gives Honcho perspective-aware memory: the owner stores conclusions about the agent based only on what it witnessed, enabling the user's representation to reflect the full conversational context rather than just their own side of it.
Map sender_id → Honcho peer ID in ~/.honcho/openclaw-peers.json (override with OPENCLAW_HONCHO_PEERS_FILE). New senders are added automatically; edit peers to alias or merge identities, then openclaw gateway restart so the gateway reloads the file.
{
"version": 1,
"defaultUnknownPolicy": "per-sender",
"peers": {
"U0EXAMPLE01": "user",
"telegram-1234567890": "user"
}
}
defaultUnknownPolicy controls how unknown sender_ids are seeded into peers:
per-sender — default for fresh installs. Each new sender becomes its own peer; the seeded peer ID is the sender_id sanitized to [A-Za-z0-9_-] and truncated to Honcho's 100-char limit.owner — default for pre-existing files missing the field (preserves legacy behavior). All unknown senders merge into the owner peer.In group chats (Discord, Slack, etc.), the plugin extracts the sender's platform ID from each inbound message and uses it directly as the Honcho peer ID. This gives every participant — humans and any other bots in the room — their own memory and representation in Honcho, rather than attributing all non-agent messages to a single generic peer.
How it works:
sender_id field from OpenClaw's "Conversation info (untrusted metadata):" block, which OpenClaw injects on every inbound message that has a known sender — including 1-on-1 DMs on platforms like Telegram, not just group chats.U07KX7DG002 becomes the Honcho peer ID directly, sanitized to [A-Za-z0-9_-]). You can alias a sender to a friendlier peer ID by editing the peers file.owner peer is used as a fallback when a message has no sender metadata at all (e.g., synthetic/system messages, or channel integrations that don't emit a Conversation info block), and — on legacy installs whose peers file uses defaultUnknownPolicy: "owner" — for any unknown sender. On fresh installs (per-sender policy) and platforms like Telegram, even DMs are attributed to the sender's own peer, not owner.agent-{id}, e.g., agent-main).honcho_context, honcho_ask, etc.) automatically resolve the correct peer for the current session.Both message attribution (capture) and context injection (before_prompt_build) read sender_id directly from the current inbound message's metadata block, so the right participant peer is used from the very first turn — and on every turn in group chats, even when the speaker changes between turns. Sessions whose channel never emits sender metadata (no Conversation info block) stay attributed to owner.
Once installed, the plugin works automatically:
/new//reset, so no conversation data is lost.honcho_context, honcho_search_conclusions, and honcho_ask to retrieve relevant context about the user. Context is injected during OpenClaw's before_prompt_build phase, ensuring accurate turn boundaries.sender_id (group chats, and DMs on platforms like Telegram), that sender gets their own peer, using their platform ID directly as the Honcho peer ID (or aliased via the peers file if configured). Each OpenClaw agent gets its own Honcho peer (default agent-{id}). The default owner peer is used as a fallback when a channel emits no sender metadata, and — on legacy installs whose peers file uses defaultUnknownPolicy: "owner" — for any unknown sender. Migration boundary: historical turns already attributed to owner (or to any prior peer ID) are not retroactively re-attributed when the plugin upgrades or when peers / defaultUnknownPolicy change. Only new inbound sender_ids create per-sender peers, so pre-existing sessions may show mixed attribution across the rollout. This gives every participant isolated, personalized memory going forward.Honcho handles all reasoning and synthesis in the cloud.
OpenClaw uses a multi-agent architecture where a primary agent can spawn subagents to handle specialized tasks. The Honcho plugin is fully aware of this hierarchy:
subagent_spawned hook to track the parent→child relationship. Each subagent session records its parentPeerId in metadata.observeMe: false, observeOthers: true). This gives Honcho visibility into the full agent tree — the parent can see what its subagents are doing without its own messages being attributed to the subagent session.The plugin manages markdown files in your workspace:
| File | Contents |
|---|---|
SOUL.md | Agent profile — OpenClaw's self-model and personality. |
IDENTITY.md | Static agent identity. Uploaded to the agent peer in Honcho during setup; the local file is not modified. |
AGENTS.md | Agent capabilities and tool descriptions. |
TOOLS.md | Tool definitions and usage instructions for the agent. |
BOOTSTRAP.md | Initial context and instructions for the agent. |
Migration: Legacy files (USER.md, MEMORY.md, memory/ directory) are uploaded to Honcho during openclaw honcho setup. Originals are preserved in place.
The plugin provides 5 tools — 3 data retrieval (cheap, no LLM) and 2 interactive (LLM-powered).
| Tool | Type | Description |
|---|---|---|
honcho_context | Data | User knowledge across all sessions. detail='card' for key facts, 'full' for broad representation. |
honcho_search_conclusions | Data | Semantic vector search over stored conclusions. Returns raw memories ranked by relevance. |
honcho_search_messages | Data | Find specific messages across all sessions. Filter by sender (user/agent/all), date, metadata. |
honcho_session | Data | Current session history and summary. Supports semantic search within the session. |
honcho_ask | Q&A | Ask Honcho a question about the user. depth='quick' for facts, 'thorough' for synthesis. |
openclaw honcho setup # Configure API key and migrate legacy files
openclaw honcho status # Show current installation and setup state
openclaw honcho ask <question> # Query Honcho about the user
openclaw honcho search <query> [-k N] [-d D] # Semantic search over memory (topK, maxDistance)
This plugin automatically exposes OpenClaw's memory_search and memory_get tools when a memory backend is configured. This allows you to use both Honcho's cloud-based memory AND local file search together.
Install QMD on your server (QMD documentation)
Configure OpenClaw to use QMD as the memory backend in ~/.openclaw/openclaw.json:
{
"memory": {
"backend": "qmd",
"qmd": {
"limits": {
"timeoutMs": 120000
}
}
}
}
qmd collection add ~/Documents/notes --name notes
qmd update
openclaw gateway restart
When QMD is configured, you get both Honcho and local file tools:
| Tool | Source | Description |
|---|---|---|
honcho_* | Honcho | Cross-session memory, user modeling, dialectic reasoning |
memory_search | QMD | Search local markdown files |
memory_get | QMD | Retrieve file content |
OpenClaw runs as a systemd service with a different PATH. Create a symlink:
sudo ln -s ~/.bun/bin/qmd /usr/local/bin/qmd
QMD operations can take a while, especially first-time queries that download ~2GB of models. Increase the timeout in ~/.openclaw/openclaw.json:
{
"memory": {
"qmd": {
"limits": {
"timeoutMs": 120000
}
}
}
}
The default timeout is 4000ms which depending on your hardware may be too short and cause errors. Setting it to 120000ms (2 minutes) gives QMD enough time. You can verify it's working in the logs:
19:09:02 tool start: memory_search
19:09:14 tool end: memory_search # 12 seconds — within the 120s limit
You can also pre-warm QMD to avoid first-run delays:
qmd query "test"
OpenClaw 2026.4.5 has a plugin loader bug where reentrant provider snapshot loads during initialization can cause hooks to register into a registry that is later discarded. The result is that agent_end (and potentially other hooks) never fire — the plugin appears loaded and no errors are logged, but no sessions are written to Honcho.
Affected versions: OpenClaw 2026.4.5 only.
Symptoms:
Honcho memory plugin loaded at startuphoncho_search_messages returns nothing after the upgrade dateFix: Update OpenClaw to 2026.4.6 or later. The upstream fixes landed in the 4.6 changelog:
Plugins/provider hooks: stop recursive provider snapshot loads from overflowing the stack during plugin initialization. (#61922, #61938, #61946, #61951)
# Update OpenClaw
npm install -g openclaw@latest
# or
brew upgrade openclaw
# Restart the gateway
openclaw gateway restart
Verified working: OpenClaw 2026.3.22 through 2026.4.4, and 2026.4.6+.
See CONTRIBUTING.md for development setup, building from source, and contribution guidelines.
TypeScript
99.8%
Make your OpenClaw happy, give it Honcho
83
stars
56
commits
TypeScript
primary language
Sep 1, 2026
updated
AI-native memory with dialectic reasoning for OpenClaw. Uses Honcho's peer paradigm to build and maintain separate models of the user and the agent — enabling context-aware conversations that improve over time. No local infrastructure required.
This plugin uses OpenClaw's slot system (kind: "memory") to replace the built-in memory plugins (memory-core, memory-lancedb). During setup, existing memory files can be migrated to Honcho. Workspace docs (SOUL.md, AGENTS.md, BOOTSTRAP.md) can be updated manually to reference Honcho's tools instead of the old file-based system.
openclaw plugins install @honcho-ai/openclaw-honcho
openclaw config set plugins.entries.openclaw-honcho.hooks.allowConversationAccess true
openclaw honcho setup
openclaw gateway restart
Important: The
allowConversationAccessis required to save new messages to Honcho. The plugin will log a warning at startup if this flag is missing.
openclaw honcho setup prompts for your Honcho API key, writes the config, and optionally uploads any legacy memory files to Honcho.
Use the honcho-setup skill to run migration interactively from within a chat session:
# 1. Install the skill
npx clawhub install honcho-setup
# 2. Restart OpenClaw to pick up the new skill
# 3. Install the plugin
openclaw plugins install @honcho-ai/openclaw-honcho
# 4. Restart the gateway
openclaw gateway restart
# 5. Open an agent session and invoke the skill
# The skill will prompt for your Honcho API key and run setup interactively
If you have existing workspace memory files (USER.md, MEMORY.md, IDENTITY.md, memory/, canvas/, etc.), openclaw honcho setup will detect them and offer to migrate them.
Migration is non-destructive — files are uploaded to Honcho. Originals are never deleted or moved.
User/owner files (content describes the user):
USER.md, MEMORY.mdmemory/ and canvas/ directories (treated as user content)Agent/self files (content describes the agent):
SOUL.md, IDENTITY.md, AGENTS.md, TOOLS.md, BOOTSTRAP.mdFiles are uploaded via session.uploadFile(). User/owner files go to the owner peer; agent/self files go to the agent peer (agent-{agentId}, e.g. agent-main).
The plugin ships template files in node_modules/@honcho-ai/openclaw-honcho/workspace_md/. Copy or merge these templates into your workspace for AGENTS.md, SOUL.md, and BOOTSTRAP.md. These templates reference the Honcho tools (honcho_context, honcho_search_conclusions, honcho_ask, honcho_search_messages, honcho_session) instead of the old file-based memory system.
Run openclaw honcho setup to configure interactively, or set values directly in ~/.openclaw/openclaw.json under plugins.entries["openclaw-honcho"].config.
| Key | Type | Default | Description |
|---|---|---|---|
apiKey | string | — | Honcho API key (required for managed; omit for self-hosted). |
workspaceId | string | "openclaw" | Honcho workspace ID for memory isolation. |
baseUrl | string | "https://api.honcho.dev" | API endpoint (for self-hosted instances). |
noisePatterns | string[] | built-in defaults | Patterns to skip messages. User-provided patterns are merged with built-in defaults (unless disableDefaultNoisePatterns is set). |
disableDefaultNoisePatterns | boolean | false | When true, built-in noise patterns are not applied — only noisePatterns entries are used. |
crossSessionSearch | boolean | true | Default scope for memory_search. true = results span every session the participant peer has written to; false = scope to the active session. memory_search accepts an optional crossSessionSearch boolean parameter to override this per-call. |
ownerObserveOthers | boolean | false | Whether the owner peer observes agent messages in Honcho's social model. |
Run openclaw honcho setup, enter a blank API key, and set the Base URL to your instance (e.g., http://localhost:8000).
For setting up a local Honcho server, see the Honcho local development guide.
The plugin automatically drops messages that match noise patterns before saving to Honcho. Built-in defaults filter:
HEARTBEAT_OK — assistant heartbeat acknowledgmentsA scheduled reminder has been triggered — cron reminder boilerplateExecute your Session Startup sequence now — session startup commandsQueued messages from — queued message wrapper headersAdd custom patterns via noisePatterns in your config:
{
"plugins": {
"entries": {
"openclaw-honcho": {
"config": {
"noisePatterns": ["my custom noise string"]
}
}
}
}
}
Custom patterns are merged with the built-in defaults. Each pattern matches if the message equals it or starts with it. Patterns starting with / are treated as anchored regex (e.g., /^HEARTBEAT/i).
Honcho's observeOthers controls whether a peer forms representations of other peers based on messages it witnessed in shared sessions. The agent peer always has observeOthers: true — it sees and reasons about the user's messages. The owner (user) peer defaults to observeOthers: false — modeled only from what the user said, not what the agent replied.
Set ownerObserveOthers: true to let the owner peer also observe agent messages. This gives Honcho perspective-aware memory: the owner stores conclusions about the agent based only on what it witnessed, enabling the user's representation to reflect the full conversational context rather than just their own side of it.
Map sender_id → Honcho peer ID in ~/.honcho/openclaw-peers.json (override with OPENCLAW_HONCHO_PEERS_FILE). New senders are added automatically; edit peers to alias or merge identities, then openclaw gateway restart so the gateway reloads the file.
{
"version": 1,
"defaultUnknownPolicy": "per-sender",
"peers": {
"U0EXAMPLE01": "user",
"telegram-1234567890": "user"
}
}
defaultUnknownPolicy controls how unknown sender_ids are seeded into peers:
per-sender — default for fresh installs. Each new sender becomes its own peer; the seeded peer ID is the sender_id sanitized to [A-Za-z0-9_-] and truncated to Honcho's 100-char limit.owner — default for pre-existing files missing the field (preserves legacy behavior). All unknown senders merge into the owner peer.In group chats (Discord, Slack, etc.), the plugin extracts the sender's platform ID from each inbound message and uses it directly as the Honcho peer ID. This gives every participant — humans and any other bots in the room — their own memory and representation in Honcho, rather than attributing all non-agent messages to a single generic peer.
How it works:
sender_id field from OpenClaw's "Conversation info (untrusted metadata):" block, which OpenClaw injects on every inbound message that has a known sender — including 1-on-1 DMs on platforms like Telegram, not just group chats.U07KX7DG002 becomes the Honcho peer ID directly, sanitized to [A-Za-z0-9_-]). You can alias a sender to a friendlier peer ID by editing the peers file.owner peer is used as a fallback when a message has no sender metadata at all (e.g., synthetic/system messages, or channel integrations that don't emit a Conversation info block), and — on legacy installs whose peers file uses defaultUnknownPolicy: "owner" — for any unknown sender. On fresh installs (per-sender policy) and platforms like Telegram, even DMs are attributed to the sender's own peer, not owner.agent-{id}, e.g., agent-main).honcho_context, honcho_ask, etc.) automatically resolve the correct peer for the current session.Both message attribution (capture) and context injection (before_prompt_build) read sender_id directly from the current inbound message's metadata block, so the right participant peer is used from the very first turn — and on every turn in group chats, even when the speaker changes between turns. Sessions whose channel never emits sender metadata (no Conversation info block) stay attributed to owner.
Once installed, the plugin works automatically:
/new//reset, so no conversation data is lost.honcho_context, honcho_search_conclusions, and honcho_ask to retrieve relevant context about the user. Context is injected during OpenClaw's before_prompt_build phase, ensuring accurate turn boundaries.sender_id (group chats, and DMs on platforms like Telegram), that sender gets their own peer, using their platform ID directly as the Honcho peer ID (or aliased via the peers file if configured). Each OpenClaw agent gets its own Honcho peer (default agent-{id}). The default owner peer is used as a fallback when a channel emits no sender metadata, and — on legacy installs whose peers file uses defaultUnknownPolicy: "owner" — for any unknown sender. Migration boundary: historical turns already attributed to owner (or to any prior peer ID) are not retroactively re-attributed when the plugin upgrades or when peers / defaultUnknownPolicy change. Only new inbound sender_ids create per-sender peers, so pre-existing sessions may show mixed attribution across the rollout. This gives every participant isolated, personalized memory going forward.Honcho handles all reasoning and synthesis in the cloud.
OpenClaw uses a multi-agent architecture where a primary agent can spawn subagents to handle specialized tasks. The Honcho plugin is fully aware of this hierarchy:
subagent_spawned hook to track the parent→child relationship. Each subagent session records its parentPeerId in metadata.observeMe: false, observeOthers: true). This gives Honcho visibility into the full agent tree — the parent can see what its subagents are doing without its own messages being attributed to the subagent session.The plugin manages markdown files in your workspace:
| File | Contents |
|---|---|
SOUL.md | Agent profile — OpenClaw's self-model and personality. |
IDENTITY.md | Static agent identity. Uploaded to the agent peer in Honcho during setup; the local file is not modified. |
AGENTS.md | Agent capabilities and tool descriptions. |
TOOLS.md | Tool definitions and usage instructions for the agent. |
BOOTSTRAP.md | Initial context and instructions for the agent. |
Migration: Legacy files (USER.md, MEMORY.md, memory/ directory) are uploaded to Honcho during openclaw honcho setup. Originals are preserved in place.
The plugin provides 5 tools — 3 data retrieval (cheap, no LLM) and 2 interactive (LLM-powered).
| Tool | Type | Description |
|---|---|---|
honcho_context | Data | User knowledge across all sessions. detail='card' for key facts, 'full' for broad representation. |
honcho_search_conclusions | Data | Semantic vector search over stored conclusions. Returns raw memories ranked by relevance. |
honcho_search_messages | Data | Find specific messages across all sessions. Filter by sender (user/agent/all), date, metadata. |
honcho_session | Data | Current session history and summary. Supports semantic search within the session. |
honcho_ask | Q&A | Ask Honcho a question about the user. depth='quick' for facts, 'thorough' for synthesis. |
openclaw honcho setup # Configure API key and migrate legacy files
openclaw honcho status # Show current installation and setup state
openclaw honcho ask <question> # Query Honcho about the user
openclaw honcho search <query> [-k N] [-d D] # Semantic search over memory (topK, maxDistance)
This plugin automatically exposes OpenClaw's memory_search and memory_get tools when a memory backend is configured. This allows you to use both Honcho's cloud-based memory AND local file search together.
Install QMD on your server (QMD documentation)
Configure OpenClaw to use QMD as the memory backend in ~/.openclaw/openclaw.json:
{
"memory": {
"backend": "qmd",
"qmd": {
"limits": {
"timeoutMs": 120000
}
}
}
}
qmd collection add ~/Documents/notes --name notes
qmd update
openclaw gateway restart
When QMD is configured, you get both Honcho and local file tools:
| Tool | Source | Description |
|---|---|---|
honcho_* | Honcho | Cross-session memory, user modeling, dialectic reasoning |
memory_search | QMD | Search local markdown files |
memory_get | QMD | Retrieve file content |
OpenClaw runs as a systemd service with a different PATH. Create a symlink:
sudo ln -s ~/.bun/bin/qmd /usr/local/bin/qmd
QMD operations can take a while, especially first-time queries that download ~2GB of models. Increase the timeout in ~/.openclaw/openclaw.json:
{
"memory": {
"qmd": {
"limits": {
"timeoutMs": 120000
}
}
}
}
The default timeout is 4000ms which depending on your hardware may be too short and cause errors. Setting it to 120000ms (2 minutes) gives QMD enough time. You can verify it's working in the logs:
19:09:02 tool start: memory_search
19:09:14 tool end: memory_search # 12 seconds — within the 120s limit
You can also pre-warm QMD to avoid first-run delays:
qmd query "test"
OpenClaw 2026.4.5 has a plugin loader bug where reentrant provider snapshot loads during initialization can cause hooks to register into a registry that is later discarded. The result is that agent_end (and potentially other hooks) never fire — the plugin appears loaded and no errors are logged, but no sessions are written to Honcho.
Affected versions: OpenClaw 2026.4.5 only.
Symptoms:
Honcho memory plugin loaded at startuphoncho_search_messages returns nothing after the upgrade dateFix: Update OpenClaw to 2026.4.6 or later. The upstream fixes landed in the 4.6 changelog:
Plugins/provider hooks: stop recursive provider snapshot loads from overflowing the stack during plugin initialization. (#61922, #61938, #61946, #61951)
# Update OpenClaw
npm install -g openclaw@latest
# or
brew upgrade openclaw
# Restart the gateway
openclaw gateway restart
Verified working: OpenClaw 2026.3.22 through 2026.4.4, and 2026.4.6+.
See CONTRIBUTING.md for development setup, building from source, and contribution guidelines.
TypeScript
99.8%