tycono 0.1.96 → 0.1.98

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 CHANGED
@@ -1,14 +1,10 @@
1
- <p align="center">
2
- <img src=".github/assets/wave-org-propagation.png" alt="Tycono — CEO dispatches through org hierarchy in real time" width="720" />
3
- </p>
4
-
5
- <h1 align="center">tycono</h1>
6
-
7
1
  <p align="center">
8
2
  <strong>Cursor gives you one AI developer. Tycono gives you an AI team.</strong><br>
9
3
  <sub>Give one order. Watch your AI team plan, build, and learn together.</sub>
10
4
  </p>
11
5
 
6
+ <h1 align="center">tycono</h1>
7
+
12
8
  <p align="center">
13
9
  <a href="https://www.npmjs.com/package/tycono"><img src="https://img.shields.io/npm/v/tycono.svg" alt="npm version" /></a>
14
10
  <a href="https://github.com/seongsu-kang/tycono/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/tycono.svg" alt="license" /></a>
@@ -29,51 +25,75 @@ Cursor, Lovable, Bolt — they all give you **one AI agent**. It helps, but you
29
25
 
30
26
  **tycono** gives you an **AI team**. A CTO reviews architecture. Engineers write code. A PM breaks down tasks. QA catches bugs. You just give the order and watch them work.
31
27
 
32
- One command. Your AI team is running.
33
-
34
28
  ```bash
35
29
  npx tycono
36
30
  ```
37
31
 
32
+ ```
33
+ > Make a landing page for our product
34
+
35
+ ▶ Supervisor started
36
+ 💭 Analyzing the directive. I'll dispatch CTO for implementation and CBO for copy...
37
+ → cto 배정: Landing page structure + implementation
38
+ → cbo 배정: Product messaging + copywriting
39
+ → Read architecture/deployment.md
40
+ → dispatch fe-engineer: Build responsive landing page
41
+ cto ▶ Reviewing architecture for landing page...
42
+ fe-engineer → Write src/landing/index.html
43
+ 📄 Write src/landing/styles.css
44
+ cbo ✓ done (5 turns)
45
+ fe-engineer ✓ done (12 turns)
46
+ ✓ Supervisor done (8 turns)
47
+ >
48
+ ```
49
+
38
50
  ## Core Pillars
39
51
 
40
52
  ### 1. CEO Supervisor — Org-chart orchestration
41
53
 
42
54
  You give one order. The system dispatches through a real hierarchy.
43
55
 
44
- ```
45
- dispatch → watch → relay → quality gate → re-dispatch (if needed)
46
- ```
56
+ CEO delegates to C-levels, C-levels dispatch to their teams. Authority is enforced — engineers can't make CEO decisions, PMs can't merge code.
47
57
 
48
- CEO delegates to C-levels, C-levels dispatch to their teams. Authority is enforced engineers can't make CEO decisions, PMs can't merge code. The org chart isn't decoration, it's the execution engine.
58
+ **Dual Mode**: Simple questions get answered directly (no team dispatch). Work tasks activate the full team. The system judges automatically.
49
59
 
50
- <p align="center">
51
- <img src=".github/assets/wave-org-propagation.png" alt="Wave Center — org propagation with real-time status" width="640" />
52
- </p>
60
+ ### 2. Multi-Wave — Parallel workspaces
53
61
 
54
- ### 2. Observability See everything, intervene anytime
62
+ Multiple persistent conversations, each with its own team context.
55
63
 
56
- Your AI team isn't a black box. Watch every agent work in real time, inject directives mid-execution, and drill down to any level.
64
+ ```
65
+ /new Build the API → Wave 1 (CTO + Engineers working)
66
+ /new Write documentation → Wave 2 (CBO + Writer working)
67
+ /focus 1 → Switch to Wave 1
68
+ ```
57
69
 
58
- - **Wave Center** Org-tree dispatch with real-time streaming
59
- - **Activity Stream** — Every event logged (dispatches, tool calls, decisions)
60
- - **CEO Directive** — Change direction while agents are running
61
- - **Cost Tracking** — Per-role, per-model token breakdown
70
+ Tab Panel Mode: wave-scoped org tree, real-time stream, docs browser.
62
71
 
