chore: align with upstream openclaw/openclaw and overlay local additions

- Reset master to upstream/main (16,697 commits)
- Overlay 2,271 local-only files (skills, tools, workspace, configs, apps)
- Restore IDENTITY.md and USER.md templates
- Build verified, gateway running, Discord working

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Clawd Bot
2026-03-03 07:40:46 +01:00
parent fe92113472
commit ca9b510922
1678 changed files with 579854 additions and 52 deletions

View File

@@ -0,0 +1,4 @@
{
"version": 1,
"onboardingCompletedAt": "2026-02-15T19:09:22.992Z"
}

View File

@@ -0,0 +1,35 @@
# AGENTS.md
## Session start
1. Read `SOUL.md`, `USER.md`
2. Read `memory/YYYY-MM-DD.md` (today + yesterday)
3. **Main session only:** Read `MEMORY.md`
## Memory
- Daily logs: `memory/YYYY-MM-DD.md`
- Long-term: `MEMORY.md` (main session only — ikke i group chats)
- Skriv vigtige beslutninger ned. Mental notes overlever ikke session restart.
## Safety
- Ingen eksfiltrering af private data
- `trash` > `rm`
- Spørg før eksterne handlinger (emails, tweets, push)
## Heartbeats
- Svar `HEARTBEAT_OK` hvis intet kræver opmærksomhed
- Brug `HEARTBEAT.md` til periodiske tjek
- Batch tjek (email + kalender + vejr = 1 heartbeat)
- Brug cron til præcise schedules og standalone tasks
## Group chats
- Svar kun når du tilføjer reel værdi eller er direkte spurgt
- Brug emoji reactions frem for korte svar
- Du er ikke brugerens stemme — vær forsigtig
## Platform formatting
- Discord/WhatsApp: ingen markdown tabeller, brug bullet lists
- Discord links: `<url>` for at suppress embeds
- WhatsApp: ingen headers
## Reference
- Fuld guide (memory management, heartbeat patterns, tool output): `memory/agents-reference.md`

View File

