kelly-education-intel · diff

git:20260711.c9add96 to git:20260806.bed1b85

91 added, 64 removed. Audit A to A.

---
name: kelly-education-intel
- description: "Kelly Education Intel: App-in-Skill daily industry intelligence cockpit for education, training, tutoring, and admissions services. Use when the user asks about education, training centers, exams, study abroad, visas, school policy, parent FAQ,招生,升学, or教育机构 sales scenes. Prepares news/source signals, buyer-intent interpretation, approved sales actions, and channel drafts for review before any external handoff."
+ description: "Kelly Education Intel: App-in-Skill daily industry intelligence cockpit for education, training, tutoring, and admissions services (Busabase App-in-Skill). Use when the user asks about education, training centers, exams, study abroad, visas, school policy, parent FAQ,招生,升学, or教育机构 sales scenes. Prepares news/source signals, buyer-intent interpretation, approved sales actions, and channel drafts for review before any external handoff."
---
# Kelly Education Intel
## Overview
Use this skill as Kelly's daily industry-intelligence operator for **education, training, tutoring, and admissions services**.
- It turns current news sources, trend signals, competitor movement, customer questions, and buyer-intent clues into a small reviewable batch:
+ It turns current news sources, trend signals, competitor movement, customer questions, and buyer-intent clues into a small reviewable batch, held in Busabase:
- source-backed signals;
- why each signal matters to the buyer;
- sales or operating actions for today;
- draft messages/content for parent WhatsApp, WeChat post, course pitch;
- blocked claims that need human, legal, compliance, or domain review.
- Default interaction mode: App UI. Unless the user explicitly asks for chat-only handling, check onboarding/config, prepare or refresh the local batch, start/reuse the local app with `app/start.sh`, and give the actual local URL. Use chat-only mode only when the user says "纯聊天", "chat only", "不要打开 UI", or similar.
+ Signal/action/draft collection is a genuine external operation a browser
+ cannot perform (web browsing, source reading, buyer-intent judgment). The
+ AirApp itself only reads and writes Busabase — it never browses, posts
+ anywhere, or performs an external handoff; Kelly writes today's batch
+ directly into Busabase through `busabase-sdk` as part of the normal
+ workflow below, then reviews and decides inside the app.
+ Default interaction mode: App UI. Unless the user explicitly asks for
+ chat-only handling, check onboarding, collect/refresh today's batch, and
+ give the user the clickable AirApp URL (or the local preview URL when local
+ preview is explicitly requested). Use chat-only mode only when the user says
+ "纯聊天", "chat only", "不要打开 UI", or similar.
+
+ ## Mandatory Dependencies
+
+ 1. Read and follow `$kelly-app-skill-creator` for product behavior, visual quality, responsive layout, and the complete canonical `app/` artifact.
+ 2. Read and follow `$busabase` for connection, target Space, node discovery, ChangeRequests, review, and merge behavior.
+ 3. Read and follow `$busabase-app-creator` for resource modeling, AirApp runtime limits, security, validation, and deployment.
+
+ If a dependency is unavailable, preserve this skill's product contracts,
+ stop before the unavailable Busabase operation, and report the exact
+ missing dependency. Do not invent a second data backend.
+
## Product Package
- **Buyer**: education center owners, admissions consultants, tutoring operators, and course marketers.
- **Pain**: education sellers need to turn fast-changing policy, exam, and parent anxiety into trustworthy enrollment conversations.
- **Offer**: daily education intelligence that becomes parent FAQs, enrollment scripts, and course promotion drafts.
- **Demo source mix**: education bureaus, exam boards, school notices, visa news, university updates, and parent discussion topics.
Sales framing:
> Every morning, AI watches the sources that affect your business, turns them into today's sales actions, and puts the drafts in a review queue before anything becomes official.
Do not lead with "AI platform", "agent workspace", "database", or model names. Lead with the daily business scene.
## Scene Logic
Use this skill to convert education news into enrollment, parent-service, tutoring, or school-operator actions. A useful signal changes timing, trust, curriculum fit, admissions pressure, or parent anxiety.
Prioritize signals in this order:
1. exam, admissions, visa, scholarship, or school-calendar changes with hard dates;
2. parent questions and complaint themes that reveal purchase anxiety or a missing FAQ;
3. competitor course/offering changes that affect positioning, price packaging, or channel copy;
4. policy, AI-in-education, safety, or credential news that demands a client memo.
- Actions should become parent FAQ answers, course launch angles, admissions checklists, webinar topics, advisor scripts, or Busabase review batches. Block admission guarantees, grade promises, immigration/legal advice, and claims about schools that lack a source.
+ Actions should become parent FAQ answers, course launch angles, admissions checklists, webinar topics, advisor scripts, or Busabase approval batches. Block admission guarantees, grade promises, immigration/legal advice, and claims about schools that lack a source.
## Boundary
- - The skill may browse public/current sources, reason over buyer intent, draft actions/content, validate schemas, and write local handoff files.
- - The app reads and writes local files only. It must never post content, send WhatsApp/email, mutate CRMs, scrape private systems, spend money, or perform external side effects.
+ - The skill may browse public/current sources, reason over buyer intent, draft actions/content, and write signal/action/draft/source records to Busabase.
+ - The AirApp reads and writes its own Busabase Bases only. It must never post content, send WhatsApp/email, mutate CRMs, scrape private systems, spend money, or perform any other external side effect.
- Customer-visible drafts, regulated claims, pricing promises, medical/financial/legal advice, and outbound messages are approval-required.
- - Store only the minimal source excerpts needed for review. Do not commit `config.local.json`, env files, `app/.data/`, exports, screenshots of private sources, or raw customer data.
-
- ## First Run And Onboarding
+ - Store only the minimal source excerpts needed for review. Never store crawl credentials or API keys in Busabase.
- On invocation, check `app/.data/onboarding.json` and private config readiness. If onboarding is absent/incomplete, guide setup before doing real monitoring.
+ ## Busabase Resources
- Ask for non-secret setup details only:
+ Five Bases under one application Folder (`kelly-education-intel`), declared in
+ `app/app/js/config.js` and `app/resource-map.json`:
- - company/brand name, geography, language, and customer segment;
- - 3-10 public source URLs or source categories to monitor;
- - competitor names/URLs;
- - approved offer, CTA, and forbidden claims;
- - preferred channels among parent WhatsApp, WeChat post, course pitch;
- - whether Busabase should be the review provider later.
+ - `signals`: source-backed exam, admissions, visa, and buyer-intent signals — evidence link, why-it-matters, buyer-intent interpretation, confidence, risk badges, a suggested action, and the human decision verdict.
+ - `actions`: approved/blocked/reviewable parent FAQ, admissions, or operating actions linked to signals, with owner, priority, reason, next step, and the human decision verdict.
+ - `drafts`: editable channel drafts (parent WhatsApp / WeChat post / course pitch) tied to an approved action; a human edit is stored as `edited-body` on the same row, never a separate file.
+ - `sources`: configured education-bureau/exam-board/competitor/trend source categories, freshness, and coverage gaps.
+ - `settings`: one row (`record-id: "batch"`) holding the current batch's metadata (`batch_id`, `generated_at`, `source`, `vertical`, `buyer`, `offer`) as a JSON payload.
- Never ask for API keys or platform tokens in chat. Secrets belong in env files only.
+ Resources provision lazily through an idempotent Busabase ChangeRequest the
+ first time the app runs in a Space; see `references/ui-schema.md` for exact
+ field shapes.
- When setup is complete and the user confirms, write `app/.data/onboarding.json`:
+ ## First Run And Onboarding
- ```json
- {
- "completed": true,
- "completed_at": "ISO timestamp",
- "config_version": "1"
- }
- ```
+ On invocation, check the `signals`, `actions`, and `drafts` Bases. If all
+ are empty, guide setup before collecting a real batch: ask for
+ company/brand name, geography, language, and customer segment; 3-10 public
+ source URLs or source categories to monitor; competitor names/URLs;
+ approved offer, CTA, and forbidden claims; preferred channels among parent
+ WhatsApp, WeChat post, course pitch. Never ask for API keys or platform
+ tokens in chat — Busabase connection happens through the app's own Connect
+ Busabase gate.
## Local App
- Start the cockpit with:
-
- ```bash
- skills/kelly-education-intel/app/start.sh
- ```
-
- The app uses local HTTP on `127.0.0.1`, preferring port `3000` through `4000`, or `KELLY_EDUCATION_INTEL_UI_PORT` when set.
+ Default behavior is AirApp-first — give the user the clickable AirApp URL.
+ Start `pnpm --dir app dev` only when local preview/debugging is explicitly
+ requested.
- Required views:
+ Required app views (hash routes):
- - `#/overview`: human-attention panel, today's top signals, ready actions, blocked items, and source coverage.
- - `#/signals` and `#/signals/<id>`: source-backed signals with evidence links, buyer-intent interpretation, confidence, risk badges, and suggested next action.
- - `#/actions` and `#/actions/<id>`: approved/blocked/reviewable operating or sales actions.
- - `#/drafts` and `#/drafts/<id>`: editable parent WhatsApp, WeChat post, course pitch drafts with approve/request-changes/block decisions.
+ - `#/overview`: human-attention panel — today's needs-review/approved/blocked counts, top signals, and ready (approved) actions.
+ - `#/signals` and `#/signals/<id>`: source-backed signals with evidence links, buyer-intent interpretation, confidence, risk badges, and a decision panel (Approve / Request changes / Block) with a review note.
+ - `#/actions` and `#/actions/<id>`: approved/blocked/reviewable operating or sales actions with owner, priority, reason, next step, linked signals, and the same decision panel.
+ - `#/drafts` and `#/drafts/<id>`: editable parent WhatsApp, WeChat post, course pitch drafts with the decision panel plus a `Save revision` action that writes an edited body directly onto the draft record.
- `#/sources`: configured source categories, freshness, and gaps.
- - `#/settings`: sanitized config summary, onboarding state, provider, language, and accent color.
+ - `#/settings`: sanitized batch metadata, data provider, onboarding state.
Demo mode:
- `?demo=1`, `?demo=overview`, `?demo=signals`, `?demo=actions`, `?demo=drafts`, and `?demo=detail` load deterministic demo data.
- `lang=en` or `lang=zh` forces UI chrome language.
- - Demo API responses never read/write `app/.data/` or private config.
-
- ## File Contract
-
- Read `references/ui-schema.md` before changing the app, scripts, or generated JSON.
-
- - `app/.data/current_batch.json`: current intelligence batch.
- - `app/.data/decisions.json`: user verdicts and edits keyed by item id.
- - `app/.data/agent_tasks.json`: queued agent work for requested changes or missing evidence.
- - `app/.data/execution_report.json`: dry-run/apply handoff report.
- - `app/.data/onboarding.json`: setup marker.
- - `app/.data/agent.lock`: temporary lock while the skill writes files.
-
- Validate with:
-
- ```bash
- node skills/kelly-education-intel/scripts/validate_ui_schema.ts skills/kelly-education-intel/app/.data/current_batch.json
- ```
+ - Demo mode never reads or writes Busabase; decisions only mutate the in-memory demo batch.
- ## Normal Workflow
+ ## Batch Workflow
1. Detect mode. Default to App UI.
2. Browse or otherwise collect current public evidence. For news/trends, use exact dates and source URLs.
3. Build one narrow buyer scene, not a generic AI report.
- 4. Write a batch with signals, actions, drafts, and source coverage. Keep every item tied to evidence or mark it blocked.
- 5. Validate the batch.
- 6. Launch the UI for review.
- 7. Poll `agent_tasks.json` for requested changes and revise only those items.
- 8. On "execute/export approved", re-read decisions and run `scripts/execute_decisions.ts` first as a dry run. Apply only after explicit confirmation.
+ 4. Write the batch directly into Busabase through `busabase-sdk` (`bases.createChangeRequest` for each new signal/action/draft/source row, matching the field slugs in `references/ui-schema.md`; refresh the `settings` "batch" row's JSON payload with `batch_id`/`generated_at`/`source`/`vertical`/`buyer`/`offer`). Keep every item tied to evidence or mark it `blocked`.
+ 5. Open the AirApp for review.
+ 6. Poll for `request_changes` decisions (`decision-verdict` = `request_changes` on a signal/action/draft row) and revise only those items — write the revision back onto the same record.
+ 7. On "execute/export approved", run `node scripts/execute_decisions.mjs` first as a dry run. After performing any real handoff, run `node scripts/execute_decisions.mjs --apply` to mark the approved items done.
+ ## Decisions Workflow
+
+ 1. Kelly's verdicts write directly onto the item record (`status`,
+ `decision-verdict`, `decision-comment`, `decided-at`) through
+ `busabase-sdk`. From a standalone local preview the write merges
+ immediately (trusted operator); from the deployed AirApp it creates a
+ pending ChangeRequest for the trusted process to merge.
+ 2. Before executing anything, run `node scripts/execute_decisions.mjs`
+ (dry-run). It prints the concrete operation for every decided
+ signal/action/draft: `mark_signal_approved`, `export_action_plan`, or
+ `handoff_content_pack` for an `approve` verdict; `queue_agent_revision`
+ for `request_changes`; `mark_blocked` for `block`; `save_human_revision`
+ for a draft's `revise`.
+ 3. After Kelly confirms the dry-run and performs the handoff somewhere
+ outside this script, run `node scripts/execute_decisions.mjs --apply` to
+ mark the approved items `done`. `request_changes`/`block` verdicts are
+ left exactly as decided — there is nothing further for the script to do.
+
## Safety Defaults
- Treat outbound messages, regulated claims, medical/financial/legal advice, pricing promises, and publishing as approval-required.
- If source evidence is weak, mark the item `blocked` or lower confidence instead of pretending.
- Preserve source language unless the workflow asks for translation.
- - Use Busabase as the later shared review provider when the workflow needs team approvals; local files remain the reference implementation.
+ - Keep every write idempotent by upserting on the item's own id field so re-running a collection pass never duplicates rows.
+ - Block admission guarantees, grade promises, immigration/legal advice, and claims about schools or credentials that lack a source.
+
+ ## Useful Commands
+
+ ```bash
+ node skills/kelly-education-intel/scripts/execute_decisions.mjs
+ node skills/kelly-education-intel/scripts/execute_decisions.mjs --apply
+ pnpm --dir skills/kelly-education-intel/app dev
+ ```