← Back to REEN

REEN Documentation

REEN is a technology platform for scientific research and engineering development. The platform has three sections: Radar (scientific paper feed), Library (document analysis with AI-generated knowledge graphs), and Engineering (Gantt planning, AI Conference, Ex-Help). AI Conferences enable cross-AI and user multi-party conversations powered by local model subscriptions.


API Documentation

Version: 2.3.0 | Last Updated: 2026-03-05

Base URL: https://backend.reen.tech
Authentication: API Token in Authorization: Bearer <token> header
⚠️ Important: API requests must be sent to backend.reen.tech, not reen.tech.
The frontend (reen.tech) does not proxy API calls and will return 500 errors.

Table of Contents

MCP Server (AI Agents)

REEN provides a native MCP (Model Context Protocol) server that gives AI agents direct access to plans, tasks, and progress tracking.

Supported clients: Claude Code, Cursor, Codex CLI, and any MCP-compatible agent.

Installation

# Clone and build
git clone https://github.com/rhoe-llc-fz/reen-mcp-server.git
cd reen-mcp-server
npm install && npm run build

Configuration (Claude Code)

Add to .mcp.json in your project root:

{
  "mcpServers": {
    "reen": {
      "command": "node",
      "args": ["/path/to/reen/mcp-server/dist/index.js"],
      "env": {
        "REEN_API_TOKEN": "reen_YOUR_TOKEN_HERE"
      }
    }
  }
}

Available Tools

ToolDescription
whoamiGet current authenticated user info
list_plansList all plans (summary or full detail)
get_planGet a plan by ID (summary: narrative + compact tree, or full with all details)
create_planCreate a new Gantt plan
update_planUpdate plan title, description, status, progress (+ change_reason, change_evidence for audit log)
delete_planDelete a plan
create_taskCreate a top-level task (phase)
create_subtaskCreate a subtask under a task
update_taskUpdate task title, status, description, progress (+ change_reason, change_evidence for audit log)
update_task_datesUpdate task start/due dates
delete_taskDelete a task
reorder_taskMove a task to a new position within its sibling group
get_plan_progressGet progress for all tasks in a plan
get_narrativeGet the narrative text content of a plan
update_narrativeUpdate the narrative text content of a plan
list_exhelpList all Ex-Help requests for a plan
create_exhelpCreate a new Ex-Help request
update_exhelpUpdate Ex-Help request (title, problem, answer, status)
get_exhelp_packGenerate a context pack for an Ex-Help request
delete_exhelpDelete an Ex-Help request
share_exhelpGenerate a public share link (7-day TTL)
list_plan_filesList files attached to a plan (narrative or exhelp)
list_conferencesList all conferences for the current user
get_conference_initial_promptGet the initial system prompt of a conference
update_conference_initial_promptUpdate the initial system prompt of a conference
list_artifactsList all artifacts for a plan
create_artifactCreate a new artifact (note/file) in a plan
update_artifactUpdate an artifact's title or content
delete_artifactDelete an artifact (soft delete)
Strategic Plans
list_strategic_plansList all strategic plans for the current user
create_strategic_planCreate a new strategic plan (free-form canvas)
get_strategic_planGet a strategic plan with all cards and edges
update_strategic_planUpdate title or description
delete_strategic_planDelete a strategic plan (soft delete)
add_strategic_plan_cardAdd a plan card to the canvas
remove_strategic_plan_cardRemove a card from the canvas
add_strategic_plan_edgeAdd an edge (arrow) between two cards
Research (Library)
research_upload_bookUpload a document for analysis (title, text, author, domain, language)
research_list_booksList all documents in the user's library with processing status
research_get_bookGet a document's knowledge graph (cards + edges). Only when status = completed
research_get_book_statusCheck processing status and progress
research_get_segmentsGet text segments + expected output schema. Only when status = segments_ready
research_submit_analysisSubmit analysis results (cards + edges) from local AI model
research_delete_bookDelete a document from the library
Conferences
create_conferenceCreate a new AI conference
read_conference_messagesRead recent messages from a conference (default: last 50)
send_conference_messageSend a message to a conference (supports @mentions)
update_conference_agentsSet active AI models (claude, gpt, gemini, grok)

