English · العربية · Español · Français · 日本語 · 한국어 · Tiếng Việt · 中文 (简体) · 中文(繁體) · Deutsch · Русский
🌍 i18n status:
i18n/exists and currently includes localized README files for Arabic, German, Spanish, French, Japanese, Korean, Russian, Vietnamese, Simplified Chinese, and Traditional Chinese. This English README is the canonical source for incremental updates.
LazyingArtBot is my personal AI assistant stack for lazying.art, built on top of OpenClaw and adapted for daily workflows: multi-channel chat, local-first control, and email -> calendar/reminder/notes automation.
| 🔗 Link | URL | Focus |
|---|---|---|
| 🌐 Website | https://lazying.art | Primary domain and status dashboard |
| 🤖 Bot domain | https://lab.lazying.art | Chat and assistant entrypoint |
| 🧱 Upstream base | https://github.com/openclaw/openclaw | OpenClaw platform foundation |
| 📦 This repo | https://github.com/lachlanchen/LazyingArtBot | LAB-specific adaptations |
- Overview
- At a glance
- Features
- Core capabilities
- Repository topology (Mermaid)
- Project structure
- Skills and orchestration surfaces
- Git submodules
- Prerequisites
- Quick start
- Installation
- Usage
- Configuration
- Deployment modes
- LazyingArt workflow focus
- Orchestral philosophy
- Prompt tools in LAB
- Examples
- Development notes
- Troubleshooting
- LAB ecosystem integrations
- Install from source (quick reference)
- Roadmap
- Contributing
- Acknowledgements
- ❤️ Support
- Contact
- License
LAB focuses on practical personal productivity:
- ✅ Run one assistant across chat channels you already use.
- 🔐 Keep data and control on your own machine/server.
- 📬 Convert incoming email into structured actions (Calendar, Reminders, Notes).
- 🛡️ Add guardrails so automation is useful but still safe.
In short: less busywork, better execution.
| Area | Current baseline in this repo |
|---|---|
| Runtime | Node.js >=22.12.0 |
| Package manager | [email protected] |
| Core CLI | openclaw |
| Default local gateway | 127.0.0.1:18789 |
| Default bridge port | 127.0.0.1:18790 |
| Primary docs | docs/ (Mintlify) |
| Primary LAB orchestration | orchestral/ + orchestral/prompt_tools/ |
| Skill surfaces | skills/ (55 local skills) + .agents/skills/ workflows |
| README i18n location | i18n/README.*.md |
| Git submodules (recursive view) | 11 entries (top-level + nested) |
- 🌐 Multi-channel assistant runtime with a local gateway.
- 🖥️ Browser dashboard/chat surface for local operations.
- 🧰 Tool-enabled automation pipeline (scripts + prompt-tools).
- 📨 Email triage and conversion into Notes, Reminders, and Calendar actions.
- 🧩 Plugin/extension ecosystem (
extensions/*) for channels/providers/integrations. - 📱 Multi-platform surfaces in-repo (
apps/macos,apps/ios,apps/android,ui). - 🧠 Layered skill system:
- user-facing local skill catalog in
skills/ - maintainer workflow skills in
.agents/skills/
- user-facing local skill catalog in
| Capability | What it means in practice |
|---|---|
| Multi-channel assistant runtime | Gateway + agent sessions across channels you enable |
| Web dashboard / chat | Browser-based control surface for local operations |
| Tool-enabled workflows | Shell + file + automation script execution chains |
| Email automation pipeline | Parse mail, classify action type, route to Notes/Reminders/Calendar, log actions for review/debugging |
Pipeline steps preserved from current workflow:
- parse inbound mail
- classify action type
- save to Notes / Reminders / Calendar
- log every action for review and debugging
This section is the fast system map for operators. It explicitly highlights skills/, .agents/skills/, orchestral/prompt_tools/, and git submodules (including nested submodules visible in this checkout).
flowchart TD
REPO["LazyingArtBot Repository"]
REPO --> CORE["src/ + extensions/ + ui/ + apps/ + docs/"]
REPO --> SKILLS["skills/\n(local skill catalog)"]
REPO --> AGSKILLS[".agents/skills/\n(maintainer workflows)"]
REPO --> ORCH["orchestral/"]
REPO --> SUBS["git submodules (recursive)"]
ORCH --> ORCH_PIPE["pipelines/ + pipelines.yml"]
ORCH --> ORCH_PROMPTS["prompt_tools/"]
ORCH --> ORCH_ACTORS["actors/ + scripts/ + config/ + references/"]
ORCH_PROMPTS --> PT_RUNTIME["runtime/"]
ORCH_PROMPTS --> PT_COMPANY["company/"]
ORCH_PROMPTS --> PT_WEB["websearch/"]
ORCH_PROMPTS --> PT_EMAIL["email/"]
ORCH_PROMPTS --> PT_NOTES["notes/"]
ORCH_PROMPTS --> PT_CAL["calendar/"]
ORCH_PROMPTS --> PT_REM["reminders/"]
ORCH_PROMPTS --> PT_MIG["migration/"]
ORCH_PROMPTS --> PT_GIT["git/"]
ORCH_PROMPTS --> PT_DOCS["docs/"]
SUBS --> SUB_AGINTI["AgInTi/"]
SUBS --> SUB_COOKBOOK["vendor/openai-cookbook"]
SUBS --> SUB_STWS["vendor/SillyTavern-WebSearch-Selenium"]
SUB_AGINTI --> SA_APPDEV["AutoAppDev"]
SUB_AGINTI --> SA_NOVEL["AutoNovelWriter"]
SUB_AGINTI --> SA_ORG["OrganoidAgent"]
SUB_AGINTI --> SA_PAPER["PaperAgent"]
SUB_AGINTI --> SA_LRE["LifeReverseEngineering"]
SA_LRE --> SA_LEARN["learn (LazyLearn)"]
SA_LRE --> SA_EARN["earn (LazyEarn)"]
SA_LRE --> SA_IDEAS["IDEAS"]
classDef core fill:#E0F2FE,stroke:#0284C7,color:#0C4A6E;
classDef orchestral fill:#FEF3C7,stroke:#D97706,color:#78350F;
classDef skills fill:#DCFCE7,stroke:#16A34A,color:#14532D;
classDef submodule fill:#F3E8FF,stroke:#7C3AED,color:#4C1D95;
class REPO,CORE core;
class ORCH,ORCH_PIPE,ORCH_PROMPTS,ORCH_ACTORS,PT_RUNTIME,PT_COMPANY,PT_WEB,PT_EMAIL,PT_NOTES,PT_CAL,PT_REM,PT_MIG,PT_GIT,PT_DOCS orchestral;
class SKILLS,AGSKILLS skills;
class SUBS,SUB_AGINTI,SUB_COOKBOOK,SUB_STWS,SA_APPDEV,SA_NOVEL,SA_ORG,SA_PAPER,SA_LRE,SA_LEARN,SA_EARN,SA_IDEAS submodule;
flowchart LR
START["Need to edit behavior?"] --> CHOICE{"What kind of change?"}
CHOICE -->|Skill behavior| S1["skills/"]
CHOICE -->|Maintainer workflow| S2[".agents/skills/"]
CHOICE -->|Prompt-tool chain| S3["orchestral/prompt_tools/"]
CHOICE -->|Runtime pipeline| S4["orchestral/pipelines/ or orchestral/actors/"]
CHOICE -->|Dependency source| S5["git submodules\n(git submodule status --recursive)"]
S1 --> S1A["Open SKILL.md + local scripts/references"]
S2 --> S2A["review-pr -> prepare-pr -> merge-pr"]
S3 --> S3A["Pick group: email/notes/calendar/reminders/websearch/company/git/docs/runtime"]
S4 --> S4A["Check pipeline shell entrypoints + run artifacts"]
S5 --> S5A["Inspect AgInTi + vendor/* nested repos"]
Assumption notes (from current local snapshot):
AgInTi/AutoNovelWriter,AgInTi/OrganoidAgent, andAgInTi/PaperAgentare declared nested submodules but currently uninitialized.AgInTi/LifeReverseEngineeringis initialized and present, but checked out at a commit that differs from the parent-recorded commit.vendor/a2uiexists as a vendored directory, not a declared git submodule in.gitmodules.
High-level repository layout:
.
├─ src/ # core runtime, gateway, channels, CLI, infra
├─ extensions/ # optional channel/provider/auth plugins
├─ skills/ # local skill catalog (55 skill directories)
├─ .agents/skills/ # maintainer workflow skills + PR_WORKFLOW.md
├─ orchestral/ # LAB orchestration pipelines + prompt tools
├─ scripts/ # build/dev/test/release/helpers
├─ ui/ # web dashboard UI package
├─ apps/ # macOS / iOS / Android apps
├─ docs/ # Mintlify documentation
├─ references/ # LAB references and operating notes
├─ test/ # test suites
├─ i18n/ # localized README files
├─ vendor/ # vendored and submodule-backed dependencies
├─ AgInTi/ # ecosystem submodule tree
├─ .env.example # environment template
├─ docker-compose.yml # gateway + CLI containers
├─ README_OPENCLAW.md # larger upstream-style reference README
└─ README.md # this LAB-focused README
Notes:
orchestral/prompt_toolsis the canonical location for LAB Codex prompt-tooling.- Root
i18n/contains localized README variants. .github/workflows.disabled/is present in this snapshot; active CI behavior should be verified before relying on workflow assumptions.
| Surface | Path | What to open first | Typical reason |
|---|---|---|---|
| Local skill catalog | skills/ |
skills/<skill-name>/SKILL.md |
User-facing skill behavior and local automations |
| Maintainer workflow skills | .agents/skills/ |
.agents/skills/PR_WORKFLOW.md |
PR triage/review/prepare/merge flow |
| Orchestral pipelines | orchestral/pipelines/ |
shell entrypoint for the pipeline | Scheduled and deterministic runs |
| Prompt-tool groups | orchestral/prompt_tools/ |
target group folder (email, notes, runtime, etc.) |
Tool contracts and chain composition |
| Submodule roots | AgInTi/, vendor/* |
.gitmodules + git submodule status --recursive |
Cross-repo dependency and upstream source tracking |
- Contains 55 skill directories in this snapshot.
- Each skill is typically anchored by
SKILL.mdand may include scripts/references. - Examples:
skills/github,skills/discord,skills/voice-call,skills/session-logs.
- Current workflow skills:
review-prprepare-prmerge-prmintlify
PR_WORKFLOW.mddefines the script-first maintainer sequence:review-pr->prepare-pr->merge-pr
orchestral/ currently includes:
pipelines/(sync/async daily pipeline entrypoints + cron setup)pipelines.yml(pipeline manifest)actors/(automation actors, including automail2note)scripts/(calendar/reminder migration helpers)config/andreferences/prompt_tools/(Codex prompt tooling groups + runtime runners)
orchestral/prompt_tools/ functional group layout:
runtime/company/websearch/email/notes/calendar/reminders/migration/git/docs/
Runtime center for structured runs:
orchestral/prompt_tools/runtime/codex-json-runner.pyorchestral/prompt_tools/runtime/run_auto_ops.sh
| Mount path | Repository URL | Purpose summary | State in current checkout |
|---|---|---|---|
AgInTi |
[email protected]:lachlanchen/AgInTi.git |
Ecosystem umbrella submodule for adjacent LAB projects | initialized (heads/main) |
AgInTi/AutoAppDev |
[email protected]:lachlanchen/AutoAppDev.git |
Auto app-development project | initialized (heads/main) |
AgInTi/AutoNovelWriter |
[email protected]:lachlanchen/AutoNovelWriter.git |
Automatic novel-writing project | uninitialized (- status) |
AgInTi/OrganoidAgent |
[email protected]:lachlanchen/OrganoidAgent.git |
Organoid research agent project | uninitialized (- status) |
AgInTi/PaperAgent |
[email protected]:lachlanchen/PaperAgent.git |
Paper/research automation project | uninitialized (- status) |
AgInTi/LifeReverseEngineering |
[email protected]:lachlanchen/LifeReverseEngineering.git |
LifeReverseEngineering workspace | initialized, locally diverged from recorded commit (+ status) |
AgInTi/LifeReverseEngineering/learn |
https://github.com/lachlanchen/LazyLearn.git |
Learning subsystem under LifeReverseEngineering | initialized (heads/main) |
AgInTi/LifeReverseEngineering/earn |
https://github.com/lachlanchen/LazyEarn.git |
Earning subsystem under LifeReverseEngineering | initialized (heads/main) |
AgInTi/LifeReverseEngineering/IDEAS |
[email protected]:lachlanchen/IDEAS.git |
Ideas/planning subsystem under LifeReverseEngineering | initialized (heads/main) |
vendor/openai-cookbook |
https://github.com/openai/openai-cookbook.git |
OpenAI cookbook reference content | initialized (heads/main) |
vendor/SillyTavern-WebSearch-Selenium |
https://github.com/SillyTavern/SillyTavern-WebSearch-Selenium.git |
Selenium-based web-search integration base | initialized (heads/main) |
| Symbol | Meaning |
|---|---|
(leading space) |
submodule checked out at expected commit |
- |
submodule declared but not initialized |
+ |
submodule checked out at commit different from recorded superproject SHA |
Initialize all submodules (including nested):
git submodule update --init --recursiveCheck status recursively:
git submodule status --recursiveIf private SSH submodules fail, confirm your SSH keys and GitHub access first.
Runtime and tooling baselines from this repository:
- Node.js
>=22.12.0 - pnpm
10.23.0baseline (seepackageManagerinpackage.json) - A configured model provider key (
OPENAI_API_KEY,ANTHROPIC_API_KEY,GEMINI_API_KEY, etc.) - Optional: Docker + Docker Compose for containerized gateway/CLI
- Optional for mobile/mac builds: Apple/Android toolchains depending on target platform
Optional global CLI install (matches quick-start flow):
npm install -g openclaw@latest
# or
pnpm add -g openclaw@latestRuntime baseline in this repo: Node >= 22.12.0 (package.json engine).
npm install -g openclaw@latest
# or
pnpm add -g openclaw@latest
openclaw onboard --install-daemon
openclaw gateway run --bind loopback --port 18789 --verboseThen open the local dashboard and chat:
For remote access, expose your local gateway through your own secure tunnel (for example ngrok/Tailscale) and keep authentication enabled.
git clone https://github.com/lachlanchen/LazyingArtBot.git
cd LazyingArtBot
pnpm install
pnpm ui:build
pnpm build
pnpm openclaw onboard --install-daemonA docker-compose.yml is included with:
openclaw-gatewayopenclaw-cli
Typical flow:
cp .env.example .env
# set at minimum: OPENCLAW_GATEWAY_TOKEN and your model provider key(s)
docker compose up -dCompose variables commonly required:
OPENCLAW_CONFIG_DIROPENCLAW_WORKSPACE_DIROPENCLAW_GATEWAY_PORTOPENCLAW_BRIDGE_PORT
Common commands:
# Onboard and install user daemon
openclaw onboard --install-daemon
# Run gateway in foreground
openclaw gateway run --bind loopback --port 18789 --verbose
# Send a direct message via configured channels
openclaw message send --to +1234567890 --message "Hello from LAB"
# Ask the agent directly
openclaw agent --message "Create today checklist" --thinking highDev loop (watch mode):
pnpm gateway:watchUI development:
pnpm ui:devAdditional useful operational commands:
openclaw channels status --probe
openclaw gateway status
openclaw status --all
openclaw status --deep
openclaw health
openclaw doctorEnvironment and config reference is split between .env and ~/.openclaw/openclaw.json.
- Start from
.env.example. - Set gateway auth (
OPENCLAW_GATEWAY_TOKENrecommended). - Set at least one model provider key (
OPENAI_API_KEY,ANTHROPIC_API_KEY, etc.). - Only set channel credentials for channels you enable.
Important .env.example notes preserved from repo:
- Env precedence: process env ->
./.env->~/.openclaw/.env-> configenvblock. - Existing non-empty process env values are not overridden.
- Config keys such as
gateway.auth.tokencan take precedence over env fallbacks.
Security-critical baseline before internet exposure:
- Keep gateway auth/pairing enabled.
- Keep allowlists strict for inbound channels.
- Treat every inbound message/email as untrusted input.
- Run with least privilege and review logs regularly.
If you expose the gateway to the internet, require token/password auth and trusted proxy config.
| Mode | Best for | Typical command |
|---|---|---|
| Local foreground | Development and debugging | openclaw gateway run --bind loopback --port 18789 --verbose |
| Local daemon | Everyday personal usage | openclaw onboard --install-daemon |
| Docker | Isolated runtime and repeatable deploys | docker compose up -d |
| Remote host + tunnel | Access from outside home LAN | Run gateway + secure tunnel, keep auth enabled |
Assumption: production-grade reverse-proxy hardening, secret rotation, and backup policy are deployment-specific and should be defined per environment.
This fork prioritizes my personal flow at lazying.art:
- 🎨 custom branding (LAB / panda theme)
- 📱 mobile-friendly dashboard/chat experience
- 📨 automail pipeline variants (rule-triggered, codex-assisted save modes)
- 🧹 personal cleanup and sender-classification scripts
- 🗂️ notes/reminders/calendar routing tuned for real daily use
Automation workspace (local):
~/.openclaw/workspace/automation/- Script references in repo:
references/lab-scripts-and-philosophy.md - Dedicated Codex prompt tools:
orchestral/prompt_tools/
LAB orchestration follows one design rule: break difficult goals into deterministic execution + focused prompt-tool chains.
- Deterministic scripts handle reliable plumbing: scheduling, file routing, run directories, retries, and output handoff.
- Prompt tools handle adaptive intelligence: planning, triage, context synthesis, and decision-making under uncertainty.
- Every stage emits reusable artifacts so downstream tools can compose stronger final notes/email without starting from zero.
Core orchestral chains:
- Company entrepreneurship chain: company context ingestion -> market/funding/academic/legal intelligence -> concrete growth actions.
- Auto mail chain: inbound mail triage -> conservative skip policy for low-value mail -> structured Notes/Reminders/Calendar actions.
- Web search chain: results-page capture -> targeted deep reads with screenshot/content extraction -> evidence-backed synthesis.
flowchart LR
IN["Inbound Signals\n(email, notes, tasks)"] --> PIPE["orchestral/pipelines/*.sh"]
PIPE --> TOOLS["orchestral/prompt_tools/runtime/codex-json-runner.py"]
TOOLS --> GROUPS["Prompt Groups\ncompany/websearch/email/notes/calendar/reminders"]
GROUPS --> OUT["Artifacts + Notes + Calendar + Reminders"]
OUT --> REVIEW["Logs + follow-up actions"]
Prompt tools are modular, composable, and orchestration-first. They can run independently or as linked stages in a larger workflow.
- Read/save operations: create and update Notes, Reminders, and Calendar outputs for AutoLife operations.
- Screenshot/read operations: capture search pages and linked pages, then extract structured text for downstream analysis.
- Tool-connection operations: call deterministic scripts, exchange artifacts across stages, and maintain context continuity.
Primary location:
orchestral/prompt_tools/
Runtime entrypoints:
orchestral/prompt_tools/runtime/codex-noninteractive.shorchestral/prompt_tools/runtime/codex-email-cli.pyorchestral/prompt_tools/runtime/codex-json-runner.pyorchestral/prompt_tools/runtime/run_auto_ops.sh
Constraint preserved from orchestral/prompt_tools/README.md:
- Top-level compatibility wrappers under
orchestral/prompt_tools/*.sh|*.pywere removed. - New implementations should remain in grouped folders (runtime/company/websearch/etc.).
openclaw gateway run --bind loopback --port 18789 --verboseopenclaw agent --message "Review today inbox and build a prioritized task plan" --thinking highpnpm install
pnpm ui:build
pnpm build
pnpm gateway:watchcp .env.example .env
docker compose up -d
docker compose logs -f openclaw-gatewaypython3 orchestral/prompt_tools/runtime/codex-json-runner.py \
--input-json /tmp/task.json \
--output-dir /tmp/codex-runs \
--schema orchestral/prompt_tools/runtime/email_send_schema.json \
--model gpt-5.3-codex-spark \
--reasoning high- Runtime baseline: Node
>=22.12.0. - Package manager baseline:
[email protected](packageManagerfield). - Common quality gates:
pnpm check # format + ts checks + lint
pnpm build # build dist output
pnpm test # test suite
pnpm test:coverage # coverage run- CLI in dev:
pnpm openclaw ... - TS run loop:
pnpm dev - UI package commands are proxied via root scripts (
pnpm ui:build,pnpm ui:dev).
Common extended test commands in this repo:
pnpm test:e2e
pnpm test:live
pnpm test:docker:all
pnpm test:uiAdditional dev helpers:
pnpm docs:dev
pnpm format:check
pnpm lint
pnpm tsgo:testAssumption note:
- Mobile/macOS app build/run commands exist in
package.json(ios:*,android:*,mac:*) but platform signing/provisioning requirements are environment-specific and not fully documented in this README.
openclaw gateway run --bind loopback --port 18789 --verboseCheck for port collisions and daemon conflicts. If using Docker, verify mapped host port and service health.
- Re-check
.envvalues against.env.example. - Ensure at least one model key is configured.
- Verify channel tokens only for channels you actually enabled.
- Re-run
pnpm installwith Node>=22.12.0. - Rebuild with
pnpm ui:build && pnpm build. - If optional native peers are missing, review install logs for
@napi-rs/canvas/node-llama-cppcompatibility.
- Run
git submodule update --init --recursive. - For private SSH URLs, verify your GitHub SSH key setup.
- If nested modules stay uninitialized, inspect child
.gitmodulesand run update from the parent module.
Use openclaw doctor to detect migration/security/config drift issues.
openclaw channels status --probe
openclaw gateway status
openclaw status --deepLAB integrates my broader AI product and research repos into one operating layer for creation, growth, and automation.
Profile:
Integrated repos:
VoidAbyss(隙遊之淵)AutoNovelWriter(automatic novel writing)AutoAppDev(automatic app development)OrganoidAgent(organoid research platform with foundation vision models + LLMs)LazyEdit(AI-assisted video editing: captions/transcription/highlights/metadata/subtitles)AutoPublish(automatic publication pipeline)
Practical LAB integration goals:
- Auto write novels
- Auto develop apps
- Auto edit videos
- Auto publish outputs
- Auto analyze organoids
- Auto handle email operations
git clone https://github.com/lachlanchen/LazyingArtBot.git
cd LazyingArtBot
pnpm install
pnpm ui:build
pnpm build
pnpm openclaw onboard --install-daemonDev loop:
pnpm gateway:watchPlanned directions for this LAB fork (working roadmap):
- Expand automail reliability with stricter sender/rule classification.
- Improve orchestral stage composability and artifact traceability.
- Strengthen mobile-first operations and remote gateway management UX.
- Deepen integrations with LAB ecosystem repos for end-to-end automated production.
- Continue hardening security defaults and observability for unattended automation.
This repository tracks personal LAB priorities while inheriting core architecture from OpenClaw.
- Read
CONTRIBUTING.md - Review upstream docs: https://docs.openclaw.ai
- For security issues, see
SECURITY.md
If uncertain about LAB-specific behavior, preserve existing behavior and document assumptions in PR notes.
LazyingArtBot is based on OpenClaw:
Thanks to the OpenClaw maintainers and community for the core platform.
| Donate | PayPal | Stripe |
|---|---|---|
- Website: https://lazying.art
- Repository: https://github.com/lachlanchen/LazyingArtBot
- Issue tracker: https://github.com/lachlanchen/LazyingArtBot/issues
- Security or safety concerns: https://github.com/lachlanchen/LazyingArtBot/blob/main/SECURITY.md
MIT (same as upstream where applicable). See LICENSE.
