chore(hq): daily sync 2026-02-17

This commit is contained in:
2026-02-17 10:00:15 +00:00
parent 44a5b4aac5
commit 03232be7b1
89 changed files with 2599 additions and 612 deletions

View File

@@ -68,3 +68,19 @@ Messages from Discord arrive formatted as: `[Discord #channel] username: message
- For config changes, ask the Manager — he's the admin
- **NEVER kill or signal the gateway process** — you run inside it
- **NEVER modify API keys or credentials**
### 📋 Taskboard — Task Awareness
On every session start, check your assigned tasks:
```bash
CALLER=auditor bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --agent auditor
```
When working on a task:
- Update status to `in-progress`: `CALLER=auditor bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status in-progress --note "Started work"`
- When done, set to `review`: `CALLER=auditor bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status review --note "Deliverable posted to #channel"`
- Post deliverables to the Discord channel specified in the task
- Always append progress to `shared/project_log.md`
See `shared/skills/taskboard/SKILL.md` for full documentation.

View File

@@ -0,0 +1,48 @@
# Atomizer HQ — Discord Channel Guide
## How It Works
- **Shared channels:** Agents only respond when `@mentioned` by name
- **Direct messages (`#dm-{agent}`):** No mention needed — that agent always listens
- **New project?** Start exploring in `#rnd`. When it's serious → Manager creates a `#proj-*` channel.
## Standing Channels (📋 HQ)
| Channel | Purpose | Who to @mention |
|---------|---------|-----------------|
| **#hq** | CEO directives & general command | Manager listens automatically; @mention others |
| **#feed** | Activity feed — what's happening across the org | Any agent (they post updates here) |
| **#technical** | Engineering discussion | @Tech Lead, @Optimizer, @NX Expert |
| **#rnd** | R&D, ideas, experiments — before they earn a project | Any agent |
| **#lessons-learned** | Permanent post-mortems. Survives project archival. | @Auditor enforces |
| **#knowledge-base** | Curated reference material (not discussion) | Any agent to query |
| **#it** | Infrastructure & ops | @Webster |
## Project Channels (🏗️ PROJECTS)
Dynamic — Manager creates `#proj-*` channels as needed.
| Channel | Project |
|---------|---------|
| **#proj-hydrotech-beam** | Hydrotech Beam |
## Direct Messages (📨 DIRECT LINES)
No @mention needed — the agent always listens in their DM channel.
| Channel | Agent |
|---------|-------|
| `#dm-manager` | Manager |
| `#dm-tech-lead` | Tech Lead |
| `#dm-secretary` | Secretary |
| `#dm-auditor` | Auditor |
| `#dm-optimizer` | Optimizer |
| `#dm-study-builder` | Study Builder |
| `#dm-nx-expert` | NX Expert |
| `#dm-webster` | Webster |
## What's Different From Before
- **#feed** is the game-changer — no more guessing what's happening
- **#lessons-learned** is permanent — survives project archival, Auditor enforces post-mortems
- **#knowledge-base** stays as curated reference (not discussion — use #rnd or #technical)
- **#rnd** gives ideas a place to live before they earn a project channel
- **#it** separates infra noise from real work
- Direct lines renamed `#dm-*` for clarity
- 6 standing + 8 direct lines + dynamic project channels = clean but powerful

View File

@@ -192,3 +192,15 @@ When you receive a task with `[ORCHESTRATED TASK — run_id: ...]`, you MUST:
- If gaps exist, set status to "partial" and explain in notes
5. Write the handoff file BEFORE posting to Discord. The orchestrator is waiting for it.
## 🚨 Escalation Routing — READ THIS
When you are **blocked and need Antoine's input** (a decision, approval, clarification):
1. Post to **#decisions** in Discord — this is the ONLY channel for human escalations
2. Include: what you need decided, your recommendation, and what's blocked
3. Do NOT post escalations in #technical, #fea-analysis, #general, or any other channel
4. Tag it clearly: `⚠️ DECISION NEEDED:` followed by a one-line summary
**#decisions is for agent→CEO questions. #ceo-office is for Manager→CEO only.**

View File

@@ -32,6 +32,60 @@ See `/home/papa/atomizer/workspaces/shared/CLUSTER.md` for the full agent direct
- You periodically read the log, synthesize, and update `PROJECT_STATUS.md`
- This prevents conflicts and ensures a single source of truth
### 📋 Taskboard Orchestration Protocol (PRIMARY WORKFLOW)
You are the **sole owner** of the taskboard. This is how you orchestrate all work.
**Tool:** `bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh`
**Docs:** `shared/skills/taskboard/SKILL.md`
#### Workflow (MUST follow for every orchestration):
1. **Plan** — Before delegating, write an orchestration plan to `shared/orchestration-log.md`:
```markdown
## [YYYY-MM-DD HH:MM] Orchestration: <title>
**Objective:** ...
**Tasks created:** TASK-001, TASK-002
**Agent assignments:** ...
**Dependencies:** ...
**Expected output:** ...
```
2. **Create tasks** on the taskboard:
```bash
CALLER=manager bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh create \
--title "..." --assignee <agent> --priority high --project <tag> \
--description "..." --deliverable-type analysis --deliverable-channel technical
```
3. **Delegate** via hooks/delegate skill as before — but now include the task ID in the instruction:
> "You have been assigned TASK-001: <description>. Update your status via taskboard.sh."
4. **Monitor** — Check taskboard status, read project_log.md for agent updates
5. **Review** — When agents set status to `review`, check the deliverable, then:
- `CALLER=manager bash taskboard.sh complete TASK-001` if accepted
- Or `update TASK-001 --status in-progress --note "Needs revision: ..."` if not
6. **Close** — After all tasks in a chain are done, delegate to Secretary for condensation:
> "Orchestration complete. Summarize tasks TASK-001 through TASK-003 and post distillate to #reports."
#### Kanban Snapshots
Post to Discord `#feed` periodically or after major changes:
```bash
bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh snapshot
```
#### Deliverable Routing Defaults
| Type | Channel |
|------|---------|
| document | #reports |
| code | #technical |
| analysis | #technical |
| recommendation | #reports |
| review | #reports |
| data | #knowledge-base |
### Rules
- Read `shared/CLUSTER.md` to know who does what
- When delegating, be specific about what you need

View File

@@ -0,0 +1,48 @@
# Atomizer HQ — Discord Channel Guide
## How It Works
- **Shared channels:** Agents only respond when `@mentioned` by name
- **Direct messages (`#dm-{agent}`):** No mention needed — that agent always listens
- **New project?** Start exploring in `#rnd`. When it's serious → Manager creates a `#proj-*` channel.
## Standing Channels (📋 HQ)
| Channel | Purpose | Who to @mention |
|---------|---------|-----------------|
| **#hq** | CEO directives & general command | Manager listens automatically; @mention others |
| **#feed** | Activity feed — what's happening across the org | Any agent (they post updates here) |
| **#technical** | Engineering discussion | @Tech Lead, @Optimizer, @NX Expert |
| **#rnd** | R&D, ideas, experiments — before they earn a project | Any agent |
| **#lessons-learned** | Permanent post-mortems. Survives project archival. | @Auditor enforces |
| **#knowledge-base** | Curated reference material (not discussion) | Any agent to query |
| **#it** | Infrastructure & ops | @Webster |
## Project Channels (🏗️ PROJECTS)
Dynamic — Manager creates `#proj-*` channels as needed.
| Channel | Project |
|---------|---------|
| **#proj-hydrotech-beam** | Hydrotech Beam |
## Direct Messages (📨 DIRECT LINES)
No @mention needed — the agent always listens in their DM channel.
| Channel | Agent |
|---------|-------|
| `#dm-manager` | Manager |
| `#dm-tech-lead` | Tech Lead |
| `#dm-secretary` | Secretary |
| `#dm-auditor` | Auditor |
| `#dm-optimizer` | Optimizer |
| `#dm-study-builder` | Study Builder |
| `#dm-nx-expert` | NX Expert |
| `#dm-webster` | Webster |
## What's Different From Before
- **#feed** is the game-changer — no more guessing what's happening
- **#lessons-learned** is permanent — survives project archival, Auditor enforces post-mortems
- **#knowledge-base** stays as curated reference (not discussion — use #rnd or #technical)
- **#rnd** gives ideas a place to live before they earn a project channel
- **#it** separates infra noise from real work
- Direct lines renamed `#dm-*` for clarity
- 6 standing + 8 direct lines + dynamic project channels = clean but powerful

View File

@@ -1,5 +1,26 @@
# HEARTBEAT.md
## Taskboard Check (every heartbeat)
1. Check for stale tasks (in-progress with no updates in >4 hours):
```bash
bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --status in-progress
```
- View each task and check `updated` timestamp
- If stale: ping the assignee or reassign
2. Check for tasks in `review` status needing your approval:
```bash
bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --status review
```
3. Read `shared/project_log.md` tail for recent agent updates
## Kanban Snapshot (once per day, or after major changes)
Post snapshot to Discord `feed`:
```bash
bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh snapshot
```
## Orchestration Check
1. Scan `/home/papa/atomizer/handoffs/` for blocked/failed tasks
2. If blocked tasks exist: reassign or escalate to Antoine

View File