Environment Variables

VariableRequiredDescription
REEN_API_TOKENYesAPI token from Settings → API Tokens
REEN_API_URLNoBackend URL (default: https://backend.reen.tech)

Example Usage

Once configured, AI agents can use REEN tools natively:

# In Claude Code conversation:
"List my plans"          → calls list_plans
"Create a new plan"      → calls create_plan
"Mark task X as done"    → calls update_task with status: "done"
"What's my progress?"    → calls get_plan_progress
Transport: stdio (JSON-RPC over stdin/stdout). The server logs to stderr with token redaction. Automatic retry on 429/5xx with exponential backoff.

Authentication

Get your API token via REEN web interface:

  1. Open https://reen.tech
  2. Login → User Menu → "API Tokens"
  3. Create a new token and save it securely

Using the token:

curl -H "Authorization: Bearer reen_YOUR_TOKEN_HERE" \
     https://backend.reen.tech/api/gant/plans

Projects API

Project is a container for plans. Structure: {access}/{username}/{project_name}

Get Projects List

GET /api/gant/projects

Response:

{
  "projects": [
    {
      "access": "private",
      "username": "john.smith",
      "project_name": "my-project",
      "created_at": "2026-01-31T10:00:00Z"
    }
  ]
}

Create Project

POST /api/gant/projects

Request Body:

{
  "access": "private",
  "project_name": "my-new-project",
  "description": "Project description (optional)"
}

Response:

{
  "success": true,
  "project_path": "private/john.smith/my-new-project"
}

Delete Project

DELETE /api/gant/projects/{access}/{username}/{project_name}


Plans API

Plan is a structured set of tasks and subtasks following the Gant protocol.

Get Plans List

GET /api/gant/plans?project_path={project_path}

Query Parameters:

Create Plan

POST /api/gant/plans

Minimal Request Body:

{
  "project_path": "private/john.smith/my-project",
  "title": "Q1 Development Plan",
  "description": "Development plan for Q1 2026",
  "phases": [
    {
      "id": "phase-1",
      "title": "Phase 1: Setup",
      "description": "Infrastructure setup",
      "status": "planned",
      "subtasks": [
        {
          "title": "Setup CI/CD pipeline",
          "description": "Configure GitHub Actions",
          "status": "planned"
        }
      ]
    }
  ]
}
Note: You can also include briefing field for each phase/subtask:
"briefing": "What: CI/CD setup\nHow: GitHub Actions config\nWhy: Automated deployment"

Get Plan Timeline

GET /api/gant/timeline/{plan_id}

Get Task Progress

GET /api/gant/progress/{plan_id}/{task_id}

Response:

{
  "task_id": "phase-1",
  "status": "in-progress",
  "progress": 0.5,
  "notes": [
    "[2026-01-31 10:00] phase-1: 30% — Started CI/CD setup",
    "[2026-01-31 14:00] phase-1: 50% — Docker config ready"
  ]
}

Delete Plan

DELETE /api/gant/plans/{plan_id}


Tasks API

Create Task

POST /api/gant/task

Request Body:

{
  "plan_id": "plan-2026-01-31-abc123",
  "title": "Configure Docker",
  "start_date": "2026-02-01",
  "end_date": "2026-02-15",
  "status": "planned",
  "position": 0
}

position is optional (0-based index). Omit to append at the end. If specified, existing tasks at that position and below are shifted.

Create Subtask

POST /api/gant/subtask

Request Body:

{
  "plan_id": "plan-2026-01-31-abc123",
  "task_id": "task-abc12345",
  "title": "Write Dockerfile",
  "start_date": "2026-02-01",
  "end_date": "2026-02-05",
  "status": "planned",
  "position": 0
}

Update Task

PATCH /api/gant/tasks/{task_id}

Request Body (all fields optional):

{
  "title": "New title",
  "description": "Updated description",
  "status": "in-progress",
  "progress": 0.5,
  "position": 2,
  "change_reason": "Why this change was made (recorded in audit log)",
  "change_evidence": ["ref-1", "ref-2"]
}

Valid statuses: planned, in-progress, done, blocked, cancelled. All changes are automatically recorded in the audit log via PostgreSQL triggers.

Plan Events (Audit Log)

GET /api/gant/plans/{plan_id}/events

Returns chronological audit log of all plan and task changes. Events are automatically generated by PostgreSQL AFTER UPDATE triggers — no manual logging needed.

Query Parameters:

Response:

{
  "events": [
    {
      "id": "evt_abc123",
      "plan_id": "argus-...",
      "task_id": "task-...",
      "entity_type": "task",
      "event_type": "status_change",
      "field": "status",
      "old_value": "planned",
      "new_value": "in-progress",
      "actor": "john.smith",
      "actor_type": "human",
      "reason": "Starting work",
      "task_title": "Task Name",
      "created_at": "2026-03-05T12:00:00Z"
    }
  ],
  "count": 42
}

Reorder Task

POST /api/gant/tasks/reorder

Move a task to a new position within its sibling group (same parent). Sibling tasks are shifted automatically.

Request Body:

{
  "task_id": "task-abc12345",
  "position": 0
}

Response:

{
  "success": true,
  "task": { "id": "task-abc12345", "position": 0, ... }
}

Gant Execution Mode Protocol

When executing a plan through an AI agent (Claude Code, GPT-5 Pro):

Required Updates:

Notes Format

[YYYY-MM-DD HH:mm] task_id: N% — Brief description

Example:

[2026-01-31 10:00] phase-1: 30% — Dockerfile created
[2026-01-31 11:00] phase-1: 50% — Docker compose ready
[2026-01-31 12:00] phase-1: 100% — CI/CD pipeline working

Task Statuses

Progress Values


Usage Examples

1. Create Project and Plan

# Step 1: Create project
curl -X POST \
     -H "Authorization: Bearer reen_YOUR_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{"access":"private","project_name":"q1-2026"}' \
     https://backend.reen.tech/api/gant/projects

# Step 2: Create plan
curl -X POST \
     -H "Authorization: Bearer reen_YOUR_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{
       "project_path": "private/john.smith/q1-2026",
       "title": "Q1 Development",
       "phases": [{
         "id": "setup",
         "title": "Setup Infrastructure",
         "status": "planned",
         "subtasks": [{
           "title": "Configure CI/CD",
           "status": "planned"
         }]
       }]
     }' \
     https://backend.reen.tech/api/gant/plans