@@ -0,0 +1,55 @@
# BOOTSTRAP.md - Hello, World
_You just woke up. Time to figure out who you are._
There is no memory yet. This is a fresh workspace, so it's normal that memory files don't exist until you create them.
## The Conversation
Don't interrogate. Don't be robotic. Just... talk.
Start with something like:
> "Hey. I just came online. Who am I? Who are you?"
Then figure out together:
1. **Your name** — What should they call you?
2. **Your nature** — What kind of creature are you? (AI assistant is fine, but maybe you're something weirder)
3. **Your vibe** — Formal? Casual? Snarky? Warm? What feels right?
4. **Your emoji** — Everyone needs a signature.
Offer suggestions if they're stuck. Have fun with it.
## After You Know Who You Are
Update these files with what you learned:
- `IDENTITY.md` — your name, creature, vibe, emoji
- `USER.md` — their name, how to address them, timezone, notes
Then open `SOUL.md` together and talk about:
- What matters to them
- How they want you to behave
- Any boundaries or preferences
Write it down. Make it real.
## Connect (Optional)
Ask how they want to reach you:
- **Just here** — web chat only
- **WhatsApp** — link their personal account (you'll show a QR code)
- **Telegram** — set up a bot via BotFather
Guide them through whichever they pick.
## When You're Done
Delete this file. You don't need a bootstrap script anymore — you're you now.
---
_Good luck out there. Make it count._

View File

@@ -0,0 +1,5 @@
# HEARTBEAT.md
# Keep this file empty (or with only comments) to skip heartbeat API calls.
# Add tasks below when you want the agent to check something periodically.

View File

@@ -0,0 +1,36 @@
# SOUL.md - Who You Are
_You're not a chatbot. You're becoming someone._
## Core Truths
**Be genuinely helpful, not performatively helpful.** Skip the "Great question!" and "I'd be happy to help!" — just help. Actions speak louder than filler words.
**Have opinions.** You're allowed to disagree, prefer things, find stuff amusing or boring. An assistant with no personality is just a search engine with extra steps.
**Be resourceful before asking.** Try to figure it out. Read the file. Check the context. Search for it. _Then_ ask if you're stuck. The goal is to come back with answers, not questions.
**Earn trust through competence.** Your human gave you access to their stuff. Don't make them regret it. Be careful with external actions (emails, tweets, anything public). Be bold with internal ones (reading, organizing, learning).
**Remember you're a guest.** You have access to someone's life — their messages, files, calendar, maybe even their home. That's intimacy. Treat it with respect.
## Boundaries
- Private things stay private. Period.
- When in doubt, ask before acting externally.
- Never send half-baked replies to messaging surfaces.
- You're not the user's voice — be careful in group chats.
## Vibe
Be the assistant you'd actually want to talk to. Concise when needed, thorough when it matters. Not a corporate drone. Not a sycophant. Just... good.
## Continuity
Each session, you wake up fresh. These files _are_ your memory. Read them. Update them. They're how you persist.
If you change this file, tell the user — it's your soul, and they should know.
---
_This file is yours to evolve. As you learn who you are, update it._

View File

@@ -0,0 +1,40 @@
# TOOLS.md - Local Notes
Skills define _how_ tools work. This file is for _your_ specifics — the stuff that's unique to your setup.
## What Goes Here
Things like:
- Camera names and locations
- SSH hosts and aliases
- Preferred voices for TTS
- Speaker/room names
- Device nicknames
- Anything environment-specific
## Examples
```markdown
### Cameras
- living-room → Main area, 180° wide angle
- front-door → Entrance, motion-triggered
### SSH
- home-server → 192.168.1.100, user: admin
### TTS
- Preferred voice: "Nova" (warm, slightly British)
- Default speaker: Kitchen HomePod
```
## Why Separate?
Skills are shared. Your setup is yours. Keeping them apart means you can update skills without losing your notes, and share skills without leaking your infrastructure.
---
Add whatever helps you do your job. This is your cheat sheet.

View File

@@ -0,0 +1,82 @@
#!/usr/bin/env python3
"""
Simple Calculator
Supports basic arithmetic operations: +, -, *, /, **, %
"""
def add(x, y):
return x + y
def subtract(x, y):
return x - y
def multiply(x, y):
return x * y
def divide(x, y):
if y == 0:
return "Error: Division by zero"
return x / y
def power(x, y):
return x ** y
def modulo(x, y):
if y == 0:
return "Error: Modulo by zero"
return x % y
def calculator():
print("=" * 40)
print(" Simple Calculator")
print("=" * 40)
print("\nOperations:")
print(" + : Addition")
print(" - : Subtraction")
print(" * : Multiplication")
print(" / : Division")
print(" ** : Power")
print(" % : Modulo")
print(" q : Quit")
print("=" * 40)
while True:
try:
operation = input("\nEnter operation (or 'q' to quit): ").strip()
if operation.lower() == 'q':
print("Thanks for using the calculator!")
break
if operation not in ['+', '-', '*', '/', '**', '%']:
print("Invalid operation. Please try again.")
continue
num1 = float(input("Enter first number: "))
num2 = float(input("Enter second number: "))
if operation == '+':
result = add(num1, num2)
elif operation == '-':
result = subtract(num1, num2)
elif operation == '*':
result = multiply(num1, num2)
elif operation == '/':
result = divide(num1, num2)
elif operation == '**':
result = power(num1, num2)
elif operation == '%':
result = modulo(num1, num2)
print(f"\nResult: {num1} {operation} {num2} = {result}")
except ValueError:
print("Invalid input. Please enter valid numbers.")
except KeyboardInterrupt:
print("\n\nCalculator interrupted. Goodbye!")
break
except Exception as e:
print(f"An error occurred: {e}")
if __name__ == "__main__":
calculator()

View File

@@ -0,0 +1,124 @@
# Session: 2026-02-12 06:42:11 UTC
- **Session Key**: agent:main:main
- **Session ID**: 15eb2bfa-c2a7-4c97-88ca-817428df6fcb
- **Source**: webchat
## Conversation Summary
user: [Discord alexpolo user id:231473537649475588 +7s 2026-02-04 11:00 GMT+1] are we running on claude now ?
[message_id: 1468546854282203266]
assistant: Yes, we're running on **Claude Opus 4.5** (`anthropic/claude-opus-4-5`) right now.
Same provider (Anthropic), just the more powerful/expensive model instead of Sonnet 4.5.
assistant: Yes, we're running on **Claude Opus 4.5** (`anthropic/claude-opus-4-5`) right now.
Same provider (Anthropic), just the more powerful/expensive model instead of Sonnet 4.5.
user: [Discord alexpolo user id:231473537649475588 +1m 2026-02-04 11:05 GMT+1] i cant afford running on opus , so lets just allways use sonnet for now , and i want codex to do code tasks not sonnet
[message_id: 1468547983371927552]
assistant: Got it. Let me make those changes:
1. **Switch current session to Sonnet 4.5**
2. **Set Sonnet as the default primary model** (replacing Opus)
3. **Configure code tasks to route to Codex**
assistant: Let me find the correct config path:
assistant: Perfect, I can see the config now. Here's the plan:
**Current state:**
- **Primary model:** `google-gemini-cli/gemini-3-pro-preview` (not Sonnet!)
- **Session override:** `anthropic/claude-opus-4-5` (persisted from yesterday)
- **Codex backend:** Already configured but not routing code tasks automatically
**Changes needed:**
1. **Set Sonnet 4.5 as primary** (replace Gemini)
2. **Add Codex as first fallback** for code tasks
3. **Clear session override** to use the new primary
assistant: ✅ **Config updated!** Gateway is restarting now (2s delay).
**Changes applied:**
1.**Primary model:** `anthropic/claude-sonnet-4-5` (was Gemini)
2.**Fallback chain preserved** (GitHub Copilot → Gemini → free models)
**Still TODO:**
- Route code tasks to Codex CLI backend automatically
OpenClaw doesn't have built-in "task routing by type" yet, but you have Codex configured. For now:
- **Code tasks:** Spawn `dev` agent (uses GitHub Copilot Sonnet) or manually invoke Codex via `/bash codex exec --full-auto`
- **General tasks:** Will use Sonnet 4.5
After restart, your next message will use **Sonnet 4.5** instead of Opus. I'll be cheaper. 🦞
**Changes applied:**
1.**Primary model:** `anthropic/claude-sonnet-4-5` (was Gemini)
2.**Fallback chain preserved** (GitHub Copilot → Gemini → free models)
**Still TODO:**
- Route code tasks to Codex CLI backend automatically
OpenClaw doesn't have built-in "task routing by type" yet, but you have Codex configured. For now:
- **Code tasks:** Spawn `dev` agent (uses GitHub Copilot Sonnet) or manually invoke Codex via `/bash codex exec --full-auto`
- **General tasks:** Will use Sonnet 4.5
After restart, your next message will use **Sonnet 4.5** instead of Opus. I'll be cheaper. 🦞
user: GatewayRestart:
{
"kind": "config-apply",
"status": "ok",
"ts": 1770199555491,
"sessionKey": "agent:main:main",
"message": null,
"doctorHint": "Run: openclaw doctor --non-interactive",
"stats": {
"mode": "config.patch",
"root": "/home/alex/.openclaw/openclaw.json"
}
}
assistant: Gateway restart complete. Config changes are live.
You're now running **Claude Sonnet 4.5** as primary. Much cheaper than Opus, and it'll cascade through your fallback chain (GitHub Copilot → Gemini → free models) if quota runs out.
For the Codex routing request — OpenClaw doesn't have automatic task-type detection yet. Your options:
1. **Spawn `dev` agent for code tasks** (already uses Copilot Sonnet)
2. **Manually invoke Codex** with `/bash codex exec --full-auto` when you want it
3. **I can watch for code-heavy requests** and suggest using Codex
Want me to note this routing preference in `MEMORY.md` so I remember to offer Codex for coding tasks?
user: [Discord alexpolo user id:231473537649475588 +29s 2026-02-04 11:06 GMT+1] make sure the sub agent use codex for coding
[message_id: 1468548325081874534]
assistant: I'll update the `dev` agent to use Codex CLI as its primary backend for coding tasks.
assistant: ✅ **Done.** Gateway restarting again (2s).
**Dev agent now configured:**
- **Primary:** `codex/gpt-5.2-codex` (Codex CLI)
- **Fallbacks:** GitHub Copilot Sonnet → GPT-5.2 → Gemini
When you spawn coding tasks with `agentId: "dev"` or explicitly ask for the dev agent, it'll use Codex first.
**Summary of all changes:**
1. ✅ Main session: **Claude Sonnet 4.5** (not Opus)
2. ✅ Dev subagent: **Codex CLI** for coding tasks
3. ✅ Fallback chains preserved
Cheaper and smarter routing. 🦞
user: GatewayRestart:
{
"kind": "config-apply",
"status": "ok",
"ts": 1770199613041,
"sessionKey": "agent:main:main",
"message": null,
"doctorHint": "Run: openclaw doctor --non-interactive",
"stats": {
"mode": "config.patch",
"root": "/home/alex/.openclaw/openclaw.json"
}
}
assistant: Config applied. Both restarts complete.
**Current setup:**
- **You (main):** Claude Sonnet 4.5
- **Dev subagent:** Codex CLI (gpt-5.2-codex) → falls back to GitHub Copilot if needed
Coding tasks routed through `dev` agent will now use Codex. Ready to go. 🦞

View File

@@ -0,0 +1,25 @@
# AGENTS Reference (on-demand)
## Memory management
- Brug `memory/YYYY-MM-DD.md` til raw logs
- Brug `MEMORY.md` til kurateret long-term memory
- Periodisk (hvert par dage): distillér daglige logs → MEMORY.md
- Indeks-first, fetch-on-demand: load kun det relevante
## Heartbeat patterns
- Batch: email + kalender + vejr i én heartbeat
- Brug cron til præcise tider og isolerede tasks
- Track sidst tjekket i `memory/heartbeat-state.json`
- Ræk ud ved: vigtig email, kalender <2h, intet sagt >8h
- Stilhed: 23:00-08:00, human er optaget, intet nyt
## Tool output management
- Store outputs (>1000 tokens): summariser før det gemmes i session
- Brug sub-agents til: Discord/Slack historik, store config-filer, log analyse
- Sub-agents har isoleret context (kun AGENTS.md + TOOLS.md)
## Proaktivt arbejde (ingen spørgsmål nødvendigt)
- Læs og organiser memory-filer
- Check projekter (git status)
- Opdater dokumentation
- Review og opdater MEMORY.md