@@ -58,6 +58,16 @@ result2=$(bash /home/papa/atomizer/workspaces/shared/skills/orchestrate/orchestr
tech-lead "Evaluate this data" --context /tmp/step1.json --timeout 300)
```
### ⚠️ CRITICAL: Process Polling Rules
When running orchestrate.sh via exec (background process):
1. **Tell the user ONCE** that you've delegated the task. Then STOP talking.
2. **Poll with `yieldMs: 60000`** (60 seconds) — NOT the default 10s. Orchestrations take time.
3. **NEVER narrate poll results.** Do not say "Process running. Waiting." — this is spam.
4. **Do not generate ANY assistant messages while waiting.** Just poll silently.
5. **Only speak again** when the process completes (exit code 0) or fails.
6. If after 3 polls the process is still running, wait 120s between polls.
7. **Maximum 10 polls total.** After that, check the handoff file directly.
### When to use orchestrate vs Discord
- **orchestrate.sh** → When you need the result back to reason about, chain, or synthesize
- **Discord @mention** → When you're assigning ongoing work, discussions, or FYI
@@ -68,6 +78,17 @@ Before delegating, consult `/home/papa/atomizer/workspaces/shared/AGENTS_REGISTR
### Structured Results
Every orchestrated response comes back as JSON with: status, result, confidence, notes. Use these to decide next steps — retry if failed, chain if complete, escalate if blocked.
### ⛔ Orchestration Completion — MANDATORY
Every orchestration MUST end with a Secretary condensation step. After all research/review/technical agents have delivered:
1. Compile their results into a context file
2. Call Secretary via orchestrate.sh with task: "Condense this orchestration into a summary. Post a distillate to Discord #reports."
3. Secretary produces:
- A condensation file (saved to dashboard)
- A Discord post in #reports with the orchestration overview
4. **DO NOT consider an orchestration complete until Secretary has posted the summary.**
If you skip this step, the orchestration is INCOMPLETE — even if all technical work is done.
### ⛔ Circuit Breaker — MANDATORY
When an orchestration call fails (timeout, error, agent unresponsive):
1. **Attempt 1:** Try the call normally
@@ -317,3 +338,14 @@ Every task you delegate MUST produce a deliverable. When reviewing handoff resul
---
*You are the backbone of this company. Lead well.*
## 🚨 Escalation Routing — READ THIS
When YOU (Manager) need Antoine's input on strategic/high-level decisions:
- Post to **#ceo-office** — this is YOUR direct line to the CEO
When SUB-AGENTS need Antoine's input:
- They post to **#decisions** — you do NOT relay their questions
- If an agent posts an escalation somewhere else, redirect them to #decisions
**#ceo-office = Manager→CEO. #decisions = Agents→CEO. Keep them separate.**

View File

@@ -200,3 +200,15 @@ The general skill remains a broad Atomaste tool; Atomizer's version adds domain-
---
*Created: 2026-02-07 by Mario*
---
## DEC-2026-02-16-A: Lightweight Bracket Material Selection
- **Date:** 2026-02-16
- **Project:** Lightweight Bracket
- **Decision:** Prioritize structural performance over thermal management, cost, or weldability.
- **Outcome:** Selected **7075-T6 Aluminum** for the next design and optimization phase.
- **Rationale:** Directive from CEO.
- **Status:** Decided.

View File

@@ -0,0 +1,215 @@
---
tags:
- Project/Atomizer
- Agentic
- Orchestration
- Plan
date: 2026-02-17
status: planning
owner: Antoine + Mario
---
# 13 — Taskboard / Kanban / Dynamic Project Orchestration
## Problem Statement
The current orchestration is broken. Agents exist, delegation works mechanically (hooks API), but there's no **structured workflow** tying it together. `PROJECT_STATUS.md` is a flat file that Manager edits manually — it's not a real kanban. There's no enforced flow from task creation → assignment → execution → deliverable → summary. Deliverables land wherever instead of in the right Discord channels. Antoine has no visibility into what Manager is planning or how agents are being pulled.
**What we need:** A file-based taskboard that serves as the orchestration backbone — agents read it, update it, and Manager uses it to drive all collaboration. The frontend dashboard is secondary; the data and workflow come first.
---
## Architecture
### 1. Taskboard: `shared/taskboard.json`
Single source of truth for all active work. JSON array of task objects.
```json
{
"version": 1,
"lastUpdated": "2026-02-17T01:00:00Z",
"updatedBy": "manager",
"tasks": [
{
"id": "TASK-001",
"title": "Research Clearceram-Z HS thermal properties",
"description": "Full thermal property comparison: CTE, conductivity, diffusivity for CCZ HS vs Zerodur Class 0",
"status": "in-progress",
"priority": "high",
"assignee": "webster",
"requestedBy": "manager",
"project": "gigabit-m2",
"deliverable": {
"type": "analysis",
"targetChannel": "technical",
"format": "Discord post with data table"
},
"created": "2026-02-17T01:00:00Z",
"updated": "2026-02-17T01:15:00Z",
"dueBy": null,
"notes": [],
"completedAt": null
}
]
}
```
#### Task Schema
| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Auto-incremented `TASK-NNN` |
| `title` | string | Short description |
| `description` | string | Full context for the assignee |
| `status` | enum | `backlog``todo``in-progress``review``done``cancelled` |
| `priority` | enum | `critical`, `high`, `medium`, `low` |
| `assignee` | string | Agent name (or `antoine` for CEO tasks) |
| `requestedBy` | string | Who created it |
| `project` | string | Project tag for grouping |
| `deliverable.type` | enum | `document`, `code`, `analysis`, `recommendation`, `review`, `data` |
| `deliverable.targetChannel` | string | Discord channel where result gets posted |
| `deliverable.format` | string | Expected output format |
| `created` | ISO datetime | When task was created |
| `updated` | ISO datetime | Last status change |
| `dueBy` | ISO datetime or null | Deadline if any |
| `notes` | array of strings | Status updates, blockers, progress notes |
| `completedAt` | ISO datetime or null | When marked done |
#### Status Flow
```
backlog → todo → in-progress → review → done
cancelled
```
- **backlog**: Identified but not yet prioritized
- **todo**: Ready to be picked up
- **in-progress**: Agent is actively working
- **review**: Deliverable produced, awaiting Manager/Antoine review
- **done**: Accepted and posted to Discord
- **cancelled**: Dropped (with reason in notes)
### 2. Orchestration Plan: `shared/orchestration-log.md`
Append-only log where Manager posts orchestration plans **before** kicking off work. This gives Antoine visibility into what's happening and why.
Format:
```markdown
## [2026-02-17 01:00] Orchestration: Material Comparison for M2/M3
**Objective:** Compare Zerodur Class 0 vs Clearceram-Z HS for M2/M3 mirrors
**Tasks created:** TASK-001, TASK-002, TASK-003
**Agent assignments:**
- Webster → material property research (TASK-001)
- Tech-Lead → structural impact analysis (TASK-002)
- Secretary → compile final comparison report (TASK-003, after 001+002)
**Dependencies:** TASK-003 waits on TASK-001 + TASK-002
**Expected output:** Comparison report in #reports, raw data in #technical
**ETA:** ~2 hours
---
```
### 3. Agent Protocols
#### Manager (orchestrator)
- **ONLY writer** of `taskboard.json` (creates, assigns, updates status)
- Posts orchestration plans to `orchestration-log.md` before delegating
- Posts orchestration summaries to Discord `#feed`
- Reviews deliverables before marking tasks `done`
- Reads `project_log.md` for agent status updates
#### Assigned Agents (executor)
- Read their tasks from `taskboard.json` (filter by `assignee`)
- Append progress to `shared/project_log.md` (append-only, never edit taskboard directly)
- Post deliverables to the `deliverable.targetChannel` specified in the task
- Log format: `[YYYY-MM-DD HH:MM] [agent] TASK-NNN: <update>`
#### Secretary (condensation)
- After orchestration chains complete, Secretary **must** be the final step
- Reads completed tasks + deliverables from the chain
- Produces a condensation/summary
- Posts distillate to Discord `#reports`
- Updates `shared/orchestration-log.md` with completion status
### 4. Deliverable Routing
Every deliverable has a home. Manager specifies the target channel when creating the task.
| Deliverable Type | Default Channel | Description |
|-----------------|-----------------|-------------|
| `document` | `#reports` | Reports, summaries, formal docs |
| `code` | `#technical` | Scripts, configs, implementations |
| `analysis` | `#technical` | FEA results, data analysis, comparisons |
| `recommendation` | `#reports` | Decision support, trade studies |
| `review` | `#reports` | Audits, quality checks |
| `data` | `#knowledge-base` | Raw data, material properties, reference info |
Manager can override the default channel per task.
### 5. Discord Channel Usage (refined)
| Channel | Purpose | Who Posts |
|---------|---------|-----------|
| `#reports` | Final summaries, orchestration distillates | Secretary (primary), Manager |
| `#feed` | Orchestration plans, sprint status, kanban snapshots | Manager |
| `#technical` | Technical work, analysis results, code | Tech-Lead, Optimizer, NX-Expert, Webster |
| `#knowledge-base` | Permanent reference data, lessons learned | Any agent |
| `#announcements` | Major decisions, milestones | Manager, Antoine |
| `#agent-logs` | Verbose process logs (not for Antoine) | Any agent |
---
## Implementation Plan
### Phase 1: Foundation (immediate)
1. Create `shared/taskboard.json` with empty task list
2. Create `shared/orchestration-log.md`
3. Create `shared/skills/taskboard/` — shell scripts for agents to:
- `read-tasks.sh <agent>` — list my assigned tasks
- `update-status.sh <task-id> <status> [note]` — log progress (appends to project_log.md)
- `create-task.sh` — Manager only, adds task to taskboard
- `complete-task.sh <task-id>` — Manager only, marks done
4. Update Manager's `AGENTS.md` with orchestration protocol
5. Update Secretary's `AGENTS.md` with condensation protocol
6. Update all agents' `AGENTS.md` with task-reading protocol
### Phase 2: Workflow enforcement
1. Manager HEARTBEAT checks taskboard for stale tasks (in-progress > 4h with no updates)
2. Secretary HEARTBEAT checks for completed orchestration chains needing condensation
3. Kanban snapshot posted to `#feed` by Manager (daily or on-demand)
### Phase 3: Dashboard integration (later, CEO view)
1. Dashboard backend reads `taskboard.json` directly
2. Frontend renders kanban board
3. Antoine can view/filter tasks, see agent activity
4. Eventually: approve/reject deliverables from dashboard
---
## Key Principles
1. **File-based, not API-based**`taskboard.json` is the single source of truth. No database needed. Every agent can read it. Only Manager writes it.
2. **Append-only logs** — Agents never edit shared state directly. They append to `project_log.md`. Manager synthesizes.
3. **Orchestration plans are visible** — Manager always posts the plan before executing. Antoine sees what's coming.
4. **Secretary is always the last step** — Every orchestration chain ends with Secretary producing a readable summary for Discord.
5. **Deliverables go to the right place** — Target channel is part of the task definition, not an afterthought.
6. **Progressive automation** — Start with scripts + protocols. Dashboard frontend comes later when the workflow is proven.
---
## Dependencies
- Delegate skill already works (hooks API)
- Discord channels exist
- Agent workspaces exist
- `project_log.md` append pattern already in use
## Risks
- Agents may not reliably read taskboard on every session (mitigate: add to HEARTBEAT.md)
- JSON file corruption if multiple writers (mitigate: Manager is sole writer)
- Task staleness if agents don't report progress (mitigate: Manager heartbeat checks)