2. Track Progress

# Get plan timeline
curl -H "Authorization: Bearer reen_YOUR_TOKEN" \
     https://backend.reen.tech/api/gant/timeline/plan-2026-01-31-abc123

# Get specific task progress
curl -H "Authorization: Bearer reen_YOUR_TOKEN" \
     https://backend.reen.tech/api/gant/progress/plan-2026-01-31-abc123/phase-1

Narrative API

Each plan can have a narrative — a free-form text (Markdown) describing the plan's context, goals, and notes.

Get Narrative

GET /api/gant/plans/{plan_id}/narrative

Response:

{
  "narrative": "# Project Overview\n\nThis plan covers..."
}

Update Narrative

PUT /api/gant/plans/{plan_id}/narrative

{
  "narrative": "# Updated narrative\n\nNew content here..."
}

Response:

{
  "success": true,
  "narrative": "# Updated narrative\n\nNew content here..."
}

Ex-Help API

Ex-Help provides AI consultation requests linked to plans. Create a request describing a problem, generate a context pack, and paste back the AI answer.

UI: The Ex-Help tab displays requests as cards. Click a card to open a right sidebar with problem description, attached files, and answer fields.

List Ex-Help Requests

GET /api/gant/exhelp/{plan_id}

Response:

{
  "exhelp": [
    {
      "id": "exh_abc123",
      "title": "Layout issue in dashboard",
      "problem": "The sidebar overlaps...",
      "answer": "",
      "status": "draft",
      "created_at": "2026-02-15T10:00:00Z"
    }
  ]
}

Create Ex-Help Request

POST /api/gant/exhelp/{plan_id}

