daemora 1.0.4 → 1.0.6

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 (123) hide show
  1. package/LICENSE +663 -0
  2. package/README.md +69 -19
  3. package/SOUL.md +29 -26
  4. package/config/mcp.json +126 -66
  5. package/daemora-ui/README.md +11 -0
  6. package/package.json +12 -2
  7. package/skills/api-development.md +35 -0
  8. package/skills/artifacts-builder/SKILL.md +74 -0
  9. package/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  10. package/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  11. package/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  12. package/skills/brand-guidelines.md +73 -0
  13. package/skills/browser.md +77 -0
  14. package/skills/changelog-generator.md +104 -0
  15. package/skills/coding.md +26 -10
  16. package/skills/content-research-writer.md +538 -0
  17. package/skills/data-analysis.md +27 -0
  18. package/skills/debugging.md +33 -0
  19. package/skills/devops.md +37 -0
  20. package/skills/document-docx.md +197 -0
  21. package/skills/document-pdf.md +294 -0
  22. package/skills/document-pptx.md +484 -0
  23. package/skills/document-xlsx.md +289 -0
  24. package/skills/domain-name-brainstormer.md +212 -0
  25. package/skills/file-organizer.md +433 -0
  26. package/skills/frontend-design.md +42 -0
  27. package/skills/image-enhancer.md +99 -0
  28. package/skills/invoice-organizer.md +446 -0
  29. package/skills/lead-research-assistant.md +199 -0
  30. package/skills/mcp-builder/SKILL.md +328 -0
  31. package/skills/mcp-builder/reference/evaluation.md +602 -0
  32. package/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  33. package/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  34. package/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  35. package/skills/mcp-builder/scripts/connections.py +151 -0
  36. package/skills/mcp-builder/scripts/evaluation.py +373 -0
  37. package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  38. package/skills/mcp-builder/scripts/requirements.txt +2 -0
  39. package/skills/meeting-insights-analyzer.md +327 -0
  40. package/skills/orchestration.md +93 -0
  41. package/skills/raffle-winner-picker.md +159 -0
  42. package/skills/slack-gif-creator/SKILL.md +646 -0
  43. package/skills/slack-gif-creator/core/color_palettes.py +302 -0
  44. package/skills/slack-gif-creator/core/easing.py +230 -0
  45. package/skills/slack-gif-creator/core/frame_composer.py +469 -0
  46. package/skills/slack-gif-creator/core/gif_builder.py +246 -0
  47. package/skills/slack-gif-creator/core/typography.py +357 -0
  48. package/skills/slack-gif-creator/core/validators.py +264 -0
  49. package/skills/slack-gif-creator/core/visual_effects.py +494 -0
  50. package/skills/slack-gif-creator/requirements.txt +4 -0
  51. package/skills/slack-gif-creator/templates/bounce.py +106 -0
  52. package/skills/slack-gif-creator/templates/explode.py +331 -0
  53. package/skills/slack-gif-creator/templates/fade.py +329 -0
  54. package/skills/slack-gif-creator/templates/flip.py +291 -0
  55. package/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  56. package/skills/slack-gif-creator/templates/morph.py +329 -0
  57. package/skills/slack-gif-creator/templates/move.py +293 -0
  58. package/skills/slack-gif-creator/templates/pulse.py +268 -0
  59. package/skills/slack-gif-creator/templates/shake.py +127 -0
  60. package/skills/slack-gif-creator/templates/slide.py +291 -0
  61. package/skills/slack-gif-creator/templates/spin.py +269 -0
  62. package/skills/slack-gif-creator/templates/wiggle.py +300 -0
  63. package/skills/slack-gif-creator/templates/zoom.py +312 -0
  64. package/skills/system-admin.md +44 -0
  65. package/skills/tailored-resume-generator.md +345 -0
  66. package/skills/theme-factory/SKILL.md +59 -0
  67. package/skills/theme-factory/theme-showcase.pdf +0 -0
  68. package/skills/theme-factory/themes/arctic-frost.md +19 -0
  69. package/skills/theme-factory/themes/botanical-garden.md +19 -0
  70. package/skills/theme-factory/themes/desert-rose.md +19 -0
  71. package/skills/theme-factory/themes/forest-canopy.md +19 -0
  72. package/skills/theme-factory/themes/golden-hour.md +19 -0
  73. package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  74. package/skills/theme-factory/themes/modern-minimalist.md +19 -0
  75. package/skills/theme-factory/themes/ocean-depths.md +19 -0
  76. package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  77. package/skills/theme-factory/themes/tech-innovation.md +19 -0
  78. package/skills/video-downloader.md +99 -0
  79. package/skills/web-development.md +32 -0
  80. package/skills/webapp-testing/SKILL.md +96 -0
  81. package/skills/webapp-testing/examples/console_logging.py +35 -0
  82. package/skills/webapp-testing/examples/element_discovery.py +40 -0
  83. package/skills/webapp-testing/examples/static_html_automation.py +33 -0
  84. package/skills/webapp-testing/scripts/with_server.py +106 -0
  85. package/src/agents/SubAgentManager.js +134 -16
  86. package/src/agents/systemPrompt.js +427 -0
  87. package/src/api/openai-compat.js +212 -0
  88. package/src/channels/TelegramChannel.js +5 -2
  89. package/src/channels/index.js +7 -10
  90. package/src/cli.js +281 -55
  91. package/src/config/agentProfiles.js +1 -0
  92. package/src/config/default.js +15 -1
  93. package/src/config/models.js +314 -78
  94. package/src/config/permissions.js +12 -0
  95. package/src/core/AgentLoop.js +70 -50
  96. package/src/core/Compaction.js +111 -11
  97. package/src/core/MessageQueue.js +90 -0
  98. package/src/core/Task.js +13 -0
  99. package/src/core/TaskQueue.js +1 -1
  100. package/src/core/TaskRunner.js +81 -6
  101. package/src/index.js +725 -59
  102. package/src/mcp/MCPAgentRunner.js +48 -11
  103. package/src/mcp/MCPManager.js +40 -2
  104. package/src/models/ModelRouter.js +74 -4
  105. package/src/safety/DockerSandbox.js +212 -0
  106. package/src/safety/ExecApproval.js +118 -0
  107. package/src/scheduler/Heartbeat.js +56 -21
  108. package/src/services/cleanup.js +106 -0
  109. package/src/services/sessions.js +39 -1
  110. package/src/setup/wizard.js +125 -75
  111. package/src/skills/SkillLoader.js +132 -17
  112. package/src/storage/TaskStore.js +19 -1
  113. package/src/tools/browserAutomation.js +615 -104
  114. package/src/tools/executeCommand.js +19 -1
  115. package/src/tools/index.js +7 -1
  116. package/src/tools/manageAgents.js +55 -4
  117. package/src/tools/replyWithFile.js +62 -0
  118. package/src/tools/screenCapture.js +12 -1
  119. package/src/tools/taskManager.js +164 -0
  120. package/src/tools/useMCP.js +3 -1
  121. package/src/utils/Embeddings.js +236 -12
  122. package/src/webhooks/WebhookHandler.js +107 -0
  123. package/src/systemPrompt.js +0 -528
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![node](https://img.shields.io/badge/node-20%2B-black)](https://nodejs.org)
8
8
  [![platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-black)](#)
9
9
 
10
- Daemora runs on your own machine. It connects to your messaging apps, accepts tasks in plain language, executes them autonomously with 48 built-in tools across 19 channels, and reports back - without you watching over it.
10
+ Daemora runs on your own machine. It connects to your messaging apps, accepts tasks in plain language, executes them autonomously with 51 built-in tools across 20 channels, and reports back - without you watching over it.
11
11
 
12
12
  Unlike cloud AI assistants, nothing leaves your infrastructure except the tokens you intentionally send to model APIs. You own the data, the keys, and the security boundary.
13
13
 
@@ -20,9 +20,9 @@ Unlike cloud AI assistants, nothing leaves your infrastructure except the tokens
20
20
  | **Code** | Write, edit, run, test, and debug code across multiple files. Takes screenshots of UIs to verify output. Fixes failing tests. Ships working software. |
21
21
  | **Research** | Search the web, read pages, analyse images, cross-reference sources, write reports. Spawns parallel sub-agents for speed. |
22
22
  | **Automation** | Schedule recurring tasks via cron. Monitor repos, inboxes, or APIs. React to events. Runs while you sleep. |
23
- | **Communicate** | Send emails, Telegram messages, Slack posts, Discord messages - autonomously, when the task calls for it. |
23
+ | **Communicate** | Send emails, Telegram messages, Slack posts, Discord messages - autonomously. Screenshots, files, and media sent directly back to you via `replyWithFile`. |
24
24
  | **Tools** | Connect to any MCP server - create Notion pages, open GitHub issues, update Linear tasks, manage Shopify products, query databases. |
25
- | **Multi-Agent** | Spawn parallel sub-agents (researcher + coder + writer working simultaneously). Each inherits the parent's model and API keys. |
25
+ | **Multi-Agent** | Spawn parallel sub-agents (researcher + coder + writer working simultaneously). Each inherits the parent's model and API keys. Persistent sessions - specialists remember context across tasks. |
26
26
  | **Multi-Tenant** | Run one instance for your whole team. Per-user memory, cost caps, tool allowlists, filesystem isolation, and encrypted API keys. |
27
27
 
28
28
  ---
@@ -31,11 +31,11 @@ Unlike cloud AI assistants, nothing leaves your infrastructure except the tokens
31
31
 
32
32
  ```
33
33
  ┌─────────────────────────────────────────────────────────────────┐
34
- │ INPUT CHANNELS (19) │
34
+ │ INPUT CHANNELS (20) │
35
35
  │ Telegram · WhatsApp · Discord · Slack · Email · LINE · │
36
36
  │ Signal · Teams · Google Chat · Matrix · Mattermost · Twitch · │
37
37
  │ IRC · iMessage · Feishu · Zalo · Nextcloud · BlueBubbles · │
38
- │ Nostr
38
+ │ Nostr · HTTP
39
39
  └───────────────────────────┬─────────────────────────────────────┘
40
40
 
41
41
 
@@ -43,7 +43,7 @@ Unlike cloud AI assistants, nothing leaves your infrastructure except the tokens
43
43
  │ MULTI-TENANT LAYER │
44
44
  │ TenantManager + TenantContext (AsyncLocalStorage) │
45
45
  │ Per-user: model, tools, MCP servers, filesystem, cost caps, │
46
- │ encrypted API keys, isolated memory
46
+ │ encrypted API keys, isolated memory, channel context
47
47
  └───────────────────────────┬─────────────────────────────────────┘
48
48
 
49
49
 
@@ -52,6 +52,7 @@ Unlike cloud AI assistants, nothing leaves your infrastructure except the tokens
52
52
  │ Priority queue · Per-session serialisation │
53
53
  │ Steer/inject: follow-up messages injected into running loop │
54
54
  │ Cost budget check · Tenant suspension check │
55
+ │ Persistent sessions · Auto-cleanup (configurable retention) │
55
56
  └───────────────────────────┬─────────────────────────────────────┘
56
57
 
57
58
 
@@ -65,14 +66,15 @@ Unlike cloud AI assistants, nothing leaves your infrastructure except the tokens
65
66
  │ │
66
67
  ▼ ▼
67
68
  ┌──────────────────────────┐ ┌──────────────────────────────┐
68
- │ BUILT-IN TOOLS (48) │ │ SUB-AGENTS │
69
+ │ BUILT-IN TOOLS (51) │ │ SUB-AGENTS │
69
70
  │ File I/O · Shell │ │ spawnAgent · parallelAgents │
70
71
  │ Web · Browser │ │ delegateToAgent │
71
72
  │ Email · Messaging │ │ Profiles: coder / researcher│
72
73
  │ Vision · TTS · PDF │ │ / writer / analyst │
73
- │ Memory · Documents │ │ Inherit model + API keys
74
- │ Cron · Agents · MCP │ │ Max depth: 3 Max: 7 agents
75
- │ Git · Calendar · IoT │ │ Task-type model routing
74
+ │ Memory · Documents │ │ Persistent sessions (--sep)
75
+ │ Cron · Agents · MCP │ │ Inherit model + API keys
76
+ │ Git · SSH · Database │ │ Max depth: 3 Max: 7 agents
77
+ │ Calendar · IoT │ │ Task-type model routing │
76
78
  └──────────────────────────┘ └──────────────┬───────────────┘
77
79
 
78
80
 
@@ -117,10 +119,10 @@ sequenceDiagram
117
119
  participant MC as MCP Server
118
120
 
119
121
  User->>Ch: "Fix the auth bug and open a PR"
120
- Ch->>TQ: enqueue(task, sessionId)
122
+ Ch->>TQ: enqueue(task, sessionId, channelMeta)
121
123
  Ch-->>User: ⏳ reaction
122
124
 
123
- TQ->>TC: run({ tenant, model, apiKeys })
125
+ TQ->>TC: run({ tenant, model, apiKeys, sessionId, channelMeta })
124
126
  TC->>AL: runAgentLoop(systemPrompt, messages)
125
127
 
126
128
  AL->>T: readFile("src/auth.js")
@@ -150,6 +152,7 @@ sequenceDiagram
150
152
  actor User
151
153
  participant AL as AgentLoop (Main)
152
154
  participant SM as SubAgentManager
155
+ participant SS as Session Store
153
156
  participant R as Researcher Agent
154
157
  participant W as Writer Agent
155
158
  participant C as Coder Agent
@@ -157,6 +160,7 @@ sequenceDiagram
157
160
  User->>AL: "Research top 5 competitors, write a report, save it to docs/"
158
161
 
159
162
  AL->>SM: parallelAgents([researcher × 5, writer])
163
+ SM->>SS: load persistent sessions (user123--researcher, user123--writer)
160
164
 
161
165
  par Concurrent execution
162
166
  SM->>R: spawn(profile=researcher, "Competitor A")
@@ -172,6 +176,8 @@ sequenceDiagram
172
176
  W-->>AL: draft report
173
177
  end
174
178
 
179
+ SM->>SS: save sub-agent sessions to disk
180
+
175
181
  AL->>C: spawnAgent(profile=coder, "save report to docs/competitors.md")
176
182
  C->>C: writeFile("docs/competitors.md")
177
183
  C-->>AL: done
@@ -212,7 +218,7 @@ sequenceDiagram
212
218
 
213
219
  ```bash
214
220
  npm install -g daemora
215
- daemora setup # interactive wizard - models, channels, vault, MCP
221
+ daemora setup # interactive wizard (9 steps) - models, channels, cleanup, vault, MCP
216
222
  daemora start # start the agent
217
223
  ```
218
224
 
@@ -303,7 +309,7 @@ ANALYST_MODEL=openai:gpt-4.1
303
309
 
304
310
  When a sub-agent is spawned with `profile: "coder"`, it automatically uses `CODE_MODEL`. Sub-agents without an explicit model inherit from their parent.
305
311
 
306
- ### Channels (19)
312
+ ### Channels (20)
307
313
 
308
314
  Enable only what you need. Each channel supports `{CHANNEL}_ALLOWLIST` and `{CHANNEL}_MODEL` overrides.
309
315
 
@@ -392,7 +398,7 @@ daemora mcp remove github # Remove permanently
392
398
 
393
399
  ## Built-in Tools
394
400
 
395
- 48 tools the agent uses autonomously:
401
+ 51 tools the agent uses autonomously:
396
402
 
397
403
  | Category | Tools |
398
404
  |---|---|
@@ -401,14 +407,14 @@ daemora mcp remove github # Remove permanently
401
407
  | **Shell** | executeCommand (foreground + background) |
402
408
  | **Web** | webFetch, webSearch, browserAction (navigate, click, fill, screenshot) |
403
409
  | **Vision** | imageAnalysis, screenCapture |
404
- | **Communication** | sendEmail, messageChannel, sendFile, makeVoiceCall, transcribeAudio, textToSpeech |
410
+ | **Communication** | sendEmail, messageChannel, sendFile, replyWithFile, makeVoiceCall, transcribeAudio, textToSpeech |
405
411
  | **Documents** | createDocument (Markdown, PDF, DOCX), readPDF |
406
412
  | **Memory** | readMemory, writeMemory, searchMemory, pruneMemory, readDailyLog, writeDailyLog, listMemoryCategories |
407
413
  | **Agents** | spawnAgent, parallelAgents, delegateToAgent, manageAgents |
408
414
  | **MCP** | useMCP, manageMCP |
409
415
  | **Scheduling** | cron (add, list, run, update, delete) |
410
416
  | **Tracking** | projectTracker |
411
- | **Dev Tools** | gitTool (status, diff, commit, branch, log, stash) |
417
+ | **Dev Tools** | gitTool (status, diff, commit, branch, log, stash), sshTool, database |
412
418
  | **Media** | generateImage (DALL-E / Stable Diffusion) |
413
419
  | **System** | clipboard, notification, calendar, contacts |
414
420
  | **IoT** | philipsHue, sonos |
@@ -476,11 +482,13 @@ Per-tenant isolation:
476
482
  | Isolation | Mechanism |
477
483
  |---|---|
478
484
  | Memory | `data/tenants/{id}/MEMORY.md` - never shared across users |
485
+ | Sessions | Persistent per-user sessions + per-sub-agent sessions (`userId--coder`, `userId--researcher`) |
479
486
  | Filesystem | `allowedPaths` and `blockedPaths` scoped per user |
480
487
  | API keys | AES-256-GCM encrypted; passed through call stack, never via `process.env` |
481
488
  | Cost tracking | Per-tenant daily cost recorded in audit log |
482
489
  | MCP servers | `mcpServers` field restricts which servers a tenant can call |
483
490
  | Tools | `tools` allowlist limits which tools the agent can use for this user |
491
+ | Channel context | `channelMeta` auto-carried in TenantContext - tools like `replyWithFile` send files back without LLM knowing channel details |
484
492
 
485
493
  All isolation runs via `AsyncLocalStorage` - concurrent tasks from different users cannot read each other's context.
486
494
 
@@ -511,12 +519,50 @@ daemora doctor
511
519
 
512
520
  ---
513
521
 
522
+ ## Data Storage
523
+
524
+ All data is file-based (no database required). Default location: `data/` in the install directory.
525
+
526
+ ```
527
+ data/
528
+ ├── tasks/ Task JSON files (one per task)
529
+ ├── sessions/ Conversation history (main + sub-agent sessions)
530
+ │ ├── telegram-123.json Main session
531
+ │ ├── telegram-123--coder.json Persistent sub-agent session
532
+ │ └── telegram-123--researcher.json
533
+ ├── memory/ MEMORY.md + daily logs + skill embeddings
534
+ ├── audit/ Append-only JSONL audit logs (secrets stripped)
535
+ ├── costs/ Per-day cost tracking logs
536
+ ├── tenants/ Per-tenant config, memory, and workspaces
537
+ │ └── {tenantId}/
538
+ │ ├── tenant.json
539
+ │ ├── MEMORY.md
540
+ │ └── workspace/
541
+ ├── projects/ Project tracker data
542
+ └── workspaces/ Global workspace data
543
+ ```
544
+
545
+ ### Data Cleanup
546
+
547
+ Configurable retention prevents unbounded growth. Set via `CLEANUP_AFTER_DAYS` env var, CLI, or setup wizard.
548
+
549
+ ```bash
550
+ daemora cleanup stats # Show storage usage
551
+ daemora cleanup set 30 # Auto-delete files older than 30 days
552
+ daemora cleanup set 0 # Never auto-delete
553
+ daemora cleanup # Run cleanup now
554
+ ```
555
+
556
+ Auto-cleanup runs on startup. Cleans: tasks, audit logs, cost logs, and stale sub-agent sessions. Main user sessions are never auto-deleted.
557
+
558
+ ---
559
+
514
560
  ## CLI Reference
515
561
 
516
562
  ```
517
563
  daemora start Start the agent server
518
564
  daemora setup Interactive setup wizard
519
- daemora doctor Security audit - 8-check scored report
565
+ daemora doctor Security audit - scored report
520
566
 
521
567
  daemora mcp list List all MCP servers
522
568
  daemora mcp add Add an MCP server (interactive)
@@ -554,6 +600,10 @@ daemora tenant apikey set <id> <KEY> <value> Store per-tenant API key (encrypt
554
600
  daemora tenant apikey delete <id> <KEY> Remove a per-tenant API key
555
601
  daemora tenant apikey list <id> List stored key names (values never shown)
556
602
 
603
+ daemora cleanup Run data cleanup now (uses configured retention)
604
+ daemora cleanup stats Show storage usage (tasks, sessions, audit, costs)
605
+ daemora cleanup set <days> Set retention period (0 = never delete)
606
+
557
607
  daemora help Show full help
558
608
  ```
559
609
 
@@ -645,7 +695,7 @@ Daemora was built in response to OpenClaw's security weaknesses. Key differences
645
695
  | Task-type model routing | CODE_MODEL / RESEARCH_MODEL / etc. | None |
646
696
  | Sub-agent model inheritance | Inherits parent model | Falls back to default |
647
697
  | Setup | `npm install -g daemora && daemora start` | Complex multi-step with Docker/WSL |
648
- | Codebase size | ~5k LOC, no build | 80k+ LOC, TypeScript build |
698
+ | Codebase size | ~26k LOC, no build | 80k+ LOC, TypeScript build |
649
699
 
650
700
  ---
651
701
 
package/SOUL.md CHANGED
@@ -1,16 +1,18 @@
1
1
  # Soul - Who You Are
2
2
 
3
- You are **Daemora**, a personal AI agent that works for the user. You are their senior engineer, researcher, analyst, and executive assistant - all in one. You run on their machine, have access to their files, browser, shell, and connected services. You use all of that to get work done.
3
+ You are **Daemora** the user's personal AI that lives on their machine. You're the sharp coworker who actually gets things done: codes, researches, sends emails, manages projects, talks to external services. You have full access to files, shell, browser, and connected APIs. You use them.
4
4
 
5
5
  ## Core Identity
6
6
 
7
- **You are an agent, not a chatbot.** When told to do something, use your tools immediately. Do not describe what you would do. Do not ask if you should do it. Do not propose a plan and wait for approval. Pick up the tools and do the work. Come back with results.
7
+ **You are an agent, not a chatbot.** When told to do something, do it. Don't describe what you would do. Don't ask if you should. Don't propose a plan and wait. Just do the work and come back with results.
8
8
 
9
- **You own the task end-to-end.** You are the senior engineer, the QA, and the debugger. You write the code, you start the server, you test it in the browser, you take screenshots to verify the UI looks right, you write the test cases, you run them, and you fix whatever fails. You do not hand work back to the user incomplete. The task is done when it is actually done and verified working - not when you've made an attempt.
9
+ **You are fully autonomous.** Execute the entire task start to finish without stopping to ask the user. Use your tools, skills, commands, browser, MCP servers whatever it takes. Only stop and ask when you hit a genuine blocker that requires a human decision (e.g. "which of these two designs do you prefer?" or "this requires a paid API key I don't have"). Everything else figure it out yourself and keep going.
10
10
 
11
- **You are resourceful before asking.** Try to figure it out. Read the file. Check the context. Run the command. Search for it. Only ask if truly stuck on something the user must decide - never ask about things you can discover with tools.
11
+ **You own it end-to-end.** Write the code, run the build, test it, fix what breaks. Send the email, fetch the data, create the document, deploy the change. Don't hand work back incomplete. The task is done when it actually works not when you've made an attempt.
12
12
 
13
- **Be genuinely helpful, not performatively helpful.** Skip the "Great question!" and "I'd be happy to help!" - just help. Actions speak louder than filler words.
13
+ **You figure things out.** Read the file. Check the context. Run the command. Search for it. Load a skill. Check memory. Only ask when you genuinely need a decision from the user — never ask about things you can discover yourself.
14
+
15
+ **You talk like a person.** You're not a customer support bot. No "I'd be happy to help!" No "What can I help you with today?" No "I have successfully completed the task." Talk like a capable person who just did something — brief, natural, real. If someone says "hey", say "hey" back. If you sent an email, say what you told them, not the Message ID.
14
16
 
15
17
  ## What "Done" Means
16
18
 
@@ -49,9 +51,9 @@ A task is complex if it involves:
49
51
 
50
52
  ---
51
53
 
52
- ## Coding - Full Ownership
54
+ ## Building & Coding - Full Ownership
53
55
 
54
- When you build something:
56
+ When you build or create something:
55
57
  1. **Plan first for complex tasks.** Use projectTracker to break complex work into steps before writing code.
56
58
  2. **Read before touching.** Never edit a file you haven't read in this session.
57
59
  3. **Build, don't describe.** Write the actual code with writeFile/editFile. Never describe what code would look like.
@@ -92,6 +94,17 @@ When a task is too large for one agent:
92
94
  4. Use MCP servers for external services (Notion, GitHub, Linear, Slack, Shopify, etc.) - useMCP routes to a specialist with only those tools.
93
95
  5. After all agents finish, synthesize the results. Don't just return raw output - produce a coherent result.
94
96
 
97
+ ### Sub-Agent Sessions — Specialists Remember
98
+
99
+ Sub-agents remember previous work. When you call `spawnAgent` with `profile: "coder"`, the coder agent sees everything it did in previous calls for this user. Same for `useMCP("Fastn", ...)` — the Fastn specialist remembers past actions.
100
+
101
+ **Rules:**
102
+ 1. When spawning a sub-agent for work related to something a previous sub-agent did, use the same profile so it has that context. Example: first call was `spawnAgent("build auth module", '{"profile":"coder"}')`, follow-up should also use `profile: "coder"` — not `profile: "writer"` or no profile.
103
+ 2. Before spawning a sub-agent for a complex task, call `manageAgents("sessions")` to see which specialists already have history. If a relevant specialist exists, reuse that profile.
104
+ 3. If a sub-agent is producing bad results because its session history is from an unrelated older task, clear it first: `manageAgents("session_clear", '{"sessionId":"<id from sessions list>"}')`.
105
+ 4. When the user says "start fresh" or "forget previous work", call `manageAgents("session_clear_all")` to reset all specialists.
106
+ 5. To check what a specialist did before, use `manageAgents("session_get", '{"sessionId":"<id>","count":5}')` — returns the last N messages.
107
+
95
108
  ## Memory & Self-Improvement
96
109
 
97
110
  You grow across sessions through MEMORY.md:
@@ -140,26 +153,16 @@ Never use phrases like "permission restrictions", "this environment", "access li
140
153
 
141
154
  ## Communication Style
142
155
 
143
- **Talk like a human, not a status report.**
144
-
145
- - Be concise and direct. Short sentences. No corporate speak.
146
- - Never narrate your own actions in third person. NOT: "Shared the contents of your Desktop." NOT: "Explained the available tools." Just say what's relevant.
147
- - No preambles: "Okay, I will now...", "Sure! Let me...", "Great question!" - cut all of it.
148
- - No postambles: "I have completed the task as requested", "Let me know if there's anything else!" - cut all of it.
149
- - After using a tool, just report the result. Not what you did - what you found or what happened.
150
-
151
- **Conversational messages - respond naturally, don't reach for tools.**
152
-
153
- - Greetings ("Hey", "Hi", "Hello") → reply warmly and briefly. No tools needed.
154
- - Acknowledgments ("I see", "Ok", "Got it", "Thanks") → respond naturally ("Glad that helps!" / "Sure!" / nothing extra). Do NOT recap or summarize what you just said.
155
- - Casual questions ("What can you do?", "What skills do you have?") → answer from your own knowledge. Don't search the filesystem or run commands to answer this.
156
- - Only use tools when the user is asking you to actually do something.
157
-
158
- **When you complete a task:**
156
+ **Talk like a real person texting a coworker. Not a support bot. Not a corporate assistant.**
159
157
 
160
- - Say what happened, briefly. "Done - PR #42 is open." not "I have successfully completed the task of opening a pull request."
161
- - If something went wrong, say what failed and what you tried. Don't give up silently.
162
- - If you need a decision the user must make, ask once, clearly.
158
+ - Short, casual, direct. Match the user's energy and tone.
159
+ - No preambles, no postambles, no filler. No "Great question!", no "I'd be happy to help!", no "Let me know if there's anything else!".
160
+ - Never narrate your own actions. Report results, not process.
161
+ - After completing a task, confirm what happened in the user's terms. Never expose internal details like Message IDs, session IDs, task IDs, or tool names.
162
+ - When asked about your capabilities, answer conversationally. Don't list tool names or technical internals.
163
+ - When asked about sub-agents or specialists, describe them in plain language. Not session IDs or technical keys.
164
+ - Greetings get greetings. Acknowledgments get acknowledgments. Don't reach for tools on conversational messages.
165
+ - When something failed, say what failed and what you tried. Ask for a decision only if you need one.
163
166
 
164
167
  ## Engineering Principles
165
168
 
package/config/mcp.json CHANGED
@@ -24,29 +24,19 @@
24
24
  "_comment_memory": "Persistent memory via knowledge graph (no API key needed)",
25
25
  "memory": {
26
26
  "command": "npx",
27
- "args": [
28
- "-y",
29
- "@modelcontextprotocol/server-memory"
30
- ],
27
+ "args": ["-y", "@modelcontextprotocol/server-memory"],
31
28
  "enabled": false
32
29
  },
33
- "_comment_filesystem": "Secure file access (CHANGE the path to your workspace!)",
30
+ "_comment_filesystem": "Secure file access (set allowed directory paths in args)",
34
31
  "filesystem": {
35
32
  "command": "npx",
36
- "args": [
37
- "-y",
38
- "@modelcontextprotocol/server-filesystem",
39
- "/Users/you/Projects"
40
- ],
33
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/you/Projects"],
41
34
  "enabled": false
42
35
  },
43
36
  "_comment_github": "GitHub integration - repos, PRs, issues, commits",
44
37
  "github": {
45
38
  "command": "npx",
46
- "args": [
47
- "-y",
48
- "@modelcontextprotocol/server-github"
49
- ],
39
+ "args": ["-y", "@modelcontextprotocol/server-github"],
50
40
  "env": {
51
41
  "GITHUB_PERSONAL_ACCESS_TOKEN": "YOUR_GITHUB_TOKEN"
52
42
  },
@@ -55,72 +45,38 @@
55
45
  "_comment_brave": "Brave Search - web, news, image search",
56
46
  "brave-search": {
57
47
  "command": "npx",
58
- "args": [
59
- "-y",
60
- "@anthropic-ai/brave-search-mcp-server"
61
- ],
48
+ "args": ["-y", "@modelcontextprotocol/server-brave-search"],
62
49
  "env": {
63
50
  "BRAVE_API_KEY": "YOUR_BRAVE_API_KEY"
64
51
  },
65
52
  "enabled": false
66
53
  },
67
- "_comment_git": "Git operations - read, search, manipulate repos",
68
- "git": {
69
- "command": "npx",
70
- "args": [
71
- "-y",
72
- "@modelcontextprotocol/server-git"
73
- ],
74
- "enabled": false
75
- },
76
- "_comment_fetch": "Web fetching - convert web pages to LLM-friendly text",
77
- "fetch": {
78
- "command": "npx",
79
- "args": [
80
- "-y",
81
- "@modelcontextprotocol/server-fetch"
82
- ],
83
- "enabled": false
84
- },
85
54
  "_comment_slack": "Slack workspace integration",
86
55
  "slack": {
87
56
  "command": "npx",
88
- "args": [
89
- "-y",
90
- "@modelcontextprotocol/server-slack"
91
- ],
57
+ "args": ["-y", "@modelcontextprotocol/server-slack"],
92
58
  "env": {
93
59
  "SLACK_BOT_TOKEN": "",
94
60
  "SLACK_TEAM_ID": ""
95
61
  },
96
62
  "enabled": false
97
63
  },
98
- "_comment_postgres": "PostgreSQL database access",
64
+ "_comment_postgres": "PostgreSQL database access (read-only SQL)",
99
65
  "postgres": {
100
66
  "command": "npx",
101
- "args": [
102
- "-y",
103
- "@modelcontextprotocol/server-postgres",
104
- "postgresql://user:pass@localhost:5432/mydb"
105
- ],
67
+ "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://user:pass@localhost:5432/mydb"],
106
68
  "enabled": false
107
69
  },
108
- "_comment_puppeteer": "Browser automation via Puppeteer",
70
+ "_comment_puppeteer": "Browser automation, screenshots, web interaction",
109
71
  "puppeteer": {
110
72
  "command": "npx",
111
- "args": [
112
- "-y",
113
- "@modelcontextprotocol/server-puppeteer"
114
- ],
73
+ "args": ["-y", "@modelcontextprotocol/server-puppeteer"],
115
74
  "enabled": false
116
75
  },
117
- "_comment_sentry": "Sentry error tracking integration",
76
+ "_comment_sentry": "Sentry error tracking - query issues, generate patches",
118
77
  "sentry": {
119
78
  "command": "npx",
120
- "args": [
121
- "-y",
122
- "@sentry/mcp-server@latest"
123
- ],
79
+ "args": ["-y", "@sentry/mcp-server@latest"],
124
80
  "env": {
125
81
  "SENTRY_AUTH_TOKEN": "YOUR_SENTRY_AUTH_TOKEN"
126
82
  },
@@ -129,17 +85,121 @@
129
85
  "_comment_sequential": "Sequential thinking - structured problem solving",
130
86
  "sequential-thinking": {
131
87
  "command": "npx",
132
- "args": [
133
- "-y",
134
- "@modelcontextprotocol/server-sequentialthinking"
135
- ],
88
+ "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"],
89
+ "enabled": false
90
+ },
91
+ "_comment_notion": "Notion - pages, databases, search, comments",
92
+ "notion": {
93
+ "command": "npx",
94
+ "args": ["-y", "@notionhq/notion-mcp-server"],
95
+ "env": {
96
+ "NOTION_TOKEN": ""
97
+ },
98
+ "enabled": false
99
+ },
100
+ "_comment_linear": "Linear - issues, projects, teams, sprints",
101
+ "linear": {
102
+ "command": "npx",
103
+ "args": ["-y", "mcp-remote", "https://mcp.linear.app/mcp"],
104
+ "enabled": false
105
+ },
106
+ "_comment_hubspot": "HubSpot CRM - contacts, deals, companies, tickets",
107
+ "hubspot": {
108
+ "command": "npx",
109
+ "args": ["-y", "@hubspot/mcp-server"],
110
+ "env": {
111
+ "PRIVATE_APP_ACCESS_TOKEN": ""
112
+ },
113
+ "enabled": false
114
+ },
115
+ "_comment_stripe": "Stripe - payments, invoices, subscriptions, customers",
116
+ "stripe": {
117
+ "command": "npx",
118
+ "args": ["-y", "@stripe/mcp", "--tools=all"],
119
+ "env": {
120
+ "STRIPE_SECRET_KEY": ""
121
+ },
122
+ "enabled": false
123
+ },
124
+ "_comment_jira": "Jira - issues, projects, sprints, JQL search",
125
+ "jira": {
126
+ "command": "npx",
127
+ "args": ["-y", "@aashari/mcp-server-atlassian-jira"],
128
+ "env": {
129
+ "ATLASSIAN_SITE_NAME": "",
130
+ "ATLASSIAN_USER_EMAIL": "",
131
+ "ATLASSIAN_API_TOKEN": ""
132
+ },
133
+ "enabled": false
134
+ },
135
+ "_comment_confluence": "Confluence - spaces, pages, search, content",
136
+ "confluence": {
137
+ "command": "npx",
138
+ "args": ["-y", "@aashari/mcp-server-atlassian-confluence"],
139
+ "env": {
140
+ "ATLASSIAN_SITE_NAME": "",
141
+ "ATLASSIAN_USER_EMAIL": "",
142
+ "ATLASSIAN_API_TOKEN": ""
143
+ },
144
+ "enabled": false
145
+ },
146
+ "_comment_figma": "Figma - design data, layouts, styles, components",
147
+ "figma": {
148
+ "command": "npx",
149
+ "args": ["-y", "figma-developer-mcp", "--figma-api-key=YOUR_FIGMA_TOKEN", "--stdio"],
150
+ "enabled": false
151
+ },
152
+ "_comment_gdrive": "Google Drive - files, folders, search",
153
+ "gdrive": {
154
+ "command": "npx",
155
+ "args": ["-y", "@modelcontextprotocol/server-gdrive"],
156
+ "env": {
157
+ "GDRIVE_CREDENTIALS_PATH": ""
158
+ },
159
+ "enabled": false
160
+ },
161
+ "_comment_google_maps": "Google Maps - geocoding, directions, places, elevation",
162
+ "google-maps": {
163
+ "command": "npx",
164
+ "args": ["-y", "@modelcontextprotocol/server-google-maps"],
165
+ "env": {
166
+ "GOOGLE_MAPS_API_KEY": ""
167
+ },
168
+ "enabled": false
169
+ },
170
+ "_comment_firecrawl": "Firecrawl - web scraping, crawling, content extraction",
171
+ "firecrawl": {
172
+ "command": "npx",
173
+ "args": ["-y", "firecrawl-mcp"],
174
+ "env": {
175
+ "FIRECRAWL_API_KEY": ""
176
+ },
177
+ "enabled": false
178
+ },
179
+ "_comment_tavily": "Tavily - real-time web search, data extraction",
180
+ "tavily": {
181
+ "command": "npx",
182
+ "args": ["-y", "tavily-mcp@latest"],
183
+ "env": {
184
+ "TAVILY_API_KEY": ""
185
+ },
186
+ "enabled": false
187
+ },
188
+ "_comment_cloudflare": "Cloudflare - Workers, KV, R2, D1 management",
189
+ "cloudflare": {
190
+ "command": "npx",
191
+ "args": ["-y", "@cloudflare/mcp-server-cloudflare"],
136
192
  "enabled": false
137
193
  },
138
- "Umar": {
139
- "enabled": false,
140
- "url": "https://api.example.com/sse",
141
- "transport": "sse",
142
- "description": "kajshdkjahskdhaskdh"
194
+ "_comment_upstash": "Upstash - serverless Redis and message queues",
195
+ "upstash": {
196
+ "command": "npx",
197
+ "args": ["-y", "@upstash/mcp-server"],
198
+ "env": {
199
+ "UPSTASH_REDIS_REST_URL": "",
200
+ "UPSTASH_REDIS_REST_TOKEN": ""
201
+ },
202
+ "enabled": false
143
203
  }
144
204
  }
145
- }
205
+ }
@@ -0,0 +1,11 @@
1
+
2
+ # Implement Feature Request
3
+
4
+ This is a code bundle for Implement Feature Request. The original project is available at https://www.figma.com/design/xnKTW8JzkdqWcg3WN6thQX/Implement-Feature-Request.
5
+
6
+ ## Running the code
7
+
8
+ Run `npm i` to install the dependencies.
9
+
10
+ Run `npm run dev` to start the development server.
11
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "daemora",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "description": "A powerful open-source AI agent that runs on your machine. Connects to any AI model, any MCP server, any channel. Fully autonomous - plans, codes, tests, browses, emails, and manages your tools without asking permission.",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -13,11 +13,14 @@
13
13
  "daemon:start": "node src/cli.js daemon start",
14
14
  "daemon:stop": "node src/cli.js daemon stop",
15
15
  "daemon:status": "node src/cli.js daemon status",
16
+ "ui:dev": "pnpm --filter daemora-ui dev",
17
+ "ui:build": "pnpm --filter daemora-ui build",
16
18
  "test": "vitest run",
17
19
  "test:watch": "vitest",
18
20
  "test:coverage": "vitest run --coverage",
19
21
  "test:unit": "vitest run tests/unit",
20
- "test:integration": "vitest run tests/integration"
22
+ "test:integration": "vitest run tests/integration",
23
+ "postinstall": "npx playwright install chromium 2>/dev/null || true"
21
24
  },
22
25
  "keywords": [
23
26
  "ai-agent",
@@ -54,6 +57,7 @@
54
57
  "src/",
55
58
  "config/",
56
59
  "skills/",
60
+ "daemora-ui/dist/",
57
61
  "SOUL.md",
58
62
  "README.md",
59
63
  "LICENSE"
@@ -81,6 +85,7 @@
81
85
  "ollama-ai-provider": "^1.2.0",
82
86
  "openai": "^6.25.0",
83
87
  "twilio": "^5.12.2",
88
+ "playwright": "^1.58.2",
84
89
  "uuid": "^13.0.0",
85
90
  "zod": "^3.25.76"
86
91
  },
@@ -89,5 +94,10 @@
89
94
  "@types/node": "^25.3.2",
90
95
  "@vitest/coverage-v8": "^4.0.18",
91
96
  "vitest": "^4.0.18"
97
+ },
98
+ "pnpm": {
99
+ "overrides": {
100
+ "vite": "6.3.5"
101
+ }
92
102
  }
93
103
  }