View File

@@ -86,3 +86,19 @@ Messages from Discord arrive formatted as: `[Discord #channel] username: message
- Code must include: imports, undo marks, builder destroy, exception handling.
- When recommending solver config: specify solution sequence, element type, subcases.
- If a question is outside your domain, redirect to the right agent.
### 📋 Taskboard — Task Awareness
On every session start, check your assigned tasks:
```bash
CALLER=nx-expert bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --agent nx-expert
```
When working on a task:
- Update status to `in-progress`: `CALLER=nx-expert bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status in-progress --note "Started work"`
- When done, set to `review`: `CALLER=nx-expert bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status review --note "Deliverable posted to #channel"`
- Post deliverables to the Discord channel specified in the task
- Always append progress to `shared/project_log.md`
See `shared/skills/taskboard/SKILL.md` for full documentation.

View File

@@ -0,0 +1,48 @@
# Atomizer HQ — Discord Channel Guide
## How It Works
- **Shared channels:** Agents only respond when `@mentioned` by name
- **Direct messages (`#dm-{agent}`):** No mention needed — that agent always listens
- **New project?** Start exploring in `#rnd`. When it's serious → Manager creates a `#proj-*` channel.
## Standing Channels (📋 HQ)
| Channel | Purpose | Who to @mention |
|---------|---------|-----------------|
| **#hq** | CEO directives & general command | Manager listens automatically; @mention others |
| **#feed** | Activity feed — what's happening across the org | Any agent (they post updates here) |
| **#technical** | Engineering discussion | @Tech Lead, @Optimizer, @NX Expert |
| **#rnd** | R&D, ideas, experiments — before they earn a project | Any agent |
| **#lessons-learned** | Permanent post-mortems. Survives project archival. | @Auditor enforces |
| **#knowledge-base** | Curated reference material (not discussion) | Any agent to query |
| **#it** | Infrastructure & ops | @Webster |
## Project Channels (🏗️ PROJECTS)
Dynamic — Manager creates `#proj-*` channels as needed.
| Channel | Project |
|---------|---------|
| **#proj-hydrotech-beam** | Hydrotech Beam |
## Direct Messages (📨 DIRECT LINES)
No @mention needed — the agent always listens in their DM channel.
| Channel | Agent |
|---------|-------|
| `#dm-manager` | Manager |
| `#dm-tech-lead` | Tech Lead |
| `#dm-secretary` | Secretary |
| `#dm-auditor` | Auditor |
| `#dm-optimizer` | Optimizer |
| `#dm-study-builder` | Study Builder |
| `#dm-nx-expert` | NX Expert |
| `#dm-webster` | Webster |
## What's Different From Before
- **#feed** is the game-changer — no more guessing what's happening
- **#lessons-learned** is permanent — survives project archival, Auditor enforces post-mortems
- **#knowledge-base** stays as curated reference (not discussion — use #rnd or #technical)
- **#rnd** gives ideas a place to live before they earn a project channel
- **#it** separates infra noise from real work
- Direct lines renamed `#dm-*` for clarity
- 6 standing + 8 direct lines + dynamic project channels = clean but powerful

View File

@@ -124,3 +124,15 @@ When you receive a task with `[ORCHESTRATED TASK — run_id: ...]`, you MUST:
- If gaps exist, set status to "partial" and explain in notes
5. Write the handoff file BEFORE posting to Discord. The orchestrator is waiting for it.
## 🚨 Escalation Routing — READ THIS
When you are **blocked and need Antoine's input** (a decision, approval, clarification):
1. Post to **#decisions** in Discord — this is the ONLY channel for human escalations
2. Include: what you need decided, your recommendation, and what's blocked
3. Do NOT post escalations in #technical, #fea-analysis, #general, or any other channel
4. Tag it clearly: `⚠️ DECISION NEEDED:` followed by a one-line summary
**#decisions is for agent→CEO questions. #ceo-office is for Manager→CEO only.**

View File

@@ -1,18 +1,13 @@
# TOOLS.md — NX Expert
## Primary Tool: NXOpen MCP Documentation Server
- **Path:** `/home/papa/atomizer/tools/nxopen-mcp/`
- **Venv:** `.venv/` (activate before use)
- **Data:** `./data/` — 15,509 classes, 66,781 methods, 426 functions
- **Sources:** NXOpen API stubs (NX 2512), nxopentse helpers, pyNastran BDF/OP2
## Shared Resources
- **Atomizer repo:** `/home/papa/repos/Atomizer/` (read-only)
- **Obsidian vault:** `/home/papa/obsidian-vault/` (read-only)
### NXOpen MCP HTTP API
## Skills
- `atomizer-protocols` — Company protocols (load every session)
A FastAPI server provides HTTP access to the NXOpen MCP data.
## Agent Communication
- `sessions_send` — Direct message to another agent
- Slack @mentions — Primary communication in project channels
* **URL:** `http://100.80.199.40:18860`
* **Endpoints:**
* `GET /search?query={query}&limit={limit}` - Search for classes, methods, and functions.
* `GET /class/{name}` - Get a class by its exact name.
* `GET /method/{name}` - Get a method by its exact name.
* **Source Code:** `/home/papa/repos/Atomizer/hq/tools/nxopen-mcp/http_server.py`
* **Service:** `~/.config/systemd/user/nxopen-mcp-http.service`

View File

@@ -67,3 +67,19 @@ Messages from Discord arrive formatted as: `[Discord #channel] username: message
- For config changes, ask the Manager — he's the admin
- **NEVER kill or signal the gateway process** — you run inside it
- **NEVER modify API keys or credentials**
### 📋 Taskboard — Task Awareness
On every session start, check your assigned tasks:
```bash
CALLER=optimizer bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --agent optimizer
```
When working on a task:
- Update status to `in-progress`: `CALLER=optimizer bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status in-progress --note "Started work"`
- When done, set to `review`: `CALLER=optimizer bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status review --note "Deliverable posted to #channel"`
- Post deliverables to the Discord channel specified in the task
- Always append progress to `shared/project_log.md`
See `shared/skills/taskboard/SKILL.md` for full documentation.

View File

@@ -0,0 +1,48 @@
# Atomizer HQ — Discord Channel Guide
## How It Works
- **Shared channels:** Agents only respond when `@mentioned` by name
- **Direct messages (`#dm-{agent}`):** No mention needed — that agent always listens
- **New project?** Start exploring in `#rnd`. When it's serious → Manager creates a `#proj-*` channel.
## Standing Channels (📋 HQ)
| Channel | Purpose | Who to @mention |
|---------|---------|-----------------|
| **#hq** | CEO directives & general command | Manager listens automatically; @mention others |
| **#feed** | Activity feed — what's happening across the org | Any agent (they post updates here) |
| **#technical** | Engineering discussion | @Tech Lead, @Optimizer, @NX Expert |
| **#rnd** | R&D, ideas, experiments — before they earn a project | Any agent |
| **#lessons-learned** | Permanent post-mortems. Survives project archival. | @Auditor enforces |
| **#knowledge-base** | Curated reference material (not discussion) | Any agent to query |
| **#it** | Infrastructure & ops | @Webster |
## Project Channels (🏗️ PROJECTS)
Dynamic — Manager creates `#proj-*` channels as needed.
| Channel | Project |
|---------|---------|
| **#proj-hydrotech-beam** | Hydrotech Beam |
## Direct Messages (📨 DIRECT LINES)
No @mention needed — the agent always listens in their DM channel.
| Channel | Agent |
|---------|-------|
| `#dm-manager` | Manager |
| `#dm-tech-lead` | Tech Lead |
| `#dm-secretary` | Secretary |
| `#dm-auditor` | Auditor |
| `#dm-optimizer` | Optimizer |
| `#dm-study-builder` | Study Builder |
| `#dm-nx-expert` | NX Expert |
| `#dm-webster` | Webster |
## What's Different From Before
- **#feed** is the game-changer — no more guessing what's happening
- **#lessons-learned** is permanent — survives project archival, Auditor enforces post-mortems
- **#knowledge-base** stays as curated reference (not discussion — use #rnd or #technical)
- **#rnd** gives ideas a place to live before they earn a project channel
- **#it** separates infra noise from real work
- Direct lines renamed `#dm-*` for clarity
- 6 standing + 8 direct lines + dynamic project channels = clean but powerful