{
  "title": "New request",
  "problem": "Describe the problem here..."
}

Update Ex-Help Request

PATCH /api/gant/exhelp/{exhelp_id}

{
  "title": "Updated title",
  "problem": "Updated problem description",
  "answer": "AI response pasted here",
  "initial_prompt": "System prompt for external AI...",
  "status": "answered"
}

Initial Prompt

The initial_prompt field provides system-level instructions for external AI. When a share link is generated, this field becomes the primary "# Task" section in the public pack.

Statuses

Generate Context Pack

GET /api/gant/exhelp/{exhelp_id}/pack?format=md

Generates a context pack containing the problem description, plan tasks, and relevant files. Available in md (Markdown) or json format.

Share Link (Public Access)

Generate a time-limited public URL for sharing an Ex-Help request with external AI agents (no authentication required).

POST /api/gant/exhelp/{exhelp_id}/share

Response:

{
  "share_url": "https://backend.reen.tech/api/public/exhelp/TOKEN",
  "expires_at": "2026-02-23T10:00:00Z"
}

GET /api/public/exhelp/{share_token}

Returns a Markdown document optimized for AI consumption:

  1. # INSTRUCTION — directive for AI: "Execute immediately. Do NOT ask clarifying questions."
  2. ## Problem — problem description
  3. ## Plan — plan context with task tree
  4. ## Attached Files — text files (md, json, txt, yaml, csv ≤100KB) are inlined as code blocks; binary files show metadata only
  5. ## Previous Answer — prior AI answer (if any)
UI: Click "Generate & Copy" in the Ex-Help sidebar to create a share link and copy it to clipboard. Links expire after 7 days. Regenerate at any time.
No authentication required for the public endpoint. Access is authorized through the share token. The token is a cryptographically random 32-byte URL-safe string.

Artifacts API

Artifacts provides note and file storage per plan. Store research notes, implementation details, and reference files as the plan progresses.

UI: The Artifacts tab displays items as a card grid. Click a card to open a full markdown editor with file attachments (similar to Narrative view).
MCP: Tools available: list_artifacts, create_artifact, update_artifact, delete_artifact.

List Artifacts

GET /api/gant/artifacts/{plan_id}

Response:

{
  "artifacts": [
    {
      "id": "art_abc123def456",
      "plan_id": "argus-20260218-...",
      "title": "Research notes",
      "content": "## Key findings\n...",
      "file_count": 2,
      "created_at": "2026-02-18T10:00:00Z",
      "updated_at": "2026-02-18T12:00:00Z"
    }
  ],
  "count": 1
}

Create Artifact

POST /api/gant/artifacts/{plan_id}

{
  "title": "New Artifact",
  "content": ""
}

Update Artifact

PATCH /api/gant/artifacts/{artifact_id}

{
  "title": "Updated title",
  "content": "## Updated content\n..."
}

Delete Artifact

DELETE /api/gant/artifacts/{artifact_id}

Soft-deletes the artifact. Associated files are preserved but hidden.

Artifact Files

Use the standard Plan Files API with context=artifact:

POST /api/gant/plans/{plan_id}/files (multipart form: file, context=artifact, artifact_id)

GET /api/gant/plans/{plan_id}/files?context=artifact&artifact_id={id}


Strategic Plans API

Strategic Plans provide a free-form canvas for organizing multiple Gantt plans visually. Each plan appears as a draggable card on an infinite React Flow canvas, with edges (arrows) connecting related plans.

UI: In the Engineering sidebar, strategic plans appear in a separate list. Click a strategic plan to open the canvas view with drag-and-drop cards, connection handles, and a minimap.
MCP: 8 tools available: list_strategic_plans, create_strategic_plan, get_strategic_plan, update_strategic_plan, delete_strategic_plan, add_strategic_plan_card, remove_strategic_plan_card, add_strategic_plan_edge.

List Strategic Plans

GET /api/gant/strategic-plans

Response:

