Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
44b9ed2
chore: copy OpenClaw source and remove unused components
philbudden Feb 22, 2026
a1fb1d5
feat: add Phase 0 scaffold components
philbudden Feb 22, 2026
fd4cf08
chore: update pnpm workspace and add Phase 0 status doc
philbudden Feb 22, 2026
03f4f0b
chore: update devcontainer for Phase 0 development
philbudden Feb 22, 2026
f6e1d2a
fix: set moby:false for docker-in-docker on Debian trixie
philbudden Feb 22, 2026
136af09
fix: restore root package name to 'openclaw' for workspace resolution
philbudden Feb 22, 2026
d378c0b
fix: commit pnpm-lock.yaml and remove from .gitignore
philbudden Feb 22, 2026
0f56786
fix: resolve lint and format errors
philbudden Feb 22, 2026
22ccbd4
fix: add Phase 0 stubs for pi-embedded-runner submodules
philbudden Feb 22, 2026
8c83963
fix: exclude Phase 0 incompatible tests and fix Dockerfile
philbudden Feb 22, 2026
11f1e0d
fix: add IDENTITY.md and USER.md templates to git
philbudden Feb 22, 2026
7b49b97
fix: skip root-sensitive tests in CI and exclude appcast.test.ts
philbudden Feb 22, 2026
67accbf
fix: format skills-install-fallback and discovery test files
philbudden Feb 22, 2026
e6fe177
fix: pin fastembed base image, add non-root user, remove deprecated c…
philbudden Feb 23, 2026
333f17d
fix: gateway startup - use 'gateway run --allow-unconfigured', fix vo…
philbudden Feb 23, 2026
b90fac8
docs: add Matrix quick start guide and fix MATRIX_HOMESERVER env var …
philbudden Feb 23, 2026
9d17d14
docs: clarify gateway token generation in Matrix quickstart
philbudden Feb 23, 2026
821117b
fix: pass MATRIX_* env vars into gateway container
philbudden Feb 23, 2026
70b132e
fix: add missing getActiveEmbeddedRunCount stub and copy extensions b…
philbudden Feb 23, 2026
f6e2296
docs: update Matrix quickstart with config file step and E2EE trouble…
philbudden Feb 23, 2026
2b9a00d
feat: wire runEmbeddedPiAgent to runOpencodeAgent for Phase 0
philbudden Feb 23, 2026
1896957
Matrix/Phase0: fix E2EE reply delivery and deduplicate dual events
philbudden Feb 23, 2026
1c5b8c9
docs: fix formatting in matrix-quickstart.md
philbudden Feb 23, 2026
aafbf9b
docs: Restored AGENTS and PLAN documents
philbudden Feb 23, 2026
9a14304
docs: fix formatting in AGENTS.md
philbudden Feb 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
30 changes: 30 additions & 0 deletions .detect-secrets.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# detect-secrets exclusion patterns (regex)
#
# Note: detect-secrets does not read this file by default. If you want these
# applied, wire them into your scan command (e.g. translate to --exclude-files
# / --exclude-lines) or into a baseline's filters_used.

[exclude-files]
# pnpm lockfiles contain lots of high-entropy package integrity blobs.
pattern = (^|/)pnpm-lock\.yaml$
# Generated output and vendored assets.
pattern = (^|/)(dist|vendor)/
# Local config file with allowlist patterns.
pattern = (^|/)\.detect-secrets\.cfg$

[exclude-lines]
# Fastlane checks for private key marker; not a real key.
pattern = key_content\.include\?\("BEGIN PRIVATE KEY"\)
# UI label string for Anthropic auth mode.
pattern = case \.apiKeyEnv: "API key \(env var\)"
# CodingKeys mapping uses apiKey literal.
pattern = case apikey = "apiKey"
# Schema labels referencing password fields (not actual secrets).
pattern = "gateway\.remote\.password"
pattern = "gateway\.auth\.password"
# Schema label for talk API key (label text only).
pattern = "talk\.apiKey"
# checking for typeof is not something we care about.
pattern = === "string"
# specific optional-chaining password check that didn't match the line above.
pattern = typeof remote\?\.password === "string"
22 changes: 20 additions & 2 deletions .devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,25 @@
{
"name": "cortex",
"image": "mcr.microsoft.com/devcontainers/python:3",
// Pinned to 3.12 to match services/fastembed/Dockerfile (Phase 0: FastEmbed scaffold)
"image": "mcr.microsoft.com/devcontainers/python:3.12",
"features": {
// Phase 0: "Verify remaining TypeScript compiles" — package.json requires node >=22.12.0
"ghcr.io/devcontainers/features/node:1": {
"version": "22"
},
// Phase 0 exit criteria: "docker compose up → gateway starts"
// moby:false required — python:3.12 is Debian trixie which dropped moby-cli packages
"ghcr.io/devcontainers/features/docker-in-docker:2": {
"version": "latest",
"moby": false,
"dockerDashComposeVersion": "v2"
},
// Pre-existing; not required by Phase 0 — left unchanged
"ghcr.io/rio/features/chezmoi:1": {}
}
},
// Phase 0: package.json declares "packageManager": "pnpm@10.23.0";
// corepack must be enabled for pnpm to resolve, then install deps.
"postCreateCommand": "corepack enable && pnpm install",
// Phase 0 exit criteria: allow testing gateway (18789) and fastembed (8000) from the devcontainer
"forwardPorts": [18789, 8000]
}
60 changes: 60 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
.git
.worktrees
.bun-cache
.bun
.tmp
**/.tmp
.DS_Store
**/.DS_Store
*.png
*.jpg
*.jpeg
*.webp
*.gif
*.mp4
*.mov
*.wav
*.mp3
node_modules
**/node_modules
.pnpm-store
**/.pnpm-store
.turbo
**/.turbo
.cache
**/.cache
.next
**/.next
coverage
**/coverage
*.log
tmp
**/tmp