63
- ### 3. Isolation Infrastructure Agents don't collide
72
+ ### 3. ObservabilitySee everything
64
73
 
65
- Multiple agents working simultaneously without stepping on each other.
74
+ ```
75
+ Tab → Panel Mode
76
+
77
+ ┌── W1 Build the API ──────┬── Stream Docs Info ──────────────┐
78
+ │ 3 sessions │ cto → dispatch engineer │
79
+ │ ── Org Tree ── │ engineer → Write src/api/routes.ts│
80
+ │ ● CEO │ engineer 📄 Write src/api/types.ts │
81
+ │ ├─ ● CTO │ qa ▶ Running test suite... │
82
+ │ │ ├─ ● engineer │ │
83
+ │ │ └─ ● qa │ │
84
+ │ └─ ○ CBO │ │
85
+ │ [1] [2*] │ │
86
+ └───────────────────────────┴─────────────────────────────────────┘
87
+ ```
66
88
 
67
- | Resource | Isolation | Status |
68
- |----------|-----------|--------|
69
- | **Code** | Git worktree per session | Designed |
70
- | **Ports** | Dynamic port registry | ✅ Live |
71
- | **Browser** | Separate daemon per session | ✅ Live |
72
- | **Knowledge** | Shared reads, scoped writes | ✅ Live |
89
+ - **Wave-scoped** org tree shows only this wave's active agents
90
+ - **Docs tab** — browse all .md files, ★ marks wave artifacts, Enter → vim
91
+ - **Info tab** wave metadata, sessions, ports
92
+ - **Commands** `/agents` `/sessions` `/kill` `/docs` `/read`
73
93
 
74
- ### 4. AKB (Pre-K / Post-K) — Knowledge that compounds
94
+ ### 4. AKB — Knowledge that compounds
75
95
 
76
- Every AI tool today: `Plan → Execute → Done`. Knowledge resets. Tycono adds what the industry doesn't have:
96
+ Every AI tool: `Plan → Execute → Done`. Knowledge resets. Tycono adds:
77
97
 
78
98
  ```
79
99
  Pre-K: Read existing knowledge → Plan grounded in what the company knows
@@ -81,35 +101,7 @@ Execute: Do the work
81
101
  Post-K: Extract insights → Cross-link → Register in knowledge graph
82
102
  ```
83
103
 
84
- Session 50 is dramatically smarter than session 1. Your company learns.
85
-
86
- ## Why Tycono?
87
-
88
- Same goal as Cursor, Lovable, Bolt — **get AI to do your work**. Different method.
89
-
90
- | | Cursor / Lovable / Bolt | Tycono |
91
- |---|---|---|
92
- | **Agents** | 1 AI helps you | **AI team works for you** |
93
- | **Your role** | Keep directing | **Give one order, watch** |
94
- | **Knowledge** | Resets every session | **Compounds forever** |
95
- | **Quality** | You review everything | **QA agent catches bugs** |
96
- | **Scale** | 1 task at a time | **Parallel across roles** |
97
- | **Visibility** | Editor / chat | **Real-time org tree** |
98
-
99
- ## Company-as-Code
100
-
101
- Just as Terraform turns `.tf` files into running infrastructure, Tycono turns YAML and Markdown into a running company.
102
-
103
- ```
104
- IaC CaC (Company-as-Code)
105
- ───────────────────── ─────────────────────
106
- .tf → servers role.yaml → org structure
107
- playbook → config CLAUDE.md → operating rules
108
- Dockerfile → containers skills/ → capabilities
109
- state file → infra state knowledge/ → org memory
110
- ```
111
-
112
- Your company is **versionable**, **reproducible**, and **forkable** — just like code.
104
+ Session 50 is dramatically smarter than session 1.
113
105
 
114
106
  ## Quick Start
115
107
 
@@ -120,99 +112,64 @@ npx tycono
120
112
 
121
113
  A setup wizard guides you through:
122
114
 
