tycono-server 0.1.0-beta.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.
Files changed (84) hide show
  1. package/bin/cli.js +35 -0
  2. package/bin/server.ts +160 -0
  3. package/package.json +50 -0
  4. package/src/api/package.json +31 -0
  5. package/src/api/src/create-app.ts +90 -0
  6. package/src/api/src/create-server.ts +251 -0
  7. package/src/api/src/engine/agent-loop.ts +738 -0
  8. package/src/api/src/engine/authority-validator.ts +149 -0
  9. package/src/api/src/engine/context-assembler.ts +912 -0
  10. package/src/api/src/engine/index.ts +27 -0
  11. package/src/api/src/engine/knowledge-gate.ts +365 -0
  12. package/src/api/src/engine/llm-adapter.ts +304 -0
  13. package/src/api/src/engine/org-tree.ts +270 -0
  14. package/src/api/src/engine/role-lifecycle.ts +369 -0
  15. package/src/api/src/engine/runners/claude-cli.ts +796 -0
  16. package/src/api/src/engine/runners/direct-api.ts +66 -0
  17. package/src/api/src/engine/runners/index.ts +30 -0
  18. package/src/api/src/engine/runners/types.ts +95 -0
  19. package/src/api/src/engine/skill-template.ts +134 -0
  20. package/src/api/src/engine/tools/definitions.ts +201 -0
  21. package/src/api/src/engine/tools/executor.ts +611 -0
  22. package/src/api/src/routes/active-sessions.ts +134 -0
  23. package/src/api/src/routes/coins.ts +153 -0
  24. package/src/api/src/routes/company.ts +57 -0
  25. package/src/api/src/routes/cost.ts +141 -0
  26. package/src/api/src/routes/engine.ts +220 -0
  27. package/src/api/src/routes/execute.ts +1075 -0
  28. package/src/api/src/routes/git.ts +211 -0
  29. package/src/api/src/routes/knowledge.ts +378 -0
  30. package/src/api/src/routes/operations.ts +309 -0
  31. package/src/api/src/routes/preferences.ts +63 -0
  32. package/src/api/src/routes/presets.ts +123 -0
  33. package/src/api/src/routes/projects.ts +82 -0
  34. package/src/api/src/routes/quests.ts +41 -0
  35. package/src/api/src/routes/roles.ts +112 -0
  36. package/src/api/src/routes/save.ts +152 -0
  37. package/src/api/src/routes/sessions.ts +288 -0
  38. package/src/api/src/routes/setup.ts +437 -0
  39. package/src/api/src/routes/skills.ts +357 -0
  40. package/src/api/src/routes/speech.ts +959 -0
  41. package/src/api/src/routes/supervision.ts +136 -0
  42. package/src/api/src/routes/sync.ts +165 -0
  43. package/src/api/src/server.ts +59 -0
  44. package/src/api/src/services/activity-stream.ts +184 -0
  45. package/src/api/src/services/activity-tracker.ts +115 -0
  46. package/src/api/src/services/claude-md-manager.ts +94 -0
  47. package/src/api/src/services/company-config.ts +115 -0
  48. package/src/api/src/services/database.ts +77 -0
  49. package/src/api/src/services/digest-engine.ts +313 -0
  50. package/src/api/src/services/execution-manager.ts +1036 -0
  51. package/src/api/src/services/file-reader.ts +77 -0
  52. package/src/api/src/services/git-save.ts +614 -0
  53. package/src/api/src/services/job-manager.ts +16 -0
  54. package/src/api/src/services/knowledge-importer.ts +466 -0
  55. package/src/api/src/services/markdown-parser.ts +173 -0
  56. package/src/api/src/services/port-registry.ts +222 -0
  57. package/src/api/src/services/preferences.ts +150 -0
  58. package/src/api/src/services/preset-loader.ts +149 -0
  59. package/src/api/src/services/pricing.ts +34 -0
  60. package/src/api/src/services/scaffold.ts +546 -0
  61. package/src/api/src/services/session-store.ts +340 -0
  62. package/src/api/src/services/supervisor-heartbeat.ts +897 -0
  63. package/src/api/src/services/team-recommender.ts +382 -0
  64. package/src/api/src/services/token-ledger.ts +127 -0
  65. package/src/api/src/services/wave-messages.ts +194 -0
  66. package/src/api/src/services/wave-multiplexer.ts +356 -0
  67. package/src/api/src/services/wave-tracker.ts +359 -0
  68. package/src/api/src/utils/role-level.ts +31 -0
  69. package/src/core/scaffolder.ts +620 -0
  70. package/src/shared/types.ts +224 -0
  71. package/templates/CLAUDE.md.tmpl +239 -0
  72. package/templates/company.md.tmpl +17 -0
  73. package/templates/gitignore.tmpl +28 -0
  74. package/templates/roles.md.tmpl +8 -0
  75. package/templates/skills/_manifest.json +23 -0
  76. package/templates/skills/agent-browser/SKILL.md +159 -0
  77. package/templates/skills/agent-browser/meta.json +19 -0
  78. package/templates/skills/akb-linter/SKILL.md +125 -0
  79. package/templates/skills/akb-linter/meta.json +12 -0
  80. package/templates/skills/knowledge-gate/SKILL.md +120 -0
  81. package/templates/skills/knowledge-gate/meta.json +12 -0
  82. package/templates/teams/agency.json +58 -0
  83. package/templates/teams/research.json +58 -0
  84. package/templates/teams/startup.json +58 -0
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Shared Type Contract — Single Source of Truth (D-014 Session-Centric)
3
+ *
4
+ * 이 파일은 API와 Web이 공유하는 모든 상태/이벤트 타입을 정의합니다.
5
+ * 상태 관련 타입을 추가하거나 변경할 때는 반드시 이 파일을 수정하세요.
6
+ *
7
+ * 규칙:
8
+ * 1. 상태 타입은 여기서만 정의 — api/web에서 재정의 금지
9
+ * 2. UI-only 상태(waiting, connecting 등)는 별도 섹션에 명시적 분리
10
+ * 3. 상태 전이는 TRANSITIONS 맵으로 검증 가능
11
+ *
12
+ * D-014: Session이 모든 대화의 일급 단위. Job은 내부 런타임 핸들.
13
+ */
14
+
15
+ /* ═══════════════════════════════════════════════
16
+ * Message — 실행 단위의 핵심 상태 (D-014: 구 Job 대체)
17
+ * ═══════════════════════════════════════════════ */
18
+
19
+ /** Message의 실행 상태 — 시스템 전체에서 유일한 정의 */
20
+ export type MessageStatus = 'streaming' | 'done' | 'error' | 'awaiting_input' | 'interrupted';
21
+
22
+ /** /api/exec/status 등에서 Role 단위로 집계할 때 사용 */
23
+ export type RoleStatus = 'idle' | 'working' | 'awaiting_input' | 'done';
24
+
25
+ /** MessageStatus → RoleStatus 변환 (유일한 매핑 규칙) */
26
+ export function messageStatusToRoleStatus(status: MessageStatus): RoleStatus {
27
+ switch (status) {
28
+ case 'streaming': return 'working';
29
+ case 'awaiting_input': return 'awaiting_input';
30
+ case 'done': return 'done';
31
+ case 'error': return 'done';
32
+ case 'interrupted': return 'done';
33
+ }
34
+ }
35
+
36
+ /** Role이 "활성 상태"인지 판단 — exec/status, Org Chart 등에서 사용 */
37
+ export function isRoleActive(status: RoleStatus): boolean {
38
+ return status === 'working' || status === 'awaiting_input';
39
+ }
40
+
41
+ /** Message가 "활성 상태"인지 판단 */
42
+ export function isMessageActive(status: MessageStatus): boolean {
43
+ return status === 'streaming' || status === 'awaiting_input';
44
+ }
45
+
46
+ /** Message가 종료 상태인지 판단 */
47
+ export function isMessageTerminal(status: MessageStatus): boolean {
48
+ return status === 'done' || status === 'error' || status === 'interrupted';
49
+ }
50
+
51
+ /** 허용된 상태 전이 (from → to[]) */
52
+ export const MESSAGE_TRANSITIONS: Record<MessageStatus, MessageStatus[]> = {
53
+ streaming: ['done', 'error', 'awaiting_input', 'interrupted'],
54
+ awaiting_input: ['streaming', 'done', 'error', 'interrupted'],
55
+ interrupted: ['streaming', 'done'], // re-dispatch 또는 CEO dismiss
56
+ done: [],
57
+ error: [],
58
+ };
59
+
60
+ /** 상태 전이 유효성 검증 */
61
+ export function canTransition(from: MessageStatus, to: MessageStatus): boolean {
62
+ return MESSAGE_TRANSITIONS[from].includes(to);
63
+ }
64
+
65
+ /* ═══════════════════════════════════════════════
66
+ * Activity Events — 실행 이벤트 로그
67
+ * ═══════════════════════════════════════════════ */
68
+
69
+ /** 모든 이벤트 타입 — Message.events[]에 기록되는 유일한 어휘 */
70
+ export type ActivityEventType =
71
+ // Message lifecycle (D-014: 구 job:* → msg:*)
72
+ | 'msg:start' | 'msg:done' | 'msg:error'
73
+ | 'msg:awaiting_input' | 'msg:reply'
74
+ | 'msg:turn-complete'
75
+ // Execution
76
+ | 'text' | 'thinking'
77
+ | 'tool:start' | 'tool:result'
78
+ // Dispatch (child session)
79
+ | 'dispatch:start' | 'dispatch:done'
80
+ // Harness (turn limits)
81
+ | 'turn:warning' | 'turn:limit'
82
+ // Knowledge import
83
+ | 'import:scan' | 'import:process' | 'import:created'
84
+ // Trace (full prompt/response capture for AI debugging)
85
+ | 'prompt:assembled' | 'trace:response'
86
+ // Supervision (C-Level heartbeat)
87
+ | 'heartbeat:tick' | 'heartbeat:skip'
88
+ // Other
89
+ | 'stderr';
90
+
91
+ export interface ActivityEvent {
92
+ seq: number;
93
+ ts: string;
94
+ type: ActivityEventType;
95
+ roleId: string;
96
+ parentSessionId?: string;
97
+ /** Trace ID — top-level sessionId, inherited by child sessions */
98
+ traceId?: string;
99
+ data: Record<string, unknown>;
100
+ }
101
+
102
+ /* ═══════════════════════════════════════════════
103
+ * Session — D-014 통합 세션
104
+ * ═══════════════════════════════════════════════ */
105
+
106
+ export type SessionStatus = 'active' | 'closed';
107
+ export type SessionSource = 'chat' | 'wave' | 'dispatch' | 'consult';
108
+
109
+ /* ═══════════════════════════════════════════════
110
+ * Wave — 조직 전파 단위
111
+ * ═══════════════════════════════════════════════ */
112
+
113
+ /** Wave JSON에 저장되는 role별 상태 */
114
+ export type WaveRoleStatus = MessageStatus | 'unknown';
115
+
116
+ /* ═══════════════════════════════════════════════
117
+ * Frontend-Only 상태 (UI 전용, 백엔드에는 없음)
118
+ * 명시적으로 분리하여 혼동 방지
119
+ * ═══════════════════════════════════════════════ */
120
+
121
+ /** Wave 노드의 UI 상태 — MessageStatus + UI-only 상태 */
122
+ export type WaveNodeStatus =
123
+ | MessageStatus // 'streaming' | 'done' | 'error' | 'awaiting_input' | 'interrupted'
124
+ | 'waiting' // 아직 dispatch 안 됨 (UI 초기 상태)
125
+ | 'not-dispatched'; // wave 완료 후에도 dispatch 안 된 노드
126
+
127
+ /** WaveNode가 "활성 상태"인지 판단 — UI-only 상태 포함 */
128
+ export function isWaveNodeActive(status: WaveNodeStatus): boolean {
129
+ return status === 'streaming' || status === 'awaiting_input';
130
+ }
131
+
132
+ /** SSE 연결 상태 — 네트워크 레벨, 실행 상태와 무관 */
133
+ export type StreamStatus = 'idle' | 'connecting' | 'streaming' | 'done' | 'error';
134
+
135
+ /** ActivityEventType → MessageStatus 변환 (wave replay 등에서 사용) */
136
+ export function eventTypeToMessageStatus(eventType: ActivityEventType): MessageStatus | 'unknown' {
137
+ switch (eventType) {
138
+ case 'msg:done': return 'done';
139
+ case 'msg:error': return 'error';
140
+ case 'msg:awaiting_input': return 'awaiting_input';
141
+ default: return 'unknown';
142
+ }
143
+ }
144
+
145
+ /** TeamStatus — Role별 현재 상태 + 작업 내용 (context-assembler, runner에서 공유) */
146
+ export type TeamStatus = Record<string, { status: RoleStatus; task?: string }>;
147
+
148
+ /* ═══════════════════════════════════════════════
149
+ * Preset — Wave-scoped team configuration
150
+ * ═══════════════════════════════════════════════ */
151
+
152
+ /** preset.yaml 스키마 */
153
+ export interface PresetDefinition {
154
+ /** Spec version (e.g. "preset/v1") */
155
+ spec: string;
156
+ /** Unique identifier (directory name) */
157
+ id: string;
158
+ /** Display name */
159
+ name: string;
160
+ /** Short tagline */
161
+ tagline?: string;
162
+ /** Version string */
163
+ version: string;
164
+ /** Full description */
165
+ description?: string;
166
+ /** Author info */
167
+ author?: {
168
+ id: string;
169
+ name: string;
170
+ verified?: boolean;
171
+ };
172
+ /** Category / classification */
173
+ category?: string;
174
+ industry?: string;
175
+ stage?: string;
176
+ use_case?: string[];
177
+ /** Role IDs included in this preset */
178
+ roles: string[];
179
+ /** Counts */
180
+ knowledge_docs?: number;
181
+ skills_count?: number;
182
+ /** Pricing */
183
+ pricing?: {
184
+ type: 'one-time' | 'subscription';
185
+ price: number;
186
+ wave_scoped_tier?: string;
187
+ };
188
+ /** Tags for search */
189
+ tags?: string[];
190
+ languages?: string[];
191
+ /** Stats (marketplace) */
192
+ stats?: {
193
+ installs: number;
194
+ rating: number;
195
+ reviews: number;
196
+ waves_used: number;
197
+ };
198
+ /** Wave-scoped recommendations */
199
+ wave_scoped?: {
200
+ recommended_tasks?: string[];
201
+ task_keywords?: string[];
202
+ avg_wave_duration?: string;
203
+ complexity?: string;
204
+ };
205
+ }
206
+
207
+ /** Loaded preset with resolved path info */
208
+ export interface LoadedPreset {
209
+ definition: PresetDefinition;
210
+ /** Absolute path to preset directory (or null for _default) */
211
+ path: string | null;
212
+ /** Whether this is the _default preset */
213
+ isDefault: boolean;
214
+ }
215
+
216
+ /** Preset summary for TUI display */
217
+ export interface PresetSummary {
218
+ id: string;
219
+ name: string;
220
+ description?: string;
221
+ rolesCount: number;
222
+ roles: string[];
223
+ isDefault: boolean;
224
+ }
@@ -0,0 +1,239 @@
1
+ # Company Rules
2
+
3
+ > Powered by [Tycono](https://tycono.ai) — AI Company Operating Platform
4
+
5
+ ---
6
+
7
+ ## Task Routing
8
+
9
+ | Task | Read First | Role |
10
+ |------|-----------|------|
11
+ | Product planning | `projects/` | PM |
12
+ | Technical design | `architecture/` | CTO |
13
+ | Implementation | `projects/*/tasks.md` | Engineer |
14
+ | UI/UX Design | `projects/*/design/` | Designer |
15
+ | Testing/QA | `projects/*/tasks.md` | QA |
16
+ | E2E Testing | `e2e-experiments/tui-e2e-testcases.md` | QA |
17
+ | Operations | `marketing/` | PM |
18
+ | Business/Revenue | `company.md` | CBO |
19
+ | Domain knowledge | `knowledge.md` | CBO |
20
+
21
+ ---
22
+
23
+ ## AKB Core Concepts
24
+
25
+ > **AKB** = A file-based knowledge system where AI uses **search (Grep/Glob)** to find and **contextual links** to navigate
26
+ >
27
+ > Full reference: `methodologies/agentic-knowledge-base.md`
28
+
29
+ | Layer | Role | AI Usage |
30
+ |-------|------|----------|
31
+ | **Root** (CLAUDE.md) | Minimal routing | Auto-injected as system prompt |
32
+ | **Hub** ({folder}.md) | TOC + tool/guide references | **Check before starting work** |
33
+ | **Node** (*.md) | Actual information | Search directly via Grep/Glob |
34
+
35
+ ---
36
+
37
+ ## AI Work Rules
38
+
39
+ ### The Loop (Work Cycle)
40
+
41
+ Every task follows this cycle. Implementing without completing the cycle is only half the job.
42
+
43
+ | Step | Action | Why |
44
+ |------|--------|-----|
45
+ | ① Knowledge | Check/research related docs | Without context, direction goes wrong |
46
+ | ② Task | Define task from docs | Without requirements, you'll rework |
47
+ | ③ Implement | Execute the actual work | Value creation |
48
+ | ④ Knowledge Update | Update docs with new insights | Prevents knowledge decay |
49
+ | ⑤ Task Update | Update task status, check next work | Ensures continuity |
50
+
51
+ **C-Level**: Execute The Loop autonomously — decompose tasks, analyze dependencies, dispatch independent tasks in parallel, collect results.
52
+ **Member**: After implementation, always complete steps ④ and ⑤.
53
+
54
+ ### Hub-First Principle
55
+
56
+ > ⛔ **Read the relevant Hub document before starting any work.**
57
+
58
+ Check the Task Routing table above to find the right "Read First" path.
59
+ Every folder has a Hub file (`{folder-name}.md`) as its entry point.
60
+ Read the Hub's existing tools/scripts/guides before starting work.
61
+
62
+ ### Skill Check Principle
63
+
64
+ > ⛔ **If `.claude/skills/{role-id}/SKILL.md` exists, you MUST read it.**
65
+
66
+ Skill files define the tools, commands, and guides for each Role.
67
+ Working without reading skills means missing existing tools and starting from scratch.
68
+
69
+ ### Custom Rules (CRITICAL)
70
+
71
+ > ⛔ **Before starting work, check if `custom-rules.md` exists and read it.**
72
+ > This file contains company-specific rules, constraints, and processes.
73
+ > If the file doesn't exist, ignore this section.
74
+
75
+ ### Git Rules
76
+
77
+ - Source code changes: feature branch → PR → merge
78
+ - Direct push to main is prohibited
79
+
80
+ ### Knowledge Gate
81
+
82
+ > **Before creating a new document, search existing docs first.**
83
+
84
+ ```
85
+ 1. Summarize the insight + 3-5 keywords
86
+ 2. Search existing docs with those keywords (grep 3+ terms)
87
+ 3. Decide:
88
+ - Overlap 70%+ -> Add to existing document
89
+ - Overlap 30-70% -> New doc + cross-link to existing
90
+ - Overlap <30% -> New document (register in Hub)
91
+ - Temporary info -> Journal only (no new doc)
92
+ 4. Cross-link to related docs
93
+ 5. Register in the relevant Hub
94
+ ```
95
+
96
+ ### Document Hygiene
97
+
98
+ | Rule | Description |
99
+ |------|-------------|
100
+ | No orphan docs | Every document must be reachable from a Hub |
101
+ | Hub pattern | Each folder's entry point is `{folder}.md` |
102
+ | Prefer existing | Adding 1 doc = maintenance cost. Strengthen existing > create new |
103
+ | Cross-link | New docs must reference at least 1 related doc |
104
+ | Source attribution | External research must cite source and date |
105
+
106
+ ### Skills
107
+
108
+ Roles have equipped **Skills** -- modular capability guides in `.claude/skills/`.
109
+
110
+ - Role-specific skills: `.claude/skills/{role-id}/SKILL.md`
111
+ - Shared skills: `.claude/skills/_shared/{skill-id}/SKILL.md`
112
+ - Each Role's equipped skills are listed in `role.yaml` under `skills:`
113
+ - **Always read SKILL.md before starting work** for that Role
114
+
115
+ ### Agent Dispatch Rules (CRITICAL)
116
+
117
+ > **Sub-agents (Agent/Task) do NOT automatically receive CLAUDE.md.**
118
+ > **You MUST instruct them to read CLAUDE.md in the first line of the prompt.**
119
+
120
+ Without the Root (CLAUDE.md), sub-agents skip Hubs and dive straight into code,
121
+ missing existing tools, guides, and constraints.
122
+
123
+ #### Required Prompt Pattern
124
+
125
+ Every sub-agent prompt **must include**:
126
+
127
+ 1. Instruction to read CLAUDE.md
128
+ 2. **Required skill file paths** for the Role
129
+
130
+ ```
131
+ ⛔ AKB Rule: Read CLAUDE.md before starting work.
132
+ Find the relevant Hub from the "Task Routing" table and read it first.
133
+ Check the Hub's existing tools/guides/constraints before exploring code.
134
+ ⛔ Read the required skill files below and use the tools/commands defined in them.
135
+ ```
136
+
137
+ #### Role Skill Mapping
138
+
139
+ | Role | Required Skills (path: `.claude/skills/{name}/SKILL.md`) |
140
+ |------|--------------------------------------------------------|
141
+ | Each Role | `{role-id}` + shared skills listed in `role.yaml` |
142
+
143
+ > Check each Role's `role.yaml` `skills:` field for the exact list.
144
+
145
+ ### Self-Verification Before Escalation (CRITICAL)
146
+
147
+ > **Before saying "I can't" or "user action needed", check your own tools/skills first.**
148
+
149
+ #### Checklist (before reporting inability)
150
+
151
+ ```
152
+ □ 1. Check CLAUDE.md routing table for relevant skills/tools
153
+ □ 2. Glob search .claude/skills/ for related skills
154
+ □ 3. Read the skill and determine if it can solve the problem
155
+ □ 4. Only if all above fail → Report: "Tried X but unable due to [specific reason]"
156
+ ```
157
+
158
+ ### Exploration Depth
159
+
160
+ > **Don't stop at Hubs. Explore detailed documents for thorough understanding.**
161
+
162
+ | Question Type | Minimum | Additional |
163
+ |--------------|---------|------------|
164
+ | Implementation | Hub | Related Node |
165
+ | Debugging | Hub | Related issues/logs |
166
+ | **Strategy/Design** | Hub | **Design docs, past decisions, architecture details** |
167
+ | **New Feature** | Hub | **Existing implementation patterns, related architecture** |
168
+
169
+ ### Skill Synchronization (CRITICAL)
170
+
171
+ > **When changing code/processes, update related `.claude/skills/` SKILL.md files too.**
172
+
173
+ | Change Type | Skill Update |
174
+ |-------------|-------------|
175
+ | API endpoint change | Update API reference |
176
+ | New tool/script added | Add to tool listing |
177
+ | Process change | Update procedure guide |
178
+ | Feature removed | Remove related section |
179
+
180
+ ### AKB Management (CRITICAL)
181
+
182
+ > **Every Role manages knowledge as part of their work. Don't just code and stop.**
183
+
184
+ After completing any task, check:
185
+
186
+ | # | Item | Description |
187
+ |---|------|-------------|
188
+ | 1 | **New knowledge?** | Did this task produce new insights/decisions/analysis? |
189
+ | 2 | **Search existing docs** | Are there related docs already? (grep 3+ keywords) |
190
+ | 3 | **Decide location** | Add to existing doc vs create new (prefer existing) |
191
+ | 4 | **Hub connection** | Is the new/updated doc reachable from a Hub? |
192
+ | 5 | **Cross-link** | Are there mutual references between related docs? |
193
+ | 6 | **Task update** | Is the task status updated? Next work identified? |
194
+
195
+ ---
196
+
197
+ ## Folder Structure
198
+
199
+ ```
200
+ {project}/
201
+ ├── knowledge/ ← Tycono world. AI agent's cwd. Git root.
202
+ │ ├── CLAUDE.md ← Only AI entry point
203
+ │ ├── .claude/skills/ ← Role skill guides
204
+ │ │ ├── _shared/
205
+ │ │ └── {role-id}/SKILL.md
206
+ │ ├── roles/
207
+ │ │ ├── roles.md ← Hub
208
+ │ │ └── {role-id}/
209
+ │ │ ├── role.yaml
210
+ │ │ ├── profile.md
211
+ │ │ └── journal/
212
+ │ ├── architecture/ ← Hub (technical architecture)
213
+ │ ├── projects/ ← Hub (project tracking)
214
+ │ ├── decisions/ ← CEO decisions
215
+ │ ├── methodologies/ ← Frameworks & principles
216
+ │ ├── presets/ ← Team presets
217
+ │ ├── marketing/ ← Hub (SNS, launch, SEO)
218
+ │ ├── e2e-experiments/ ← Hub (E2E test records)
219
+ │ ├── company.md ← Company info
220
+ │ ├── custom-rules.md ← Company custom rules (user owned)
221
+ │ └── knowledge.md ← Hub (domain knowledge index)
222
+
223
+ ├── .tycono/ ← Operational data (outside git)
224
+ │ ├── config.json ← Engine settings, codeRoots
225
+ │ ├── tycono.db ← SQLite (conversation history)
226
+ │ ├── preferences.json ← UI settings
227
+ │ ├── waves/ ← Wave execution logs
228
+ │ ├── sessions/ ← Session state
229
+ │ ├── standup/ ← Daily standups
230
+ │ ├── cost/ ← Token cost tracking
231
+ │ └── activity-streams/ ← SSE event logs (runtime)
232
+
233
+ └── apps/ ← Code (default monorepo, outside git)
234
+ ```
235
+
236
+ ---
237
+
238
+ <!-- tycono:managed v{{VERSION}} — This file is managed by Tycono. Do not edit manually. -->
239
+ <!-- Company-specific rules go in custom-rules.md (knowledge/ root) -->
@@ -0,0 +1,17 @@
1
+ # {{COMPANY_NAME}}
2
+
3
+ > {{DESCRIPTION}}
4
+
5
+ ## Mission
6
+
7
+ Define your company's mission here.
8
+
9
+ ## Vision
10
+
11
+ Define your company's vision here.
12
+
13
+ ## Values
14
+
15
+ - Value 1
16
+ - Value 2
17
+ - Value 3
@@ -0,0 +1,28 @@
1
+ # Dependencies
2
+ node_modules/
3
+
4
+ # Environment
5
+ .env
6
+ .env.local
7
+ .env.*.local
8
+
9
+ # Engine config (contains API keys)
10
+ .tycono/config.json
11
+
12
+ # OS
13
+ .DS_Store
14
+ Thumbs.db
15
+
16
+ # IDE
17
+ .vscode/
18
+ .idea/
19
+ *.swp
20
+ *.swo
21
+
22
+ # Logs
23
+ *.log
24
+ npm-debug.log*
25
+
26
+ # Runtime state
27
+ operations/activity/
28
+ operations/sessions/
@@ -0,0 +1,8 @@
1
+ # Roles
2
+
3
+ > Role directory for {{COMPANY_NAME}}
4
+
5
+ ## Active Roles
6
+
7
+ | Name | ID | Level | Reports To | Status |
8
+ |------|----|-------|------------|--------|
@@ -0,0 +1,23 @@
1
+ {
2
+ "version": "1.0.0",
3
+ "skills": [
4
+ {
5
+ "id": "knowledge-gate",
6
+ "name": "Knowledge Gate",
7
+ "category": "core",
8
+ "description": "Knowledge documentation gatekeeper with dynamic domain expert analysis."
9
+ },
10
+ {
11
+ "id": "akb-linter",
12
+ "name": "AKB Document Linter",
13
+ "category": "core",
14
+ "description": "Document hygiene checker that finds AI-confusing documents."
15
+ },
16
+ {
17
+ "id": "agent-browser",
18
+ "name": "Agent Browser",
19
+ "category": "core",
20
+ "description": "Token-efficient browser automation CLI for AI agents."
21
+ }
22
+ ]
23
+ }