@appoly/multiagent-chat 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # Multi-Agent Chat
2
+
3
+ An Electron app that enables multiple AI agents (Claude, Codex, etc.) to collaborate on challenges through a shared chat interface.
4
+
5
+ Uses your local installations of AI agents via command line. Bring your own API keys and configurations.
6
+
7
+ ## Installation
8
+
9
+ ### Global Install (Recommended)
10
+
11
+ ```bash
12
+ npm i -g multiagent-chat
13
+ ```
14
+
15
+ ### From Source
16
+
17
+ ```bash
18
+ git clone <repo>
19
+ cd multiagent-chat
20
+ npm install
21
+ npm start
22
+ ```
23
+
24
+ ## Usage
25
+
26
+ ```bash
27
+ # Run in current directory (uses cwd as workspace)
28
+ multiagent-chat
29
+
30
+ # Specify workspace explicitly
31
+ multiagent-chat /path/to/project
32
+ multiagent-chat --workspace /path/to/project
33
+
34
+ # With custom config file
35
+ multiagent-chat --config /path/to/config.yaml
36
+
37
+ # Environment variables also work
38
+ WORKSPACE=/path/to/project multiagent-chat
39
+ ```
40
+
41
+ ## Configuration
42
+
43
+ On first run, a default config is created at `~/.multiagent-chat/config.yaml`.
44
+
45
+ ```yaml
46
+ agents:
47
+ - name: "Claude"
48
+ command: "claude"
49
+ args: ['--dangerously-skip-permissions']
50
+ use_pty: true
51
+
52
+ - name: "Codex"
53
+ command: "codex"
54
+ args: []
55
+ use_pty: true
56
+ ```
57
+
58
+ You can override with a project-local config using `--config /path/to/config.yaml`.
59
+
60
+ ### Config Location
61
+
62
+ - **Global config**: `~/.multiagent-chat/config.yaml`
63
+ - **Recent workspaces**: `~/.multiagent-chat/recent-workspaces.json`
64
+
65
+ ## How It Works
66
+
67
+ 1. Select a workspace (project directory) or use current directory
68
+ 2. Enter a challenge/topic for agents to discuss
69
+ 3. Agents communicate via outbox files (messages delivered to their PTY)
70
+ 4. Watch live collaboration in the chat panel
71
+ 5. Final agreed plan written to `PLAN_FINAL.md` in the workspace
72
+ 6. Optionally execute the plan -- other agents will review the implementation
73
+
74
+ ## License
75
+
76
+ MIT
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ const path = require('path');
3
+ const { spawn } = require('child_process');
4
+
5
+ // Get the electron executable path from the installed dependency
6
+ const electron = require('electron');
7
+
8
+ // Launch electron with our main.js, passing through all CLI args
9
+ const child = spawn(electron, [path.join(__dirname, '..'), ...process.argv.slice(2)], {
10
+ stdio: 'inherit',
11
+ windowsHide: false
12
+ });
13
+
14
+ child.on('close', (code) => process.exit(code));
package/config.yaml ADDED
@@ -0,0 +1,158 @@
1
+ # Default configuration - copied to ~/.multiagent-chat/config.yaml on first run
2
+ # Edit your local copy at ~/.multiagent-chat/config.yaml, not this file
3
+ #
4
+ # Multi-Agent Chat Configuration
5
+ # Define the agents that will collaborate on challenges
6
+
7
+ # Agent colors - used in the chat UI
8
+ # Default colors cycle through this palette if not specified per-agent
9
+ default_agent_colors:
10
+ - "#14f195" # Mint/Teal
11
+ - "#22d3ee" # Cyan
12
+ - "#3b82f6" # Blue
13
+ - "#22c55e" # Green
14
+ - "#f59e0b" # Amber
15
+ - "#ff453a" # Red
16
+
17
+ # User message styling
18
+ user_color: "#94a3b8" # Slate for user messages
19
+
20
+ agents:
21
+ - name: "Claude"
22
+ command: "claude"
23
+ args: ['--dangerously-skip-permissions']
24
+ use_pty: true
25
+ color: "#3b82f6" # Blue for Claude
26
+
27
+ - name: "Codex"
28
+ command: "codex"
29
+ args: []
30
+ use_pty: true
31
+ color: "#22c55e" # Green for Codex
32
+
33
+ # - name: "Gemini"
34
+ # # If the command below doesn't work, use `which gemini` to find the path on your system.
35
+ # command: "gemini"
36
+ # use_pty: true
37
+ # color: "#f59e0b" # Amber for Gemini
38
+ # init_delay_ms: 1500
39
+ # args: ['--yolo']
40
+
41
+ # Example: Multiple instances of the same agent type
42
+ # Useful for having the same model debate from different perspectives
43
+ # - name: "Claude-Alpha"
44
+ # command: "claude"
45
+ # args: ['--dangerously-skip-permissions']
46
+ # use_pty: true
47
+ # color: "#3b82f6" # Blue
48
+ #
49
+ # - name: "Claude-Beta"
50
+ # command: "claude"
51
+ # args: ['--dangerously-skip-permissions']
52
+ # use_pty: true
53
+ # color: "#8b5cf6" # Purple
54
+
55
+ # Working directory for chat files (hidden to avoid cluttering projects)
56
+ workspace: "./.multiagent-chat"
57
+
58
+ # Chat file (JSONL format for structured UI rendering)
59
+ chat_file: "chat.jsonl"
60
+
61
+ # Outbox directory (agents write here to send messages)
62
+ outbox_dir: "outbox"
63
+
64
+ # Final plan file name
65
+ plan_file: "PLAN_FINAL.md"
66
+
67
+ # Prompts section
68
+ prompts:
69
+ # Sent when user clicks "Start Implementing" and selects an agent
70
+ # Placeholders: {selected_agent}, {other_agents}
71
+ implementation_handoff: |
72
+ ## 🚀 IMPLEMENTATION STAGE BEGINS
73
+
74
+ The planning phase is complete. You are now entering the **IMPLEMENTATION** stage.
75
+
76
+ **{selected_agent}**: You are the lead implementer. Please implement the agreed plan now. You may create, modify, and delete files as needed.
77
+
78
+ **{other_agents}**: Wait for {selected_agent} to confirm they have completed the implementation. Then review the changes and provide feedback. Iterate together until everyone is satisfied with the result.
79
+
80
+ # Prompt template for agents
81
+ # This is sent via PTY when the session starts
82
+ prompt_template: |
83
+ ## Multi-Agent Collaboration Session
84
+
85
+ **You are: {agent_name}**
86
+
87
+ You are collaborating with: {agent_names}
88
+
89
+ ### How This Works
90
+
91
+ 1. **Messages from other agents will appear in your terminal** - the chat system delivers them to you
92
+ 2. **To send a message**, write to `{outbox_file}` using a shell command (see below)
93
+ 3. **Stay active** - keep responding to messages until you reach consensus
94
+ 4. **When done**, one agent should write the final agreed solution to `{plan_file}`
95
+
96
+ You do NOT need to read any chat files - messages come to you automatically.
97
+
98
+ ### IMPORTANT: How to Send Messages
99
+
100
+ Use a shell command to write to your outbox - this is MUCH faster than using file editing tools:
101
+
102
+ ```bash
103
+ cat << 'EOF' > {outbox_file}
104
+ Your message here.
105
+ Can be multiple lines.
106
+ EOF
107
+ ```
108
+
109
+ Do NOT use built-in file read/write tools - they are slower. Just use `cat` with a heredoc.
110
+
111
+ ### Guidelines
112
+
113
+ - **Sign your messages** - Start or end with your name (e.g., "— {agent_name}") so others know who's speaking
114
+ - Challenge each other's ideas constructively
115
+ - Don't be too agreeable - push for the best solution
116
+ - Wait for responses before sending multiple messages. DO NOT send multiple in a row without good reason
117
+ - Only implement things if the user explicitly asks
118
+ - Explore for yourself rather than relying on the findings of others
119
+
120
+ ### Finalising: Explicit Agreement Required
121
+
122
+ Before writing to `{plan_file}`, you MUST have **explicit agreement from ALL agents**.
123
+
124
+ - "No objections" or silence is NOT agreement
125
+ - Each agent must explicitly say they agree with the final solution
126
+ - Use clear language like "I agree with this final version" or "Confirmed, let's go with this"
127
+ - Only after ALL agents have explicitly confirmed should one agent write `{plan_file}`
128
+
129
+ ### When to Stop
130
+
131
+ Once `{plan_file}` has been written and all agents have confirmed, **STOP RESPONDING**.
132
+
133
+ Why? Each message you send triggers other agents to respond, creating an endless loop.
134
+ When the task is done, simply stop - do not send "Done!", "Confirmed!", "Acknowledged!", etc.
135
+
136
+ ---
137
+
138
+ ## ⚠️ PLANNING STAGE ONLY - DO NOT IMPLEMENT
139
+
140
+ This session has two distinct phases:
141
+
142
+ 1. **PLANNING (current phase)** - Discuss, debate, and agree on a plan. Write the agreed plan to `{plan_file}`. DO NOT write any code or make any changes to the codebase.
143
+
144
+ 2. **IMPLEMENTATION (later)** - Only begins when the user explicitly says "implement" or "start implementing". Until then, your job is ONLY to plan.
145
+
146
+ **You are currently in the PLANNING phase. Do not create, modify, or delete any files except your outbox and `{plan_file}`.**
147
+
148
+ ---
149
+
150
+ ## Topic to Discuss
151
+
152
+ {challenge}
153
+
154
+ ---
155
+
156
+ **Remember: PLAN ONLY. Do not implement anything yet.**
157
+
158
+ Send your opening thoughts now using: cat << 'EOF' > {outbox_file}
package/index.html ADDED
@@ -0,0 +1,211 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <link rel="icon" type="image/png" href="robot.png">
7
+ <title>Multi-Agent Chat</title>
8
+ <link rel="stylesheet" href="node_modules/@xterm/xterm/css/xterm.css">
9
+ <link rel="stylesheet" href="styles.css">
10
+ <script src="node_modules/@xterm/xterm/lib/xterm.js"></script>
11
+ <script src="node_modules/@xterm/addon-fit/lib/addon-fit.js"></script>
12
+ <script src="node_modules/marked/lib/marked.umd.js"></script>
13
+ </head>
14
+ <body>
15
+ <!-- Challenge Input Screen -->
16
+ <div id="challenge-screen" class="screen active">
17
+ <div class="challenge-layout">
18
+ <!-- Workspace Picker Sidebar -->
19
+ <div class="workspace-sidebar">
20
+ <div class="workspace-sidebar-header">
21
+ <h3>Workspace</h3>
22
+ </div>
23
+ <div class="workspace-list-container">
24
+ <ul id="recent-workspaces" class="workspace-list">
25
+ <li class="workspace-empty">Loading...</li>
26
+ </ul>
27
+ </div>
28
+ <div class="workspace-actions">
29
+ <button id="browse-workspace-button" class="workspace-action-button">
30
+ <span class="action-icon">📁</span>
31
+ Browse...
32
+ </button>
33
+ <button id="use-cwd-button" class="workspace-action-button" style="display: none;">
34
+ <span class="action-icon">📍</span>
35
+ Use Current Directory
36
+ </button>
37
+ </div>
38
+ <div class="workspace-footer">
39
+ <button id="edit-config-button" class="config-link-button">
40
+ Edit configuration →
41
+ </button>
42
+ </div>
43
+ </div>
44
+
45
+ <!-- Main Card -->
46
+ <div class="container">
47
+ <h1><img src="robot.png" alt="Robot" class="header-icon"> Multi-Agent Chat</h1>
48
+ <p class="subtitle">Autonomous collaboration for complex challenges</p>
49
+
50
+ <div id="selected-workspace-info" class="selected-workspace-info" style="display: none;">
51
+ <span class="selected-label">Selected workspace:</span>
52
+ <span id="selected-workspace-path" class="selected-path"></span>
53
+ <span id="cli-badge" class="cli-badge" style="display: none;">(via CLI)</span>
54
+ </div>
55
+
56
+ <div class="challenge-input-container">
57
+ <textarea
58
+ id="challenge-input"
59
+ placeholder="Describe your challenge... (e.g., 'Refactor the authentication logic in src/auth.ts to use JWT')"
60
+ rows="10"
61
+ ></textarea>
62
+ </div>
63
+
64
+ <button id="start-button" class="primary-button" disabled>Select a Workspace</button>
65
+
66
+ <div id="config-info" class="config-info">
67
+ <h3>Current Environment</h3>
68
+ <div id="config-details">Loading...</div>
69
+ </div>
70
+ </div>
71
+ </div>
72
+ </div>
73
+
74
+ <!-- Main Session Screen -->
75
+ <div id="session-screen" class="screen">
76
+ <div class="header">
77
+ <h2><img src="robot.png" alt="Robot" class="header-icon"> Chat <span class="divider">/</span> <span class="subtext">Session</span></h2>
78
+ <div class="header-info">
79
+ <div id="workspace-path">Loading...</div>
80
+ <button id="new-session-button" class="secondary-button" title="New Session (⌘⇧N)">New Session</button>
81
+ </div>
82
+ </div>
83
+
84
+ <div class="main-content">
85
+ <!-- Left Panel: Agent Outputs -->
86
+ <div class="left-panel">
87
+ <div class="panel-header">
88
+ <h3>Terminal Instances</h3>
89
+ </div>
90
+ <div id="agent-tabs" class="tabs"></div>
91
+ <div id="agent-outputs" class="agent-outputs"></div>
92
+ </div>
93
+
94
+ <!-- Horizontal Resize Handle -->
95
+ <div class="resize-handle resize-handle-h" data-resize="main"></div>
96
+
97
+ <!-- Right Panel: Chat, Plan, and Diff -->
98
+ <div class="right-panel">
99
+ <!-- Top-Level Main Tabs -->
100
+ <div class="main-tabs">
101
+ <button id="main-tab-chat" class="main-tab active" data-tab="chat">Chat</button>
102
+ <button id="main-tab-plan" class="main-tab" data-tab="plan">Plan</button>
103
+ <button id="main-tab-diff" class="main-tab" data-tab="diff">
104
+ Diff
105
+ <span id="diff-badge" class="diff-badge" style="display: none;"></span>
106
+ </button>
107
+ </div>
108
+
109
+ <!-- Chat Tab Content -->
110
+ <div id="chat-tab-content" class="tab-content active">
111
+ <div class="chat-section">
112
+ <div class="panel-header">
113
+ <h3>Communication Stream</h3>
114
+ </div>
115
+ <div id="chat-viewer" class="chat-viewer"></div>
116
+ <div id="chat-new-messages" class="chat-new-messages" aria-hidden="true">
117
+ <button id="chat-new-messages-button" class="small-button">New messages ↓</button>
118
+ </div>
119
+ </div>
120
+ <div class="message-section">
121
+ <div class="panel-header">
122
+ <h3>Direct Intervention</h3>
123
+ </div>
124
+ <div class="message-input-container">
125
+ <textarea
126
+ id="user-message-input"
127
+ placeholder="Send instruction to all agents..."
128
+ rows="2"
129
+ ></textarea>
130
+ <button id="send-message-button" class="primary-button">Send</button>
131
+ </div>
132
+ </div>
133
+ </div>
134
+
135
+ <!-- Plan Tab Content -->
136
+ <div id="plan-tab-content" class="tab-content">
137
+ <div class="plan-section">
138
+ <div class="panel-header">
139
+ <h3>Final Plan</h3>
140
+ <div class="panel-header-actions">
141
+ <button id="refresh-plan-button" class="small-button">Refresh</button>
142
+ </div>
143
+ </div>
144
+ <div id="plan-viewer" class="plan-viewer">
145
+ <em>Awaiting agent synthesis...</em>
146
+ </div>
147
+ <div class="plan-actions">
148
+ <button id="start-implementing-button" class="primary-button large" style="display: none;">Start Implementing</button>
149
+ </div>
150
+ </div>
151
+ </div>
152
+
153
+ <!-- Diff Tab Content -->
154
+ <div id="diff-tab-content" class="tab-content">
155
+ <div class="diff-section">
156
+ <div class="panel-header">
157
+ <h3>Git Changes</h3>
158
+ <div class="panel-header-actions">
159
+ <div id="diff-stats" class="diff-stats"></div>
160
+ <button id="refresh-diff-button" class="small-button">Refresh</button>
161
+ </div>
162
+ </div>
163
+ <div class="diff-layout">
164
+ <!-- File List Pane -->
165
+ <div class="diff-file-list">
166
+ <div class="file-list-header">Changed Files</div>
167
+ <ul id="diff-file-list-items" class="file-list-items"></ul>
168
+ </div>
169
+ <!-- Resize Handle for Diff Panes -->
170
+ <div class="resize-handle resize-handle-h diff-resize" data-resize="diff"></div>
171
+ <!-- Diff Content Pane -->
172
+ <div class="diff-content-pane">
173
+ <div id="diff-content" class="diff-content">
174
+ <em>Select a file or view all changes...</em>
175
+ </div>
176
+ </div>
177
+ </div>
178
+ <div id="diff-untracked" class="diff-untracked"></div>
179
+ </div>
180
+ </div>
181
+ </div>
182
+ </div>
183
+ </div>
184
+
185
+ <!-- Implementation Modal -->
186
+ <div id="implementation-modal" class="modal" style="display: none;">
187
+ <div class="modal-content">
188
+ <h3>Who should implement the plan?</h3>
189
+ <div id="agent-selection" class="agent-selection"></div>
190
+ <div class="modal-actions">
191
+ <button id="modal-cancel" class="small-button">Cancel</button>
192
+ <button id="modal-start" class="small-button primary">Start</button>
193
+ </div>
194
+ </div>
195
+ </div>
196
+
197
+ <!-- New Session Modal -->
198
+ <div id="new-session-modal" class="modal" style="display: none;">
199
+ <div class="modal-content">
200
+ <h3>Start New Session?</h3>
201
+ <p class="modal-description">Chat history and plan will be cleared. This won't undo code changes.</p>
202
+ <div class="modal-actions">
203
+ <button id="new-session-cancel" class="small-button">Cancel</button>
204
+ <button id="new-session-confirm" class="small-button primary">Start New Session</button>
205
+ </div>
206
+ </div>
207
+ </div>
208
+
209
+ <script src="renderer.js"></script>
210
+ </body>
211
+ </html>