123
- 1. **Pick an AI engine** — Claude API, Claude Max, or auto-detect
124
- 2. **Name your company** — set mission and domain
125
- 3. **Choose a team template** — or build from scratch
126
- 4. **Watch them work** — your browser opens to a live dashboard
115
+ 1. **Name your company** — set mission and domain
116
+ 2. **Choose a team template** — Startup, Research, Agency, or Custom
117
+ 3. **Start working** — type naturally, your AI team responds
127
118
 
128
119
  ### Requirements
129
120
 
130
121
  - Node.js >= 18
131
- - [Anthropic API key](https://console.anthropic.com/) or Claude Max subscription
132
-
133
- ## Interfaces
134
-
135
- ### Web Dashboard — Visual management
136
-
137
- A browser-based dashboard for visual management. Org tree, Wave dispatch, Knowledge graph, Activity stream.
138
-
139
- <p align="center">
140
- <img src=".github/assets/hero-office.png" alt="Web Dashboard" width="640" />
141
- </p>
142
-
143
- - **Wave Center** — selective org-tree dispatch with target checkboxes
144
- - **Chats** — 1:1 conversations with any role, persistent sessions
145
- - **Knowledge Base** — graph/tree/list views, cross-linked documents
146
- - **Decisions** — CEO strategic decision log with full context
147
-
148
- ### TUI — Terminal-native operations *(coming soon)*
122
+ - [Claude Code CLI](https://claude.ai/download) (recommended) or Anthropic API key
149
123
 
150
- For developers who live in the terminal. A k9s/lazygit-style multi-panel TUI built with [Ink](https://github.com/vadimdemedes/ink).
151
-
152
- ```
153
- ┌──────────────────────────────────────────────────┐
154
- │ TYCONO v0.2 │ Wave #37 running │ 3 active │$2.1│
155
- ├──────────────┬───────────────────────────────────┤
156
- │ [Org Tree] │ [Real-time Stream] │
157
- │ CEO │ CTO: "Reviewing architecture..." │
158
- │ ├ CTO ● │ → dispatch → Engineer │
159
- │ │ ├ ENG ○ │ CBO: "Market analysis done" ✓ │
160
- │ │ └ QA ○ │ │
161
- │ └ CBO ● │ │
162
- ├──────────────┴───────────────────────────────────┤
163
- │ > wave "Write the Q1 strategy report" │
164
- └──────────────────────────────────────────────────┘
165
- ```
124
+ ## CLI
166
125
 
167
126
  ```bash
168
- npx tycono --tui # Terminal mode (coming soon)
169
- npx tycono # Web dashboard (current)
127
+ npx tycono # Start TUI (default)
128
+ npx tycono ./my-company # Start with specific directory
129
+ npx tycono --classic # Pixel office web UI
130
+ npx tycono --attach # Connect to running API server
131
+ npx tycono --help # Show help
170
132
  ```
171
133
 
172
- Same API server, same engine — just a different frontend. Use what fits your workflow.
173
-
174
- ## Key Features
175
-
176
- ### CEO Wave — One order moves the company
177
-
178
- Write a directive. Select target roles on the org tree. Hit dispatch. Every selected agent receives their piece of the work, filtered through the hierarchy.
179
-
180
- <p align="center">
181
- <img src=".github/assets/wave-center.png" alt="Wave Center — selective org-tree dispatch" width="640" />
182
- </p>
183
-
184
- ### Living Knowledge (AKB)
185
-
186
- Every task produces knowledge. Cross-linked Markdown documents that grow with every session. Search, navigate, never lose context. Session 50 is dramatically smarter than session 1.
187
-
188
- <p align="center">
189
- <img src=".github/assets/knowledge-graph.png" alt="Knowledge Base — graph view with 194+ cross-linked documents" width="640" />
190
- </p>
134
+ ## TUI Commands
191
135
 
192
- ### Role-Based Authority
193
-
194
- Each role has scoped authority defined in `role.yaml`. Engineers can't make CEO decisions. PMs can't merge code. The org chart isn't decoration — it's enforcement.
195
-
196
- ### Local-First, BYOK
136
+ ```
137
+ Type naturally to talk to your AI team.
138
+
139
+ /new [text] Create new wave
140
+ /waves List all waves
141
+ /focus <n> Switch to wave n
142
+ /agents Wave → Role → Session tree
143
+ /sessions Sessions + ports
144
+ /kill <id> Kill a session
145
+ /cleanup Remove dead sessions
146
+ /docs Files created in this wave
147
+ /read <path> Preview file content
148
+ /open <path> Open in $EDITOR (vim)
149
+ /help Show help
150
+ /quit Exit
151
+
152
+ Tab Panel Mode (org tree + stream + docs)
153
+ 1-9 Switch wave (in Panel Mode)
154
+ h/l Switch tab (Stream/Docs/Info)
155
+ j/k Navigate
156
+ Ctrl+C Quit
157
+ ```
197
158
 
198
- Everything runs on your machine. Your data never leaves. Bring your own Anthropic API key — no middleman, no telemetry, no tracking.
159
+ ## Company-as-Code
199
160
 
200
- ## How It Works
161
+ Just as Terraform turns `.tf` files into running infrastructure, Tycono turns YAML and Markdown into a running company.
201
162
 
202
163
  ```
203
- You (CEO)
204
- └── Give a directive via Wave or direct chat
205
- └── Context Engine routes to the right Role
206
- └── Role reads its knowledge + skills, executes within authority
207
- └── Knowledge updates, results flow back up
208
- └── Your company gets smarter
164
+ IaC CaC (Company-as-Code)
165
+ ───────────────────── ─────────────────────
166
+ .tf → servers role.yaml → org structure
167
+ playbook → config CLAUDE.md → operating rules
168
+ Dockerfile → containers skills/ → capabilities
169
+ state file → infra state knowledge/ → org memory
209
170
  ```
210
171
 
211
- Every role has:
212
- - `role.yaml` — Identity, authority, knowledge scope, reporting structure
213
- - `SKILL.md` — Tools, commands, and capability guides
214
- - `profile.md` — Public-facing description and persona
215
- - `journal/` — Work history and learnings
172
+ Your company is **versionable**, **reproducible**, and **forkable** — just like code.
216
173
 
217
174
  ## Your Company Structure
218
175
 
@@ -232,19 +189,37 @@ your-company/
232
189
 
233
190
  | Template | Roles | Best For |
234
191
  |----------|-------|----------|
235
- | **Startup** | CTO + PM + Engineer + Designer | Product development |
192
+ | **Startup** | CTO + PM + Engineer + Designer + QA | Product development |
236
193
  | **Research** | Lead Researcher + Analyst + Writer | Analysis & reports |
237
194
  | **Agency** | Creative Director + Designer + Developer | Client projects |
238
195
  | **Custom** | Start empty, hire as you go | Full control |
239
196
 
240
- ## CLI Usage
197
+ ## Why Tycono?
241
198
 
242
- ```bash
243
- npx tycono # Start server + web dashboard
244
- npx tycono --tui # Terminal UI (coming soon)
245
- npx tycono --help # Show help
246
- npx tycono --version # Show version
247
- ```
199
+ | | Cursor / Lovable / Bolt | Tycono |
200
+ |---|---|---|
201
+ | **Agents** | 1 AI helps you | **AI team works for you** |
202
+ | **Your role** | Keep directing | **Give one order, watch** |
203
+ | **Knowledge** | Resets every session | **Compounds forever** |
204
+ | **Quality** | You review everything | **QA agent catches bugs** |
205
+ | **Scale** | 1 task at a time | **Parallel across roles** |
206
+ | **Interface** | Editor / chat | **Terminal-native TUI** |
207
+
208
+ ## Origin Story
209
+
210
+ Tycono started as an AI office tycoon game — pixel characters walking around, sitting at desks, chatting in Slack-like channels. It was fun to watch.
211
+
212
+ But the agents underneath were actually useful. They wrote real code, real documents, made real decisions. The game UI was cute; the real value was the AI team.
213
+
214
+ So we stripped the pixels and built a terminal tool. Same AI team, no game — just work.
215
+
216
+ The pixel office lives on as `npx tycono --classic` — a reminder of where it started.
217
+
218
+ <p align="center">
219
+ <img src=".github/assets/hero-office.png" alt="Where it started — pixel office" width="480" />
220
+ <br>
221
+ <sub>Where it started: an AI office tycoon game</sub>
222
+ </p>
248
223
 
249
224
  ## Environment Variables
250
225
 
@@ -253,23 +228,21 @@ npx tycono --version # Show version
253
228
  | `ANTHROPIC_API_KEY` | Your Anthropic API key | — |
254
229
  | `PORT` | Server port | auto-detect |
255
230
  | `COMPANY_ROOT` | Company directory | current directory |
231
+ | `EDITOR` | Editor for /open command | vim |
256
232
 
257
233
  ## Roadmap
258
234
 
259
- - [x] Web dashboard (Office + Pro views)
235
+ - [x] TUI terminal-native interface (default)
236
+ - [x] Multi-Wave — parallel persistent workspaces
237
+ - [x] Dual Mode — direct answer vs team dispatch
260
238
  - [x] CEO Wave dispatch with org-tree targeting
261
239
  - [x] AKB — Pre-K / Post-K knowledge loop
262
240
  - [x] Port Registry for multi-agent isolation
263
- - [ ] **TUI mode** — terminal-native multi-panel interface *(in progress)*
241
+ - [x] Session lifecycle persistence
264
242
  - [ ] Git worktree isolation per agent session
265
- - [ ] **Desktop app** (.dmg / .exe) — background execution, notifications, no API key setup needed
243
+ - [ ] **Desktop app** (.dmg / .exe) — background execution, notifications
266
244
  - [ ] Multi-LLM support (OpenAI, local models)
267
-
268
- ## Built with Tycono
269
-
270
- This isn't a demo. Tycono's own landing page, documentation, and knowledge base were built by AI agents running inside Tycono. The PM wrote the PRD. The CTO reviewed architecture. The Designer created UX specs. The Engineer implemented every section.
271
-
272
- 194 knowledge documents. 12 CEO decisions. 8 active roles. All managed through the same system you're about to use.
245
+ - [ ] Company Preset Marketplace
273
246
 
274
247
  ## Development
275
248
 
@@ -282,20 +255,8 @@ cd src/web && npm install && cd ../..
282
255
 
283
256
  # Dev mode (hot reload)
284
257
  npm run dev
285
-
286
- # Type check
287
- npm run typecheck
288
258
  ```
289
259
 
290
- ## Contributing
291
-
292
- See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
293
-
294
- ## Get Help
295
-
296
- - [GitHub Issues](https://github.com/seongsu-kang/tycono/issues) — Bug reports and feature requests
297
- - [GitHub Discussions](https://github.com/seongsu-kang/tycono/discussions) — Questions and ideas
298
-
299
260
  ## License
300
261
 
301
262
  [MIT](LICENSE)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tycono",
3
- "version": "0.1.96",
3
+ "version": "0.1.98",
4
4
  "description": "Build an AI company. Watch them work.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -257,20 +257,22 @@ class SupervisorHeartbeat {
257
257
  // Short messages with question marks → conversation
258
258
  if (t.includes('?') && t.length < 100) return true;
259
259
 
260
+ // Task patterns FIRST — action verbs override question patterns
261
+ const taskPatterns = [
262
+ /만들어/, /구현해/, /개발해/, /수정해/, /변경해/, /리팩토링/,
263
+ /설계해/, /작성해/, /배포해/, /테스트해/, /고쳐/, /해줘/, /해봐/,
264
+ /진행시켜/, /진행해/, /시작해/, /실행해/, /돌려/,
265
+ /build/i, /create/i, /implement/i, /develop/i, /fix/i, /deploy/i, /refactor/i,
266
+ /proceed/i, /start/i, /execute/i, /run/i, /do it/i, /go ahead/i,
267
+ ];
268
+ if (taskPatterns.some(p => p.test(t))) return false;
269
+
260
270
  // Korean question patterns
261
271
  const questionPatterns = [
262
272
  /확인해/, /알려줘/, /보여줘/, /어때/, /뭐야/, /뭐지/, /뭘까/,
263
- /상태/, /상황/, /진행/, /현재/, /어디/, /얼마/,
273
+ /상태/, /상황/, /현재/, /어디/, /얼마/,
264
274
  /what/i, /how.*going/i, /status/i, /check/i, /show/i, /tell/i,
265
275
  ];
266
- if (questionPatterns.some(p => p.test(t))) return true;
267
-
268
- // Long directives with action verbs → dispatch
269
- const taskPatterns = [
270
- /만들어/, /구현해/, /개발해/, /수정해/, /변경해/, /리팩토링/,
271
- /설계해/, /작성해/, /배포해/, /테스트해/, /고쳐/,
272
- /build/i, /create/i, /implement/i, /develop/i, /fix/i, /deploy/i, /refactor/i,
273
- ];
274
276
  if (taskPatterns.some(p => p.test(t))) return false;
275
277
 
276
278
  // Default: short → conversation, long → dispatch
@@ -341,7 +343,6 @@ Do NOT dispatch anyone. Do NOT create new files. Just answer concisely.`;
341
343
  roleId: 'ceo',
342
344
  task,
343
345
  sourceRole: 'ceo',
344
- readOnly: true, // readOnly = no code changes, conversation only
345
346
  sessionId,
346
347
  });
347
348
 
@@ -462,28 +462,26 @@ export const PanelMode: React.FC<PanelModeProps> = ({
462
462
  </Box>
463
463
  ) : (
464
464
  <Box flexGrow={1} flexDirection="column">
465
- {/* File list (scrollable region) */}
466
- {!selectedDoc || docsScroll === 0 ? (
465
+ {docsScroll === 0 ? (
466
+ /* File list only render visible window (prevent Yoga OOM on 600+ files) */
467
467
  <Box flexDirection="column" marginTop={0}>
468
- {docsList.slice(0, termHeight - 8).map((doc, i) => (
468
+ <Text color="gray" dimColor>{docsList.length} files{docsIndex > 0 ? ` (${docsIndex + 1}/${docsList.length})` : ''}</Text>
469
+ {docsList.slice(docsIndex, docsIndex + termHeight - 10).map((doc, i) => (
469
470
  <Box key={doc.path}>
470
471
  <Text
471
- color={i === docsIndex ? 'cyan' : doc.isWave ? 'green' : 'white'}
472
- bold={i === docsIndex}
473
- inverse={i === docsIndex}
472
+ color={i === 0 ? 'cyan' : doc.isWave ? 'green' : 'white'}
473
+ bold={i === 0}
474
+ inverse={i === 0}
474
475
  >
475
- {doc.isWave ? '\u2605' : ' '} {doc.title.slice(0, 50)}
476
+ {doc.isWave ? '\u2605' : ' '} {doc.title.slice(0, 55)}
476
477
  </Text>
477
478
  </Box>
478
479
  ))}
479
- {docsList.length > termHeight - 8 && (
480
- <Text color="gray"> ... +{docsList.length - (termHeight - 8)} more (Tab to cycle)</Text>
481
- )}
482
480
  </Box>
483
481
  ) : (
484
- /* File preview (when scrolled into file) */
482
+ /* File preview */
485
483
  <Box flexDirection="column">
486
- <Text color="cyan" bold>{selectedDoc.isWave ? '\u2605 ' : ''}{selectedDoc.path.split('/').slice(-2).join('/')}</Text>
484
+ <Text color="cyan" bold>{selectedDoc?.isWave ? '\u2605 ' : ''}{selectedDoc?.path.split('/').slice(-2).join('/')}</Text>
487
485
  <Text color="gray">{'\u2500'.repeat(50)}</Text>
488
486
  {filePreview.slice(docsScroll - 1, docsScroll - 1 + termHeight - 10).map((line, i) => (
489
487
  <Text key={i} color="white" wrap="wrap">{line}</Text>
@@ -493,7 +491,7 @@ export const PanelMode: React.FC<PanelModeProps> = ({
493
491
 
494
492
  <Box marginTop={0}>
495
493
  <Text color="gray" dimColor>
496
- [Enter] {process.env.EDITOR || 'vim'} | [Tab] next | [j/k] {docsScroll > 0 ? 'scroll' : 'select'} | [k] back
494
+ [Enter] {process.env.EDITOR || 'vim'} | [j/k] {docsScroll > 0 ? 'scroll' : 'select'}
497
495
  </Text>
498
496
  </Box>
499
497
  </Box>