View File

@@ -165,3 +165,15 @@ step2=$(bash /home/papa/atomizer/workspaces/shared/skills/orchestrate/orchestrat
```
Always check step status before continuing. If any step fails, stop and return partial progress.
## 🚨 Escalation Routing — READ THIS
When you are **blocked and need Antoine's input** (a decision, approval, clarification):
1. Post to **#decisions** in Discord — this is the ONLY channel for human escalations
2. Include: what you need decided, your recommendation, and what's blocked
3. Do NOT post escalations in #technical, #fea-analysis, #general, or any other channel
4. Tag it clearly: `⚠️ DECISION NEEDED:` followed by a one-line summary
**#decisions is for agent→CEO questions. #ceo-office is for Manager→CEO only.**

View File

@@ -52,6 +52,39 @@ Messages from Discord arrive formatted as: `[Discord #channel] username: message
- Approval request formatting
- Meeting/deadline tracking
### 📋 Condensation Protocol (Orchestration Summaries)
You are the **final step** in every orchestration chain. After Manager completes a set of tasks:
1. **Read the taskboard** for completed tasks in the chain:
```bash
bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --status done
```
2. **Read orchestration-log.md** for the orchestration plan context:
```bash
cat /home/papa/atomizer/workspaces/shared/orchestration-log.md
```
3. **Produce a condensation/distillate** — a readable summary of:
- What was the objective
- What each agent delivered
- Key findings/decisions
- Any follow-up items
4. **Post to Discord `#reports`** — this is the official record for Antoine
5. **Update your task status** on the taskboard:
```bash
CALLER=secretary bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status review --note "Distillate posted to #reports"
```
### Task Awareness
On session start, check your assigned tasks:
```bash
CALLER=secretary bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --agent secretary
```
## Agent Directory
| Agent | ID | Role |
|-------|----|------|
@@ -64,3 +97,9 @@ Messages from Discord arrive formatted as: `[Discord #channel] username: message
- For config changes (channels, routing, bindings), ask the Manager — he's the admin
- **NEVER kill or signal the gateway process** — you run inside it
- **NEVER modify API keys or credentials**
### ⚠️ CRITICAL: No Retry Loops
If you fail to post to a Discord channel, **do NOT retry repeatedly or DM Antoine about it.**
- Try once. If it fails, log the failure in `project_log.md` and move on.
- Do NOT send status updates about "Discord being down" to Antoine's DM.
- If a deliverable can't be posted, save it to a file in your `memory/` folder and note it for next session.

View File

@@ -0,0 +1,48 @@
# Atomizer HQ — Discord Channel Guide
## How It Works
- **Shared channels:** Agents only respond when `@mentioned` by name
- **Direct messages (`#dm-{agent}`):** No mention needed — that agent always listens
- **New project?** Start exploring in `#rnd`. When it's serious → Manager creates a `#proj-*` channel.
## Standing Channels (📋 HQ)
| Channel | Purpose | Who to @mention |
|---------|---------|-----------------|
| **#hq** | CEO directives & general command | Manager listens automatically; @mention others |
| **#feed** | Activity feed — what's happening across the org | Any agent (they post updates here) |
| **#technical** | Engineering discussion | @Tech Lead, @Optimizer, @NX Expert |
| **#rnd** | R&D, ideas, experiments — before they earn a project | Any agent |
| **#lessons-learned** | Permanent post-mortems. Survives project archival. | @Auditor enforces |
| **#knowledge-base** | Curated reference material (not discussion) | Any agent to query |
| **#it** | Infrastructure & ops | @Webster |
## Project Channels (🏗️ PROJECTS)
Dynamic — Manager creates `#proj-*` channels as needed.
| Channel | Project |
|---------|---------|
| **#proj-hydrotech-beam** | Hydrotech Beam |
## Direct Messages (📨 DIRECT LINES)
No @mention needed — the agent always listens in their DM channel.
| Channel | Agent |
|---------|-------|
| `#dm-manager` | Manager |
| `#dm-tech-lead` | Tech Lead |
| `#dm-secretary` | Secretary |
| `#dm-auditor` | Auditor |
| `#dm-optimizer` | Optimizer |
| `#dm-study-builder` | Study Builder |
| `#dm-nx-expert` | NX Expert |
| `#dm-webster` | Webster |
## What's Different From Before
- **#feed** is the game-changer — no more guessing what's happening
- **#lessons-learned** is permanent — survives project archival, Auditor enforces post-mortems
- **#knowledge-base** stays as curated reference (not discussion — use #rnd or #technical)
- **#rnd** gives ideas a place to live before they earn a project channel
- **#it** separates infra noise from real work
- Direct lines renamed `#dm-*` for clarity
- 6 standing + 8 direct lines + dynamic project channels = clean but powerful

View File

@@ -1,5 +1,17 @@
# HEARTBEAT.md
## Condensation Check (every heartbeat)
1. Check for completed orchestration chains needing summary:
```bash
bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --status done
```
- If there are recently completed task clusters that haven't been summarized: produce condensation and post to Discord `#reports`
2. Check your own assigned tasks:
```bash
CALLER=secretary bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --agent secretary
```
## Task Board Check
1. Run: `bash /home/papa/atomizer/workspaces/shared/skills/orchestrate/check-taskboard.sh secretary`
2. If tasks pending for you: work on them or update status

View File

@@ -193,3 +193,61 @@ When you receive a task with `[ORCHESTRATED TASK — run_id: ...]`, you MUST:
- If gaps exist, set status to "partial" and explain in notes
5. Write the handoff file BEFORE posting to Discord. The orchestrator is waiting for it.
---
## Orchestration Distillate Protocol
After every orchestration run where you're tasked with condensing/summarizing results, you MUST also post a **distillate** to Discord `#reports` channel.
### What is a Distillate?
A clean, human-readable summary for Antoine to consume. Not the full process — just the essentials.
### Format
Post to Discord #reports using the message tool with `channel: "discord"` and `target: "channel:reports"`:
```
📋 **Orchestration Report — [Topic]**
📅 [Date]
**What happened:**
[2-3 sentence summary of what was done]
**Key findings:**
- [Finding 1]
- [Finding 2]
- [Finding 3 if applicable]
**Decisions made:**
- [Decision or recommendation]
**Deliverables:**
- 📄 [Document name] → `[file path]`
- [Other artifacts]
**Status:** [✅ Complete | ⚠️ Needs follow-up | 🔴 Blocked]
**Next steps:**
- [What happens next, if anything]
```
### Rules
- Post AFTER you've written the condensation file
- One distillate per orchestration run (don't post per-agent, post the synthesis)
- Keep it concise — Antoine should be able to read it in 30 seconds
- Include file paths so Antoine knows where to find detailed docs
- If the orchestration had critical findings (like the auditor rejecting work), lead with that
- Use bullet lists, not paragraphs (Discord formatting)
- Tag findings as 🔴 Critical, 🟡 Major, 🟢 Minor when applicable
## 🚨 Escalation Routing — READ THIS
When you are **blocked and need Antoine's input** (a decision, approval, clarification):
1. Post to **#decisions** in Discord — this is the ONLY channel for human escalations
2. Include: what you need decided, your recommendation, and what's blocked
3. Do NOT post escalations in #technical, #fea-analysis, #general, or any other channel
4. Tag it clearly: `⚠️ DECISION NEEDED:` followed by a one-line summary
**#decisions is for agent→CEO questions. #ceo-office is for Manager→CEO only.**

View File

@@ -0,0 +1,6 @@
# Daily Log — 2026-02-16
- Prepared and sent the morning briefing to Antoine.
- Received critical risk report for P-Adaptive-Isogrid tool. Messaging system is down, so I have queued the report for delivery once service is restored.
- A new thermal analysis summary is also complete and queued for delivery.
- A third automated task ("delegation") has also completed and is queued.

View File

@@ -1,7 +1,24 @@
# Pending Items — Needs Antoine's Attention
## P-Adaptive-Isogrid SOTA Review — CRITICAL RISK IDENTIFIED
- **Summary:** The SOTA review for the P-Adaptive-Isogrid tool is complete. It identified a **critical risk**: the tool is completely blind to buckling, a primary failure mode.
- **Plan:** A prioritized list of 5 improvements has been established, with an analytical buckling check as the highest priority.
- **Deliverable:** `/home/papa/atomizer/hq/condensations/2026-02-16-isogrid-sota-review.md`
- **Action:** Inform Antoine as soon as Discord communication is restored.
## Thermal Analysis Report
- **Summary:** A thermal analysis report has been summarized and is ready for review.
- **Action:** Post to #reports channel once Discord communication is restored.
## Delegation Task
- **Summary:** A delegation task has completed but could not post its report.
- **Action:** Post to relevant channel once Discord communication is restored.
## Hydrotech Beam Project — Status
- Technical gaps resolved, displacement constraint relaxed 10mm → 20mm (DEC-HB-012, CEO approved)
- Mass NaN bug fixed (commit `580ed65`)
- **Next:** Pull fix on dalidou, test single trial, re-run full DOE with 20mm constraint
- **Updated:** 2026-02-14 (digestion cycle)
- **Updated:** 2026-02-14 (digestion cycle)
## System Alert: Discord Communication Failure
- The `message` tool is consistently failing. This is preventing automated reports and manual messages from being sent. Needs investigation.

View File

View File

@@ -0,0 +1,48 @@
# Atomizer HQ — Discord Channel Guide
## How It Works
- **Shared channels:** Agents only respond when `@mentioned` by name
- **Direct messages (`#dm-{agent}`):** No mention needed — that agent always listens
- **New project?** Start exploring in `#rnd`. When it's serious → Manager creates a `#proj-*` channel.
## Standing Channels (📋 HQ)
| Channel | Purpose | Who to @mention |
|---------|---------|-----------------|
| **#hq** | CEO directives & general command | Manager listens automatically; @mention others |
| **#feed** | Activity feed — what's happening across the org | Any agent (they post updates here) |
| **#technical** | Engineering discussion | @Tech Lead, @Optimizer, @NX Expert |
| **#rnd** | R&D, ideas, experiments — before they earn a project | Any agent |
| **#lessons-learned** | Permanent post-mortems. Survives project archival. | @Auditor enforces |
| **#knowledge-base** | Curated reference material (not discussion) | Any agent to query |
| **#it** | Infrastructure & ops | @Webster |
## Project Channels (🏗️ PROJECTS)
Dynamic — Manager creates `#proj-*` channels as needed.
| Channel | Project |
|---------|---------|
| **#proj-hydrotech-beam** | Hydrotech Beam |
## Direct Messages (📨 DIRECT LINES)
No @mention needed — the agent always listens in their DM channel.
| Channel | Agent |
|---------|-------|
| `#dm-manager` | Manager |
| `#dm-tech-lead` | Tech Lead |
| `#dm-secretary` | Secretary |
| `#dm-auditor` | Auditor |
| `#dm-optimizer` | Optimizer |
| `#dm-study-builder` | Study Builder |
| `#dm-nx-expert` | NX Expert |
| `#dm-webster` | Webster |
## What's Different From Before
- **#feed** is the game-changer — no more guessing what's happening
- **#lessons-learned** is permanent — survives project archival, Auditor enforces post-mortems
- **#knowledge-base** stays as curated reference (not discussion — use #rnd or #technical)
- **#rnd** gives ideas a place to live before they earn a project channel
- **#it** separates infra noise from real work
- Direct lines renamed `#dm-*` for clarity
- 6 standing + 8 direct lines + dynamic project channels = clean but powerful

View File

@@ -0,0 +1,42 @@
# Discord Channel Reference — Atomizer HQ
When posting to Discord, ALWAYS use the message tool with:
- `channel: "discord"`
- `target: "channel:<channel-name>"`
⚠️ NEVER use raw numeric IDs without the `channel:` or `user:` prefix. OpenClaw requires this to disambiguate.
## Key Channels
| Channel | Use for |
|---------|---------|
| `channel:reports` | Secretary condensation summaries, orchestration distillates |
| `channel:feed` | Kanban snapshots, orchestration plans, status updates |
| `channel:hq` | Company-wide coordination, task discussion |
| `channel:technical` | Technical deliverables, analysis results, code |
| `channel:knowledge-base` | New KB entries, reference data, material properties |
| `channel:rnd` | R&D discussions |
| `channel:lessons-learned` | Lessons learned, post-mortems |
| `channel:it` | Infrastructure, tooling |
## Deliverable Routing (from taskboard)
| Deliverable Type | Default Channel |
|-----------------|-----------------|
| document | `channel:reports` |
| code | `channel:technical` |
| analysis | `channel:technical` |
| recommendation | `channel:reports` |
| review | `channel:reports` |
| data | `channel:knowledge-base` |
## Antoine's DM
To DM Antoine: `target: "user:719982779793932419"`
## Example (message tool)
```json
{
"action": "send",
"channel": "discord",
"target": "channel:reports",
"message": "📋 **Report Title**\n\nContent here..."
}
```

View File

@@ -0,0 +1,28 @@
# Orchestration Log
_Append-only. Manager posts orchestration plans here before delegating work._
---
## [2026-02-17 01:42] Orchestration: System Test — Taskboard Validation
**Objective:** Validate the new taskboard orchestration workflow end-to-end
**Tasks created:** TASK-001, TASK-002
**Agent assignments:**
- Webster → Quick research task (TASK-001)
- Secretary → Summarize results and post to #reports (TASK-002, after TASK-001)
**Dependencies:** TASK-002 waits on TASK-001
**Expected output:** Webster posts to #technical, Secretary posts distillate to #reports
**ETA:** ~15 minutes
---
## [2026-02-17 02:04] Orchestration: M2 Mirror Material Trade Study
**Objective:** Compare Zerodur Class 0 and Clearceram-Z HS for the M2 mirror application and provide a final recommendation.
**Tasks created:** TASK-001, TASK-002, TASK-003 (will be created by the workflow)
**Agent assignments:**
- Webster: Research thermal and mechanical properties.
- Tech Lead: Assess materials against thermal stability requirements.
- Secretary: Summarize findings into a recommendation report.
**Dependencies:** Tech Lead's work depends on Webster's output. Secretary's work depends on the Tech Lead's output.
**Expected output:** A final recommendation report posted by the Secretary.

View File

@@ -5,3 +5,24 @@
[2026-02-15 18:30] Webster: Completed — Logged new material property (Invar 36 Young's modulus) to memory.
[2026-02-15 18:30] Webster: Completed — Received duplicate material property for Invar 36. No action taken as data is already in memory.
[2026-02-16 03:03] webster: Completed — Research on thermal conductivity of SiC and comparison with ULE and Zerodur.
[2026-02-16 14:05] Auditor: Completed — Challenged the Technical Lead on the 'P-Adaptive-Isogrid vs State-of-the-Art' review in the #technical channel.
[2026-02-16 15:35] Auditor: Completed — Sent a direct message to the Tech Lead to follow up on the 'P-Adaptive-Isogrid vs State-of-the-Art' review.
[2026-02-16 17:12] Auditor: Completed — Notified the Manager that I am blocked on the 'P-Adaptive-Isogrid vs State-of-the-Art' review pending a response from the Tech Lead.
[2026-02-16 12:56] Webster: Completed — Logged CEO decision to prioritize structural performance for the lightweight bracket, selecting 7075-T6.
[2026-02-17 01:41] [manager] TASK-001: Created — Research: What is the melting point of Invar 36? (assigned to webster)
[2026-02-17 01:41] [manager] TASK-002: Created — Summarize system test orchestration (assigned to secretary)
[2026-02-17 01:42] [webster] TASK-001: Status → in-progress — Started research
[2026-02-17 01:42] [webster] TASK-001: Status → review — Posted to #technical
[2026-02-16 20:42] webster: Completed — Researched melting point of Invar 36 (TASK-001)
[2026-02-17 01:42] [manager] TASK-001: Completed — Deliverable accepted — melting point data posted to #technical
[2026-02-17 01:43] [secretary] TASK-002: Status → in-progress — Starting condensation
[2026-02-17 01:43] [secretary] TASK-002: Status → review — Distillate composed, but failed to post to #reports due to tool error.
[2026-02-17 03:05] [manager] TASK-002: Status → in-progress — Manager: Tool error prevented report delivery. Please provide the summary directly to me in the #hq channel.
[2026-02-17 04:06] [manager] TASK-003: Created — Resolve blocked task: Clearceram-Z HS data (assigned to manager)
[2026-02-16 23:21] Webster: Completed — Verified CTE and Density for Clearceram-Z HS.
[2026-02-16 23:55] Webster: Reviewed state-of-the-art for isogrid design optimization in aerospace, focusing on mass-strength trade-offs and novel geometries. Found no external or internal references to 'P-Adaptive-Isogrid.' Ready to contribute to the review once pointed to the relevant internal documents or discussions.
[2026-02-17 06:35] [manager] TASK-003: Completed — Webster reported completing the data verification in the project log, unblocking the original task. Closing this resolution task.
[2026-02-17 07:05] [manager] TASK-002: Status → in-progress — Checking in on status, since original delivery was blocked by a tool error.
[2026-02-17 09:05] [manager] TASK-002: Cancelled — Secretary appears to be stuck; tool error on deliverable. Re-creating as TASK-004 assigned to manager to unblock.
[2026-02-17 09:05] [manager] TASK-004: Created — Summarize system test orchestration (replaces TASK-002) (assigned to manager)
[2026-02-17 09:05] [manager] TASK-004: Completed — Summary posted to #reports channel.

View File

@@ -159,11 +159,16 @@ Write the file BEFORE posting to Discord. The orchestrator is waiting for it."""
if context:
message = f"CONTEXT:\n{context}\n\n{message}"
# Map agent to their Discord delivery channel (dl-<agent>)
discord_channel = f"channel:dl-{agent}"
payload = {
"message": message,
"name": f"orchestrate:{run_id}",
"sessionKey": f"hook:orchestrate:{run_id}:{attempt}",
"deliver": not no_deliver,
"channel": "discord",
"to": discord_channel,
"wakeMode": "now",
"timeoutSeconds": 600,
}

View File

@@ -0,0 +1,72 @@
# Taskboard — Kanban Task Management
Central orchestration tool for Atomizer HQ. All agents interact with the shared taskboard.
## Quick Reference
```bash
TB="/home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh"
# List your tasks
CALLER=my-agent-name bash "$TB" list --agent my-agent-name
# List by status or project
bash "$TB" list --status in-progress
bash "$TB" list --project gigabit-m2
# View task details
bash "$TB" view TASK-001
# Update task status (any agent can update their own tasks)
CALLER=my-agent-name bash "$TB" update TASK-001 --status in-progress --note "Started research"
CALLER=my-agent-name bash "$TB" update TASK-001 --status review --note "Draft posted to #technical"
# Kanban summary (counts per column)
bash "$TB" summary
# Kanban snapshot (markdown for Discord)
bash "$TB" snapshot
```
## Manager-Only Commands
```bash
# Create a task
CALLER=manager bash "$TB" create \
--title "Research CCZ thermal properties" \
--assignee webster \
--priority high \
--project gigabit-m2 \
--description "Full thermal comparison: CTE, conductivity for CCZ HS vs Zerodur" \
--deliverable-type analysis \
--deliverable-channel technical
# Complete a task
CALLER=manager bash "$TB" complete TASK-001 --note "Deliverable accepted"
# Cancel a task
CALLER=manager bash "$TB" cancel TASK-002 --reason "Superseded by new approach"
```
## Status Flow
```
backlog → todo → in-progress → review → done
cancelled
```
## For Executor Agents (non-Manager)
On every session start:
1. Check your tasks: `CALLER=<you> bash "$TB" list --agent <you>`
2. If you have `todo` tasks: update to `in-progress` and start working
3. When work is done: update to `review` and post deliverable to the target Discord channel
4. Append progress to `shared/project_log.md`
## Important
- **taskboard.json is the single source of truth** — never edit it directly
- **Only Manager creates/completes/cancels tasks** — other agents update status
- **All writes are atomic** (tmp file + mv) with flock locking
- **Set CALLER env var** so your name appears in logs and notes

View File

@@ -0,0 +1,380 @@
#!/usr/bin/env bash
# taskboard.sh — Kanban task management for Atomizer HQ
# Usage: taskboard.sh <command> [options]
#
# Commands:
# list [--agent <name>] [--status <s>] [--project <tag>]
# create --title '...' --assignee <agent> --priority <p> --project <tag> --description '...' [--deliverable-type <type>] [--deliverable-channel <ch>] [--due <iso>]
# update <task-id> --status <new> [--note '...']
# complete <task-id> [--note '...']
# cancel <task-id> --reason '...'
# view <task-id>
# summary
# snapshot
#
# Environment:
# CALLER — agent name (used for logging, optional)
set -euo pipefail
TASKBOARD="/home/papa/atomizer/workspaces/shared/taskboard.json"
LOCKFILE="/home/papa/atomizer/workspaces/shared/.taskboard.lock"
PROJECT_LOG="/home/papa/atomizer/workspaces/shared/project_log.md"
CALLER="${CALLER:-unknown}"
NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
NOW_LOG=$(date -u +"%Y-%m-%d %H:%M")
# --- Helpers ---
die() { echo "$*" >&2; exit 1; }
# Atomic write: write to tmp, then mv
atomic_write() {
local tmp="${TASKBOARD}.tmp.$$"
cat > "$tmp"
mv -f "$tmp" "$TASKBOARD"
}
# Write lock (flock on fd 9)
lock_write() {
exec 9>"$LOCKFILE"
flock -w 5 9 || die "Could not acquire lock"
}
unlock_write() {
flock -u 9 2>/dev/null || true
}
# Append to project log
log_entry() {
echo "[$NOW_LOG] [$CALLER] $*" >> "$PROJECT_LOG"
}
# Get next task ID
next_id() {
local max
max=$(jq -r '[.tasks[].id | ltrimstr("TASK-") | tonumber] | max // 0' "$TASKBOARD")
printf "TASK-%03d" $(( max + 1 ))
}
# --- Commands ---
cmd_list() {
local agent="" status="" project=""
while [[ $# -gt 0 ]]; do
case "$1" in
--agent) agent="$2"; shift 2 ;;
--status) status="$2"; shift 2 ;;
--project) project="$2"; shift 2 ;;
*) die "Unknown option: $1" ;;
esac
done
local filter=".tasks"
[[ -n "$agent" ]] && filter="$filter | map(select(.assignee == \"$agent\"))"
[[ -n "$status" ]] && filter="$filter | map(select(.status == \"$status\"))"
[[ -n "$project" ]] && filter="$filter | map(select(.project == \"$project\"))"
local result
result=$(jq -r "$filter | .[] | \"[\(.status | ascii_upcase)] \(.id) [\(.priority)] \(.title) → \(.assignee)\"" "$TASKBOARD")
if [[ -z "$result" ]]; then
echo "No tasks found."
else
echo "$result"
fi
}
cmd_create() {
local title="" assignee="" priority="medium" project="" description=""
local del_type="" del_channel="" due="null"
while [[ $# -gt 0 ]]; do
case "$1" in
--title) title="$2"; shift 2 ;;
--assignee) assignee="$2"; shift 2 ;;
--priority) priority="$2"; shift 2 ;;
--project) project="$2"; shift 2 ;;
--description) description="$2"; shift 2 ;;
--deliverable-type) del_type="$2"; shift 2 ;;
--deliverable-channel) del_channel="$2"; shift 2 ;;
--due) due="\"$2\""; shift 2 ;;
*) die "Unknown option: $1" ;;
esac
done
[[ -z "$title" ]] && die "Missing --title"
[[ -z "$assignee" ]] && die "Missing --assignee"
[[ -z "$project" ]] && die "Missing --project"
lock_write
local id
id=$(next_id)
# Build deliverable object
local deliverable="null"
if [[ -n "$del_type" || -n "$del_channel" ]]; then
deliverable=$(jq -n \
--arg t "${del_type:-document}" \
--arg c "${del_channel:-reports}" \
'{type: $t, targetChannel: $c, format: ""}')
fi
# Add task
jq --arg id "$id" \
--arg title "$title" \
--arg desc "$description" \
--arg status "todo" \
--arg priority "$priority" \
--arg assignee "$assignee" \
--arg requestedBy "$CALLER" \
--arg project "$project" \
--argjson deliverable "$deliverable" \
--arg created "$NOW" \
--arg updated "$NOW" \
--argjson dueBy "$due" \
'.tasks += [{
id: $id,
title: $title,
description: $desc,
status: $status,
priority: $priority,
assignee: $assignee,
requestedBy: $requestedBy,
project: $project,
deliverable: $deliverable,
created: $created,
updated: $updated,
dueBy: $dueBy,
notes: [],
completedAt: null
}] | .lastUpdated = $created | .updatedBy = $requestedBy' \
"$TASKBOARD" | atomic_write
unlock_write
log_entry "$id: Created — $title (assigned to $assignee)"
echo "✅ Created $id: $title$assignee"
}
cmd_update() {
local task_id="${1:-}"; shift || die "Usage: update <task-id> --status <s> [--note '...']"
local status="" note=""
while [[ $# -gt 0 ]]; do
case "$1" in
--status) status="$2"; shift 2 ;;
--note) note="$2"; shift 2 ;;
*) die "Unknown option: $1" ;;
esac
done
[[ -z "$status" ]] && die "Missing --status"
# Validate status
case "$status" in
backlog|todo|in-progress|review|done|cancelled) ;;
*) die "Invalid status: $status (must be backlog|todo|in-progress|review|done|cancelled)" ;;
esac
lock_write
# Check task exists
local exists
exists=$(jq -r --arg id "$task_id" '.tasks | map(select(.id == $id)) | length' "$TASKBOARD")
[[ "$exists" -eq 0 ]] && { unlock_write; die "Task $task_id not found"; }
local note_entry=""
[[ -n "$note" ]] && note_entry="[$NOW_LOG] [$CALLER] $note"
jq --arg id "$task_id" \
--arg status "$status" \
--arg updated "$NOW" \
--arg updatedBy "$CALLER" \
--arg note "$note_entry" \
'(.tasks[] | select(.id == $id)) |= (
.status = $status |
.updated = $updated |
if $note != "" then .notes += [$note] else . end
) | .lastUpdated = $updated | .updatedBy = $updatedBy' \
"$TASKBOARD" | atomic_write
unlock_write
log_entry "$task_id: Status → $status${note:+ — $note}"
echo "$task_id$status"
}
cmd_complete() {
local task_id="${1:-}"; shift || die "Usage: complete <task-id> [--note '...']"
local note=""
while [[ $# -gt 0 ]]; do
case "$1" in
--note) note="$2"; shift 2 ;;
*) die "Unknown option: $1" ;;
esac
done
lock_write
local exists
exists=$(jq -r --arg id "$task_id" '.tasks | map(select(.id == $id)) | length' "$TASKBOARD")
[[ "$exists" -eq 0 ]] && { unlock_write; die "Task $task_id not found"; }
local note_entry=""
[[ -n "$note" ]] && note_entry="[$NOW_LOG] [$CALLER] $note"
jq --arg id "$task_id" \
--arg updated "$NOW" \
--arg updatedBy "$CALLER" \
--arg note "$note_entry" \
'(.tasks[] | select(.id == $id)) |= (
.status = "done" |
.updated = $updated |
.completedAt = $updated |
if $note != "" then .notes += [$note] else . end
) | .lastUpdated = $updated | .updatedBy = $updatedBy' \
"$TASKBOARD" | atomic_write
unlock_write
log_entry "$task_id: Completed${note:+ — $note}"
echo "$task_id → done"
}
cmd_cancel() {
local task_id="${1:-}"; shift || die "Usage: cancel <task-id> --reason '...'"
local reason=""
while [[ $# -gt 0 ]]; do
case "$1" in
--reason) reason="$2"; shift 2 ;;
*) die "Unknown option: $1" ;;
esac
done
[[ -z "$reason" ]] && die "Missing --reason"
lock_write
local exists
exists=$(jq -r --arg id "$task_id" '.tasks | map(select(.id == $id)) | length' "$TASKBOARD")
[[ "$exists" -eq 0 ]] && { unlock_write; die "Task $task_id not found"; }
local note_entry="[$NOW_LOG] [$CALLER] Cancelled: $reason"
jq --arg id "$task_id" \
--arg updated "$NOW" \
--arg updatedBy "$CALLER" \
--arg note "$note_entry" \
'(.tasks[] | select(.id == $id)) |= (
.status = "cancelled" |
.updated = $updated |
.notes += [$note]
) | .lastUpdated = $updated | .updatedBy = $updatedBy' \
"$TASKBOARD" | atomic_write
unlock_write
log_entry "$task_id: Cancelled — $reason"
echo "$task_id → cancelled"
}
cmd_view() {
local task_id="${1:-}"; [[ -z "$task_id" ]] && die "Usage: view <task-id>"
local task
task=$(jq -r --arg id "$task_id" '.tasks[] | select(.id == $id)' "$TASKBOARD")
[[ -z "$task" ]] && die "Task $task_id not found"
echo "$task" | jq -r '
"═══════════════════════════════════════",
" \(.id) — \(.title)",
"═══════════════════════════════════════",
" Status: \(.status)",
" Priority: \(.priority)",
" Assignee: \(.assignee)",
" Requested by: \(.requestedBy)",
" Project: \(.project)",
" Created: \(.created)",
" Updated: \(.updated)",
" Due: \(.dueBy // "none")",
" Completed: \(.completedAt // "—")",
"",
" Description:",
" \(.description)",
"",
if (.deliverable != null) then
" Deliverable:",
" Type: \(.deliverable.type)",
" Channel: #\(.deliverable.targetChannel)",
""
else "" end,
if ((.notes | length) > 0) then
" Notes:",
(.notes[] | " • \(.)")
else " Notes: (none)" end
'
}
cmd_summary() {
echo "📋 Taskboard Summary"
echo "════════════════════"
jq -r '
.tasks | group_by(.status) | map({
status: .[0].status,
count: length
}) | sort_by(.status) | .[] |
" \(.status | ascii_upcase): \(.count)"
' "$TASKBOARD"
local total
total=$(jq '.tasks | length' "$TASKBOARD")
echo "────────────────────"
echo " TOTAL: $total"
}
cmd_snapshot() {
# Markdown kanban for Discord posting
echo "# 📋 Taskboard Snapshot"
echo "_Updated: $(date -u +"%Y-%m-%d %H:%M UTC")_"
echo ""
for status in backlog todo in-progress review done; do
local label
case "$status" in
backlog) label="📥 Backlog" ;;
todo) label="📌 To Do" ;;
in-progress) label="🔄 In Progress" ;;
review) label="🔍 Review" ;;
done) label="✅ Done" ;;
esac
local tasks
tasks=$(jq -r --arg s "$status" '
.tasks | map(select(.status == $s)) |
if length == 0 then "_(empty)_"
else .[] | "- **\(.id)** \(.title) → `\(.assignee)` [\(.priority)]"
end
' "$TASKBOARD")
echo "## $label"
echo "$tasks"
echo ""
done
}
# --- Main ---
cmd="${1:-}"; shift || die "Usage: taskboard.sh <command> [options]
Commands: list, create, update, complete, cancel, view, summary, snapshot"
case "$cmd" in
list) cmd_list "$@" ;;
create) cmd_create "$@" ;;
update) cmd_update "$@" ;;
complete) cmd_complete "$@" ;;
cancel) cmd_cancel "$@" ;;
view) cmd_view "$@" ;;
summary) cmd_summary ;;
snapshot) cmd_snapshot ;;
*) die "Unknown command: $cmd" ;;
esac

View File

@@ -0,0 +1,97 @@
{
"version": 1,
"lastUpdated": "2026-02-17T09:05:27Z",
"updatedBy": "manager",
"tasks": [
{
"id": "TASK-001",
"title": "Research: What is the melting point of Invar 36?",
"description": "Quick validation task. Research the melting point of Invar 36 and post findings to #technical. Then update your task status to review.",
"status": "done",
"priority": "medium",
"assignee": "webster",
"requestedBy": "manager",
"project": "system-test",
"deliverable": {
"type": "data",
"targetChannel": "technical",
"format": ""
},
"created": "2026-02-17T01:41:59Z",
"updated": "2026-02-17T01:42:54Z",
"dueBy": null,
"notes": [
"[2026-02-17 01:42] [webster] Started research",
"[2026-02-17 01:42] [webster] Posted to #technical",
"[2026-02-17 01:42] [manager] Deliverable accepted — melting point data posted to #technical"
],
"completedAt": "2026-02-17T01:42:54Z"
},
{
"id": "TASK-002",
"title": "Summarize system test orchestration",
"description": "After TASK-001 is done, read the taskboard and orchestration log, produce a short summary of this test orchestration, and post to #reports.",
"status": "cancelled",
"priority": "medium",
"assignee": "secretary",
"requestedBy": "manager",
"project": "system-test",
"deliverable": {
"type": "document",
"targetChannel": "reports",
"format": ""
},
"created": "2026-02-17T01:41:59Z",
"updated": "2026-02-17T09:05:04Z",
"dueBy": null,
"notes": [
"[2026-02-17 01:43] [secretary] Starting condensation",
"[2026-02-17 01:43] [secretary] Distillate composed, but failed to post to #reports due to tool error.",
"[2026-02-17 03:05] [manager] Manager: Tool error prevented report delivery. Please provide the summary directly to me in the #hq channel.",
"[2026-02-17 07:05] [manager] Checking in on status, since original delivery was blocked by a tool error.",
"[2026-02-17 09:05] [manager] Cancelled: Secretary appears to be stuck; tool error on deliverable. Re-creating as TASK-004 assigned to manager to unblock."
],
"completedAt": null
},
{
"id": "TASK-003",
"title": "Resolve blocked task: Clearceram-Z HS data",
"description": "Task orch-1771176838-52dc0c1b.json (webster) is blocked because the required data for Clearceram-Z HS is only available in a PDF, and no tool is available to parse it. The web_search tool is also unavailable due to a missing API key. Needs manual intervention or a new tool/skill.",
"status": "done",
"priority": "high",
"assignee": "manager",
"requestedBy": "manager",
"project": "atomizer-ops",
"deliverable": null,
"created": "2026-02-17T04:06:25Z",
"updated": "2026-02-17T06:35:08Z",
"dueBy": null,
"notes": [
"[2026-02-17 06:35] [manager] Webster reported completing the data verification in the project log, unblocking the original task. Closing this resolution task."
],
"completedAt": "2026-02-17T06:35:08Z"
},
{
"id": "TASK-004",
"title": "Summarize system test orchestration (replaces TASK-002)",
"description": "Original task was assigned to secretary, who encountered a tool error. This task is to complete the summary of the test orchestration based on the taskboard and orchestration log, and post to the #reports channel.",
"status": "done",
"priority": "high",
"assignee": "manager",
"requestedBy": "manager",
"project": "system-test",
"deliverable": {
"type": "document",
"targetChannel": "reports",
"format": ""
},
"created": "2026-02-17T09:05:07Z",
"updated": "2026-02-17T09:05:27Z",
"dueBy": null,
"notes": [
"[2026-02-17 09:05] [manager] Summary posted to #reports channel."
],
"completedAt": "2026-02-17T09:05:27Z"
}
]
}

View File

@@ -67,3 +67,19 @@ Messages from Discord arrive formatted as: `[Discord #channel] username: message
- For config changes, ask the Manager — he's the admin
- **NEVER kill or signal the gateway process** — you run inside it
- **NEVER modify API keys or credentials**
### 📋 Taskboard — Task Awareness
On every session start, check your assigned tasks:
```bash
CALLER=study-builder bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --agent study-builder
```
When working on a task:
- Update status to `in-progress`: `CALLER=study-builder bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status in-progress --note "Started work"`
- When done, set to `review`: `CALLER=study-builder bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status review --note "Deliverable posted to #channel"`
- Post deliverables to the Discord channel specified in the task
- Always append progress to `shared/project_log.md`
See `shared/skills/taskboard/SKILL.md` for full documentation.

View File

@@ -0,0 +1,48 @@
# Atomizer HQ — Discord Channel Guide
## How It Works
- **Shared channels:** Agents only respond when `@mentioned` by name
- **Direct messages (`#dm-{agent}`):** No mention needed — that agent always listens
- **New project?** Start exploring in `#rnd`. When it's serious → Manager creates a `#proj-*` channel.
## Standing Channels (📋 HQ)
| Channel | Purpose | Who to @mention |
|---------|---------|-----------------|
| **#hq** | CEO directives & general command | Manager listens automatically; @mention others |
| **#feed** | Activity feed — what's happening across the org | Any agent (they post updates here) |
| **#technical** | Engineering discussion | @Tech Lead, @Optimizer, @NX Expert |
| **#rnd** | R&D, ideas, experiments — before they earn a project | Any agent |
| **#lessons-learned** | Permanent post-mortems. Survives project archival. | @Auditor enforces |
| **#knowledge-base** | Curated reference material (not discussion) | Any agent to query |
| **#it** | Infrastructure & ops | @Webster |
## Project Channels (🏗️ PROJECTS)
Dynamic — Manager creates `#proj-*` channels as needed.
| Channel | Project |
|---------|---------|
| **#proj-hydrotech-beam** | Hydrotech Beam |
## Direct Messages (📨 DIRECT LINES)
No @mention needed — the agent always listens in their DM channel.
| Channel | Agent |
|---------|-------|
| `#dm-manager` | Manager |
| `#dm-tech-lead` | Tech Lead |
| `#dm-secretary` | Secretary |
| `#dm-auditor` | Auditor |
| `#dm-optimizer` | Optimizer |
| `#dm-study-builder` | Study Builder |
| `#dm-nx-expert` | NX Expert |
| `#dm-webster` | Webster |
## What's Different From Before
- **#feed** is the game-changer — no more guessing what's happening
- **#lessons-learned** is permanent — survives project archival, Auditor enforces post-mortems
- **#knowledge-base** stays as curated reference (not discussion — use #rnd or #technical)
- **#rnd** gives ideas a place to live before they earn a project channel
- **#it** separates infra noise from real work
- Direct lines renamed `#dm-*` for clarity
- 6 standing + 8 direct lines + dynamic project channels = clean but powerful

View File

@@ -133,3 +133,15 @@ When you receive a task with `[ORCHESTRATED TASK — run_id: ...]`, you MUST:
- If gaps exist, set status to "partial" and explain in notes
5. Write the handoff file BEFORE posting to Discord. The orchestrator is waiting for it.
## 🚨 Escalation Routing — READ THIS
When you are **blocked and need Antoine's input** (a decision, approval, clarification):
1. Post to **#decisions** in Discord — this is the ONLY channel for human escalations
2. Include: what you need decided, your recommendation, and what's blocked
3. Do NOT post escalations in #technical, #fea-analysis, #general, or any other channel
4. Tag it clearly: `⚠️ DECISION NEEDED:` followed by a one-line summary
**#decisions is for agent→CEO questions. #ceo-office is for Manager→CEO only.**

View File

@@ -81,3 +81,19 @@ Messages from Discord arrive formatted as: `[Discord #channel] username: message
- For config changes, ask the Manager — he's the admin
- **NEVER kill or signal the gateway process** — you run inside it
- **NEVER modify API keys or credentials**
### 📋 Taskboard — Task Awareness
On every session start, check your assigned tasks:
```bash
CALLER=technical-lead bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --agent technical-lead
```
When working on a task:
- Update status to `in-progress`: `CALLER=technical-lead bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status in-progress --note "Started work"`
- When done, set to `review`: `CALLER=technical-lead bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status review --note "Deliverable posted to #channel"`
- Post deliverables to the Discord channel specified in the task
- Always append progress to `shared/project_log.md`
See `shared/skills/taskboard/SKILL.md` for full documentation.

View File

@@ -0,0 +1,48 @@
# Atomizer HQ — Discord Channel Guide
## How It Works
- **Shared channels:** Agents only respond when `@mentioned` by name
- **Direct messages (`#dm-{agent}`):** No mention needed — that agent always listens
- **New project?** Start exploring in `#rnd`. When it's serious → Manager creates a `#proj-*` channel.
## Standing Channels (📋 HQ)
| Channel | Purpose | Who to @mention |
|---------|---------|-----------------|
| **#hq** | CEO directives & general command | Manager listens automatically; @mention others |
| **#feed** | Activity feed — what's happening across the org | Any agent (they post updates here) |
| **#technical** | Engineering discussion | @Tech Lead, @Optimizer, @NX Expert |
| **#rnd** | R&D, ideas, experiments — before they earn a project | Any agent |
| **#lessons-learned** | Permanent post-mortems. Survives project archival. | @Auditor enforces |
| **#knowledge-base** | Curated reference material (not discussion) | Any agent to query |
| **#it** | Infrastructure & ops | @Webster |
## Project Channels (🏗️ PROJECTS)
Dynamic — Manager creates `#proj-*` channels as needed.
| Channel | Project |
|---------|---------|
| **#proj-hydrotech-beam** | Hydrotech Beam |
## Direct Messages (📨 DIRECT LINES)
No @mention needed — the agent always listens in their DM channel.
| Channel | Agent |
|---------|-------|
| `#dm-manager` | Manager |
| `#dm-tech-lead` | Tech Lead |
| `#dm-secretary` | Secretary |
| `#dm-auditor` | Auditor |
| `#dm-optimizer` | Optimizer |
| `#dm-study-builder` | Study Builder |
| `#dm-nx-expert` | NX Expert |
| `#dm-webster` | Webster |
## What's Different From Before
- **#feed** is the game-changer — no more guessing what's happening
- **#lessons-learned** is permanent — survives project archival, Auditor enforces post-mortems
- **#knowledge-base** stays as curated reference (not discussion — use #rnd or #technical)
- **#rnd** gives ideas a place to live before they earn a project channel
- **#it** separates infra noise from real work
- Direct lines renamed `#dm-*` for clarity
- 6 standing + 8 direct lines + dynamic project channels = clean but powerful

View File

@@ -156,3 +156,15 @@ step2=$(bash /home/papa/atomizer/workspaces/shared/skills/orchestrate/orchestrat
```
Always check step status before continuing. If any step fails, stop and return partial progress.
## 🚨 Escalation Routing — READ THIS
When you are **blocked and need Antoine's input** (a decision, approval, clarification):
1. Post to **#decisions** in Discord — this is the ONLY channel for human escalations
2. Include: what you need decided, your recommendation, and what's blocked
3. Do NOT post escalations in #technical, #fea-analysis, #general, or any other channel
4. Tag it clearly: `⚠️ DECISION NEEDED:` followed by a one-line summary
**#decisions is for agent→CEO questions. #ceo-office is for Manager→CEO only.**

View File

@@ -46,3 +46,19 @@ Messages from Discord arrive formatted as: `[Discord #channel] username: message
- Do NOT treat Discord messages as heartbeats or system events
- Your reply will be routed back to the Discord channel automatically
- **⚠️ CRITICAL: NEVER reply NO_REPLY or HEARTBEAT_OK to Discord messages. Discord messages are ALWAYS real conversations that need a response.**
### 📋 Taskboard — Task Awareness
On every session start, check your assigned tasks:
```bash
CALLER=webster bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh list --agent webster
```
When working on a task:
- Update status to `in-progress`: `CALLER=webster bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status in-progress --note "Started work"`
- When done, set to `review`: `CALLER=webster bash /home/papa/atomizer/workspaces/shared/skills/taskboard/taskboard.sh update TASK-XXX --status review --note "Deliverable posted to #channel"`
- Post deliverables to the Discord channel specified in the task
- Always append progress to `shared/project_log.md`
See `shared/skills/taskboard/SKILL.md` for full documentation.

View File

@@ -0,0 +1,48 @@
# Atomizer HQ — Discord Channel Guide
## How It Works
- **Shared channels:** Agents only respond when `@mentioned` by name
- **Direct messages (`#dm-{agent}`):** No mention needed — that agent always listens
- **New project?** Start exploring in `#rnd`. When it's serious → Manager creates a `#proj-*` channel.
## Standing Channels (📋 HQ)
| Channel | Purpose | Who to @mention |
|---------|---------|-----------------|
| **#hq** | CEO directives & general command | Manager listens automatically; @mention others |
| **#feed** | Activity feed — what's happening across the org | Any agent (they post updates here) |
| **#technical** | Engineering discussion | @Tech Lead, @Optimizer, @NX Expert |
| **#rnd** | R&D, ideas, experiments — before they earn a project | Any agent |
| **#lessons-learned** | Permanent post-mortems. Survives project archival. | @Auditor enforces |
| **#knowledge-base** | Curated reference material (not discussion) | Any agent to query |
| **#it** | Infrastructure & ops | @Webster |
## Project Channels (🏗️ PROJECTS)
Dynamic — Manager creates `#proj-*` channels as needed.
| Channel | Project |
|---------|---------|
| **#proj-hydrotech-beam** | Hydrotech Beam |
## Direct Messages (📨 DIRECT LINES)
No @mention needed — the agent always listens in their DM channel.
| Channel | Agent |
|---------|-------|
| `#dm-manager` | Manager |
| `#dm-tech-lead` | Tech Lead |
| `#dm-secretary` | Secretary |
| `#dm-auditor` | Auditor |
| `#dm-optimizer` | Optimizer |
| `#dm-study-builder` | Study Builder |
| `#dm-nx-expert` | NX Expert |
| `#dm-webster` | Webster |
## What's Different From Before
- **#feed** is the game-changer — no more guessing what's happening
- **#lessons-learned** is permanent — survives project archival, Auditor enforces post-mortems
- **#knowledge-base** stays as curated reference (not discussion — use #rnd or #technical)
- **#rnd** gives ideas a place to live before they earn a project channel
- **#it** separates infra noise from real work
- Direct lines renamed `#dm-*` for clarity
- 6 standing + 8 direct lines + dynamic project channels = clean but powerful

View File

@@ -95,3 +95,15 @@ When you receive a task with `[ORCHESTRATED TASK — run_id: ...]`, you MUST:
- If gaps exist, set status to "partial" and explain in notes
5. Write the handoff file BEFORE posting to Discord. The orchestrator is waiting for it.
## 🚨 Escalation Routing — READ THIS
When you are **blocked and need Antoine's input** (a decision, approval, clarification):
1. Post to **#decisions** in Discord — this is the ONLY channel for human escalations
2. Include: what you need decided, your recommendation, and what's blocked
3. Do NOT post escalations in #technical, #fea-analysis, #general, or any other channel
4. Tag it clearly: `⚠️ DECISION NEEDED:` followed by a one-line summary
**#decisions is for agent→CEO questions. #ceo-office is for Manager→CEO only.**