{
  "strategic_plans": [
    {
      "id": "sp-a1b2c3d4e5f6g7h8",
      "user_id": "john.smith",
      "title": "Q4 2026 Strategy",
      "description": "Long-term strategic initiatives",
      "project": "main-project",
      "viewport_x": 0,
      "viewport_y": 0,
      "viewport_zoom": 1.0,
      "created_at": "2026-02-27T10:30:00Z",
      "updated_at": "2026-02-27T15:45:00Z"
    }
  ],
  "count": 1
}

Create Strategic Plan

POST /api/gant/strategic-plans

{
  "title": "Q4 2026 Strategy",
  "description": "Long-term strategic initiatives",
  "project": "main-project"
}

project is optional. SSE event strategic_plan.created is published.

Get Strategic Plan (with Cards & Edges)

GET /api/gant/strategic-plans/{sp_id}

Returns the plan metadata, all cards (with live plan title, status, progress), and edges:

{
  "strategic_plan": { "id": "sp-...", "title": "...", ... },
  "cards": [
    {
      "id": "spc-xyz123",
      "plan_id": "p-001",
      "position_x": 0, "position_y": 0,
      "width": 280, "height": 140,
      "plan_title": "Phase 1: Research",
      "plan_status": "in-progress",
      "plan_progress": 0.45
    }
  ],
  "edges": [
    {
      "id": "spe-abc789",
      "source_card_id": "spc-xyz123",
      "target_card_id": "spc-def456",
      "label": "feeds into",
      "edge_type": "default"
    }
  ]
}

Update Strategic Plan

PATCH /api/gant/strategic-plans/{sp_id}

{
  "title": "New Title",
  "description": "Updated description",
  "project": "different-project",
  "viewport_x": 100.5,
  "viewport_y": 200.3,
  "viewport_zoom": 1.5
}

All fields are optional.

Delete Strategic Plan

DELETE /api/gant/strategic-plans/{sp_id}

Soft-deletes the strategic plan. SSE event strategic_plan.deleted is published.

Canvas Cards

Cards represent Gantt plans placed on the strategic canvas. Each plan can appear once per canvas (unique constraint).

POST /api/gant/strategic-plans/{sp_id}/cards — Add a plan card

{
  "plan_id": "p-001",
  "position_x": 0,
  "position_y": 0
}

PATCH /api/gant/strategic-plans/{sp_id}/cards/{card_id} — Update position/size

{
  "position_x": 150.5,
  "position_y": -200.3,
  "width": 300,
  "height": 160
}

DELETE /api/gant/strategic-plans/{sp_id}/cards/{card_id} — Remove card (cascading: connected edges are also removed)

Canvas Edges

Edges connect cards with typed arrows. Self-loops are prevented by a database constraint.

POST /api/gant/strategic-plans/{sp_id}/edges — Add edge

{
  "source_card_id": "spc-xyz123",
  "target_card_id": "spc-def456",
  "label": "feeds into",
  "edge_type": "feeds"
}

Edge types: default, dependency, feeds, blocks. Each type renders with a distinct color.

DELETE /api/gant/strategic-plans/{sp_id}/edges/{edge_id} — Remove edge

Bulk Update

PATCH /api/gant/strategic-plans/{sp_id}/bulk-update — Update viewport and multiple card positions in a single request

{
  "viewport_x": 150.5,
  "viewport_y": -200.3,
  "viewport_zoom": 1.2,
  "cards": [
    { "id": "spc-xyz123", "position_x": 0, "position_y": 50 },
    { "id": "spc-def456", "position_x": 350, "position_y": 50 }
  ]
}

Research API (Library)

Upload documents and build interactive knowledge graphs. The pipeline extracts text, segments it into chapters, then pauses at segments_ready for your local AI to analyze via MCP.

Workflow: Upload → Extract → Segment → segments_ready (STOP) → Local AI analyzes via MCP → Submit analysis → completed

Upload Document

POST /api/research/books/json

{
  "title": "Introduction to TRIZ",
  "text": "Full text content of the document...",
  "author": "G. Altshuller",
  "domain": "engineering",
  "language": "ru"
}

Response:

{
  "id": "rb-abc123",
  "status": "pending",
  "message": "Book uploaded, processing started"
}

Also supports multipart form upload via POST /api/research/books (accepts PDF files).

