2026-08-12 22:19:48 +00:00

reno-stars-coordinator

A single human-in-the-loop lifecycle agent that runs the Reno Stars renovation project lifecycle end-to-end. It owns the workflow logic and calls the existing services (Odoo CRM, invoice-service, Google Calendar, Reno Stars Companion, Resend) rather than replacing them. Built as an EnterSkill ability (repo root = the ability) + a reno-work MCP (Python) that is the CRM/ledger spine.

Design canvas: ~/Downloads/reno-stars-coordinator-design.html.

The lifecycle (a state machine, not a flat list)

A resolved human nod transitions a project and auto-spawns the next stage's tasks; every customer/worker-facing action is nod-gated; all state is durable in Odoo (the agent is stateless between wakes).

⓪ intake → ① quote (橱柜/台面/陈师傅) → ①b send + 3-day follow-up → accepted/lost
   accepted → ② start date (→ Calendar) + site/material checklists (each nodded)
            → ③ weekly milestone (until done AND fully paid)
            → ④ Google review + monthly care
   lost → ④ monthly re-engage (reactivate_lead re-enters ① on a bite)
   ✉ inquiry → triage + reply for inbound that isn't a clean lead/nod

Layout

Path What
SKILL.md root engine — correlation, idle drain, state transitions, the tool map
children/<stage>/SKILL.md intake · quoting · scheduling · construction · aftercare · inquiry
mcp/renowork/ the reno-work MCP (DI package): tools, lifecycle SSOT, Odoo/invoice/email/calendar/companion clients
mcp/server.py stdio JSON-RPC entrypoint
mcp/digest_provider.py idle-digest provider (overdue coordinator tasks)
config/ routing.md, cadences.md
workspace/template.yaml · config.yaml workspace manifest (channels + reno-work + skill; delivery_mode=poll; idle prompt)
.gitea/workflows/ci.yml per-function unit tests + stdio smoke

The reno-work tools

Lifecycle transitions (auto-spawn the next stage): create_project, record_quote, mark_quote_sent, set_outcome, reactivate_lead, set_start_date, begin_construction, complete_project. Stage actions (§7 — real, confirm-gated sends): send_material_list, request_review (Resend email), push_site_checklist (Companion), set_start_date books Google Calendar directly. Ledger/CRM: match_customer, create_customer, create_task, mark_task_done, promote_inbound, fetch_routing, get_payment_status, send_reminder. Robustness: reopen_task (undo), list_triage (dead-letter), rearm_task (cadence loop). 开工 dispatch queue: enqueue_worker_dispatch, list_pending_dispatch, mark_dispatch_sent.

Develop

python3.11 -m pytest mcp/ -q          # unit tests (no live Odoo/network)
printf '%s\n%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize"}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' | python3.11 mcp/server.py

Writes are gated by RENO_WORK_DRY_RUN (any of ""/0/false/no/off = LIVE; anything else = shadow/dry). Integration clients (email/calendar/companion) stay inert until their secrets are set, falling back to an agent_action for the host canvas. Secrets resolve env → workspace self-fetch → local-dev config/env.json.

S
Description
Reno Stars renovation coordinator plugin
Readme 446 KiB
Languages
Python 97.4%
TypeScript 2.6%