# build artifacts
dist
**/dist
apps/macos/.build
apps/ios/build
**/*.trace

# large app trees not needed for CLI build
apps/
assets/
Peekaboo/
Swabble/
Core/
Users/
vendor/

# Needed for building the Canvas A2UI bundle during Docker image builds.
# Keep the rest of apps/ and vendor/ excluded to avoid a large build context.
!apps/shared/
!apps/shared/OpenClawKit/
!apps/shared/OpenClawKit/Tools/
!apps/shared/OpenClawKit/Tools/CanvasA2UI/
!apps/shared/OpenClawKit/Tools/CanvasA2UI/**
!vendor/a2ui/
!vendor/a2ui/renderers/
!vendor/a2ui/renderers/lit/
!vendor/a2ui/renderers/lit/**
82 changes: 82 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Cortex .env example
#
# Quick start:
# 1) Copy this file to `.env`
# 2) Fill in the required values
# 3) Keep real secrets out of git
#

# -----------------------------------------------------------------------------
# Gateway Configuration
# -----------------------------------------------------------------------------
CORTEX_GATEWAY_TOKEN=change-me-to-a-long-random-token
# Example generator: openssl rand -hex 32

# Optional path overrides (defaults shown)
# CORTEX_CONFIG_DIR=./data/config
# CORTEX_WORKSPACE_DIR=./data/workspace

# -----------------------------------------------------------------------------
# Ollama Configuration (Mac Mini)
# -----------------------------------------------------------------------------
OLLAMA_BASE_URL=http://mac-mini:11434
# Or use Tailscale hostname/IP
# OLLAMA_BASE_URL=http://100.x.x.x:11434

# -----------------------------------------------------------------------------
# Matrix Configuration
# -----------------------------------------------------------------------------
MATRIX_HOMESERVER=https://matrix.example.com
MATRIX_USER_ID=@bot:example.com
MATRIX_ACCESS_TOKEN=

# Optional: Matrix device ID for E2EE
# MATRIX_DEVICE_ID=

# -----------------------------------------------------------------------------
# FastEmbed Service
# -----------------------------------------------------------------------------
FASTEMBED_PORT=8000
# Internal URL for gateway (defaults to http://fastembed:8000 in compose)
# FASTEMBED_URL=http://fastembed:8000

# -----------------------------------------------------------------------------
# Development
# -----------------------------------------------------------------------------
NODE_ENV=development
# NODE_ENV=production

# Gateway port
CORTEX_GATEWAY_PORT=18789


# Optional additional providers
# ZAI_API_KEY=...
# AI_GATEWAY_API_KEY=...
# MINIMAX_API_KEY=...
# SYNTHETIC_API_KEY=...

# -----------------------------------------------------------------------------
# Channels (only set what you enable)
# -----------------------------------------------------------------------------
# TELEGRAM_BOT_TOKEN=123456:ABCDEF...
# DISCORD_BOT_TOKEN=...
# SLACK_BOT_TOKEN=xoxb-...
# SLACK_APP_TOKEN=xapp-...

# Optional channel env fallbacks
# MATTERMOST_BOT_TOKEN=...
# MATTERMOST_URL=https://chat.example.com
# ZALO_BOT_TOKEN=...
# OPENCLAW_TWITCH_ACCESS_TOKEN=oauth:...

# -----------------------------------------------------------------------------
# Tools + voice/media (optional)
# -----------------------------------------------------------------------------
# BRAVE_API_KEY=...
# PERPLEXITY_API_KEY=pplx-...
# FIRECRAWL_API_KEY=...

# ELEVENLABS_API_KEY=...
# XI_API_KEY=... # alias for ElevenLabs
# DEEPGRAM_API_KEY=...
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
1 change: 1 addition & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
custom: ["https://github.com/sponsors/steipete"]
95 changes: 95 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: Bug report
description: Report a defect or unexpected behavior in OpenClaw.
title: "[Bug]: "
labels:
- bug
body:
- type: markdown
attributes:
value: |
Thanks for filing this report. Keep it concise, reproducible, and evidence-based.
- type: textarea
id: summary
attributes:
label: Summary
description: One-sentence statement of what is broken.
placeholder: After upgrading to <version>, <channel> behavior regressed from <prior version>.
validations:
required: true
- type: textarea
id: repro
attributes:
label: Steps to reproduce
description: Provide the shortest deterministic repro path.
placeholder: |
1. Configure channel X.
2. Send message Y.
3. Run command Z.
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: What should happen if the bug does not exist.
placeholder: Agent posts a reply in the same thread.
validations:
required: true
- type: textarea
id: actual
attributes:
label: Actual behavior
description: What happened instead, including user-visible errors.
placeholder: No reply is posted; gateway logs "reply target not found".
validations:
required: true
- type: input
id: version
attributes:
label: OpenClaw version
description: Exact version/build tested.
placeholder: <version such as 2026.2.17>
validations:
required: true
- type: input
id: os
attributes:
label: Operating system
description: OS and version where this occurs.
placeholder: macOS 15.4 / Ubuntu 24.04 / Windows 11
validations:
required: true
- type: input
id: install_method
attributes:
label: Install method
description: How OpenClaw was installed or launched.
placeholder: npm global / pnpm dev / docker / mac app
- type: textarea
id: logs
attributes:
label: Logs, screenshots, and evidence
description: Include redacted logs/screenshots/recordings that prove the behavior.
render: shell
- type: textarea
id: impact
attributes:
label: Impact and severity
description: |
Explain who is affected, how severe it is, how often it happens, and the practical consequence.
Include:
- Affected users/systems/channels
- Severity (annoying, blocks workflow, data risk, etc.)
- Frequency (always/intermittent/edge case)
- Consequence (missed messages, failed onboarding, extra cost, etc.)
placeholder: |
Affected: Telegram group users on <version>
Severity: High (blocks replies)
Frequency: 100% repro
Consequence: Agents cannot respond in threads
- type: textarea
id: additional_information
attributes:
label: Additional information
description: Add any context that helps triage but does not fit above.
placeholder: Regression started after upgrade from <previous-version>; temporary workaround is ...
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Onboarding
url: https://discord.gg/clawd
about: "New to OpenClaw? Join Discord for setup guidance in #help."
- name: Support
url: https://discord.gg/clawd
about: "Get help from the OpenClaw community on Discord in #help."
70 changes: 70 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Feature request
description: Propose a new capability or product improvement.
title: "[Feature]: "
labels:
- enhancement
body:
- type: markdown
attributes:
value: |
Help us evaluate this request with concrete use cases and tradeoffs.
- type: textarea
id: summary
attributes:
label: Summary
description: One-line statement of the requested capability.
placeholder: Add per-channel default response prefix.
validations:
required: true
- type: textarea
id: problem
attributes:
label: Problem to solve
description: What user pain this solves and why current behavior is insufficient.
placeholder: Agents cannot distinguish persona context in mixed channels, causing misrouted follow-ups.
validations:
required: true
- type: textarea
id: proposed_solution
attributes:
label: Proposed solution
description: Desired behavior/API/UX with as much specificity as possible.
placeholder: Support channels.<channel>.responsePrefix with default fallback and account-level override.
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Other approaches considered and why they are weaker.
placeholder: Manual prefixing in prompts is inconsistent and hard to enforce.
- type: textarea
id: impact
attributes:
label: Impact
description: |
Explain who is affected, severity/urgency, how often this pain occurs, and practical consequences.
Include:
- Affected users/systems/channels
- Severity (annoying, blocks workflow, etc.)
- Frequency (always/intermittent/edge case)
- Consequence (delays, errors, extra manual work, etc.)
placeholder: |
Affected: Multi-team shared channels
Severity: Medium
Frequency: Daily
Consequence: +20 minutes/day/operator and delayed alerts
validations:
required: true
- type: textarea
id: evidence
attributes:
label: Evidence/examples
description: Prior art, links, screenshots, logs, or metrics.
placeholder: Comparable behavior in X, sample config, and screenshot of current limitation.
- type: textarea
id: additional_information
attributes:
label: Additional information
description: Extra context, constraints, or references not covered above.
placeholder: Must remain backward-compatible with existing config keys.
Loading
Loading