List Documents

GET /api/research/books

Query params: ?domain=, ?status=

Get Document with Knowledge Graph

GET /api/research/books/{book_id}

Returns the document metadata, all cards (one per chapter), and edges (relationships between chapters). Only meaningful when processing_status = "completed".

Check Processing Status

GET /api/research/books/{book_id}/status

Response:

{
  "processing_status": "segments_ready",
  "processing_stage": "segmenting",
  "processing_progress": 1.0,
  "total_chapters": 12
}

Processing Statuses

StatusDescription
pendingQueued for processing
extractingExtracting text from PDF
segmentingSplitting into chapters
segments_readyReady for local AI analysis (pipeline paused)
completedKnowledge graph built
failedProcessing error
needs_ocrLow text quality — upload text version instead

Get Segments (for Local AI)

GET /api/research/books/{book_id}/segments

Only works when status is segments_ready. Returns raw text segments and the expected JSON schema for analysis output.

Response:

{
  "book_id": "rb-abc123",
  "title": "Introduction to TRIZ",
  "language": "ru",
  "total_segments": 12,
  "segments": [
    { "heading": "Chapter 1: Inventive Problems", "text": "...", "start_line": 1 },
    { "heading": "Chapter 2: Contradictions", "text": "...", "start_line": 45 }
  ],
  "expected_output_schema": { ... }
}

Submit Analysis

POST /api/research/books/{book_id}/analyze

{
  "book_summary": "A foundational text on systematic invention methodology...",
  "cards": [
    {
      "chapter_number": 1,
      "title": "Inventive Problems",
      "essence": "Inventive problems contain contradictions that cannot be resolved by compromise",
      "summary_simple": "Introduces the concept of inventive problems...",
      "summary_technical": "Defines inventive problems as those containing technical or physical contradictions...",
      "importance": 5,
      "key_terms": ["inventive problem", "contradiction", "compromise"],
      "evidence_quotes": [{ "text": "An inventive problem arises when...", "location": "p.12" }]
    }
  ],
  "edges": [
    {
      "from_chapter": 1,
      "to_chapter": 2,
      "type": "depends_on",
      "confidence": 0.95,
      "why": "Chapter 2 builds on the contradiction concept from Chapter 1"
    }
  ]
}

Edge types: depends_on, extends, illustrates

Card Position (Drag & Save)

PATCH /api/research/cards/{card_id}/position

{ "x": 250.5, "y": 100.0 }

Edge Management

POST /api/research/edges — Create a manual edge

PATCH /api/research/edges/{edge_id}/verify — Verify or reject an edge

DELETE /api/research/edges/{edge_id} — Delete an edge

Delete Document

DELETE /api/research/books/{book_id}

MCP Workflow: Use research_get_segments to retrieve chapters, analyze them locally with your AI model, then call research_submit_analysis with the resulting cards and edges. The server calculates final importance scores using a hybrid formula: 0.6 × LLM + 0.4 × normalized(indegree).

Conferences API

AI Conference provides a messenger-style chat for multi-party conversations between users and AI models (Claude, GPT, Gemini, Grok).

How it works: REEN acts as a message broker. AI models are invoked locally via reen-cli on your machine. Your API keys never leave your device.

List Conferences

GET /api/conferences

Response:

{
  "conferences": [
    {
      "id": "conf_b1e548af2763",
      "title": "Architecture Review",
      "owner": "john.smith",
      "created_at": "2026-02-08T10:00:00Z",
      "message_count": 15,
      "agents": ["reen-cli-user"]
    }
  ]
}

Create Conference

POST /api/conferences

{
  "title": "My Conference",
  "description": "Optional description"
}

Get Conference with Messages

GET /api/conferences/{id}?limit=100

Returns conference metadata and the last N messages.

Delete Conference

DELETE /api/conferences/{id}

Initial Prompt

Each conference can have a system prompt that sets the context for all AI models.

GET /api/conferences/{id}/initial-prompt

Response:

{
  "initial_prompt": "You are an expert architect..."
}

PUT /api/conferences/{id}/initial-prompt

{
  "initial_prompt": "You are an expert architect reviewing our system design..."
}
UI: Click the "Initial Prompt" chip in the conference header to open a resizable right sidebar with a monospace editor. Save changes with the floppy disk button (turns yellow when there are unsaved changes).

WebSocket

Connect to a conference in real-time:

wss://backend.reen.tech/ws/conference/{id}?token=reen_YOUR_TOKEN

Send a message:

{"type": "message", "content": "@claude explain this code", "mentions": ["claude"]}

Receive messages:

{"type": "message", "id": "msg_abc", "author": "claude", "role": "assistant", "content": "...", "ts": "..."}

@mention Routing

MentionEffect
@claudeRoutes to Claude
@gptRoutes to GPT
@geminiRoutes to Gemini
@grokRoutes to Grok
@allRoutes to all enabled models

Conference Control (Go / Stop)

The UI provides a Go/Stop toggle to control AI conversation flow:

StateButtonAction
Stopped / Paused▶ GoResume model routing
Playing⏹ StopStop + cancel all running generations

WebSocket control messages:

{"type": "control", "action": "playing"}   // Resume (Go)
{"type": "control", "action": "stopped"}   // Stop + cancel all generations
Auto-pause: After all rounds complete (no more @mentions or max 5 rounds reached), the conference automatically pauses. User messages automatically resume from pause.

Model-to-Model Conversations

Models respond sequentially within each round: Claude → GPT → Gemini → Grok. Each model sees the responses from previous models in the same round.

Round Chaining (v1.5)

When a model uses @mention in its response, it triggers a follow-up round automatically:

  1. Round 1: User sends @all discuss X → Claude responds → GPT sees Claude's answer → Gemini sees both → Grok sees all
  2. Round 2: If responses contain @mentions, mentioned models respond (with full context)
  3. Rounds 3–5: Chain continues while @mentions exist
  4. Auto-pause: When no more @mentions or max 5 rounds reached

@mention Rules

PatternEffect
@claude, @gpt, @gemini, @grokTriggers that model to respond
@allTriggers all models
Name without @ ("Claude said...")Reference only, no trigger

Models are instructed to end each response with a direct question using @ to keep the conversation going.

Example flow:

User: "@all discuss the future of AI"

Round 1 (automatic):
  → Claude responds (sees user message)
  → GPT responds (sees user + Claude)
  → Gemini responds (sees user + Claude + GPT)
  → Grok responds (sees all above)

Round 2 (triggered by @mentions in Round 1):
  → @mentioned models respond with full context

... up to 5 rounds, then auto-pause

File Content in Prompts

When users upload text files (.md, .txt, .json, .py, .js, etc.) to a conference, the file content is included in the model's prompt context (up to 16KB per file). Models can analyze and discuss uploaded files.

Send Message via REST

POST /api/conferences/{id}/messages

{
  "content": "Hello @claude, analyze this",
  "author": "claude-code",
  "mentions": ["claude"]
}

Allows external agents (Claude Code, scripts) to post messages into conferences.

reen-cli

Connect local AI models to conferences:

npm install -g reen-cli

# Connect to all conferences (recommended)
reen-cli daemon --token reen_YOUR_TOKEN

# Connect to a single conference
reen-cli connect conf_XXXX --token reen_YOUR_TOKEN

# List conferences
reen-cli list --token reen_YOUR_TOKEN
OptionDescriptionDefault
--token, -tREEN API tokenrequired
--models, -mComma-separated modelsclaude,gpt,gemini,grok
--context, -cContext messages count20
--server, -sServer URLhttps://backend.reen.tech
--poll, -pPoll interval (daemon mode)15s

Source: github.com/rhoe-llc-fz/reen-cli


Error Codes

Code Description
200 Success
400 Bad Request (validation error)
401 Unauthorized (invalid token)
404 Not Found
429 Rate Limit Exceeded
500 Internal Server Error

Rate Limits

Default for API token: 60 requests/minute

When exceeded:

{
  "error": "Rate limit exceeded",
  "retry_after": 30
}

Support

Security Best Practices:

REEN Platform API v2.3.0 | © 2026 RHOE LLC FZ