Zenoide Docs
Vibe Coding IDE — AI chat + autonomous agent in one workspace. Built with Next.js 15, React 19, TypeScript, and Claude (Anthropic). Setup through API reference below.
Introduction
Zenoide is a Vibe Coding IDE — a browser-based development environment where you work together with an AI to write, fix, and understand code.
Instead of writing every line of code yourself, you describe what you want in plain language and the AI helps you build it. You stay in control — you review what the AI does, approve changes, and guide the direction.
There are two main ways to work with AI in Zenoide:
- Chat — like texting with a very smart developer. You ask questions, the AI answers. It never touches your files — it only talks.
- Agent — like hiring an intern who can actually open files, write code, run commands, and report back. You give it a task, it works autonomously and shows you everything it does.
Zenoide is especially useful for:
- Developers who want to move faster with AI assistance
- Teams who need an audit trail of every AI action
- Developers integrating Zenoide into their own workflows via API
Getting Started on Zenoide Desktop
Zenoide is available as a desktop app for Windows and macOS. No technical setup required — download, install, and start coding with AI in minutes.
Step 1 — Download Zenoide
Go to zenoide.app/download and download the installer for your operating system.
| Platform | File |
|---|---|
| Windows | Zenoide-Setup-x64.exe |
| macOS (Apple Silicon) | Zenoide-arm64.dmg |
| macOS (Intel) | Zenoide-x64.dmg |
Step 2 — Install the app
- Windows: run the
.exeinstaller and follow the wizard. - macOS: open the
.dmgfile and drag Zenoide to your Applications folder.
Step 3 — Sign in
Open Zenoide. Click Sign in and use your CodeFoundex account. If you don't have one yet, click Create account — it's free to get started.
Step 4 — Open or clone a project
From the Dashboard, click Open Project to open an existing folder, or Clone Repository to clone a Git repo from GitHub or any other host.
Step 5 — Start working
You're in. Use the Chat panel to ask questions about your code, or launch an Agent task to implement something autonomously.
console.anthropic.com.How to Use Zenoide
This section walks you through the main workflows in Zenoide step by step.
Opening a project
- After signing in, you see the Dashboard.
- Click Open Project.
- Type the full path to a folder on your computer (for example
/path/to/your/project). - Click Open — Zenoide loads the file tree and you are in the IDE.
Your first chat
- The Chat panel is on the right side of the screen.
- Type a question about your code, for example: "What does the LoginForm component do?"
- Press Enter or click the send button.
- Claude reads your open file and responds.
Tips for better chat results
- Mention specific files with
@— e.g.@LoginForm.tsx— to include them as context. - Select code in the editor before asking — it is included automatically.
- Be specific: "Why does this useEffect run twice?" beats "Why is it broken?".
Your first agent task
- Click the Agent icon in the left sidebar (or press
Ctrl+Shift+A). - Type a task description, e.g. add validation to LoginForm (email format, password min 8 chars).
- Click Start.
- Watch the Timeline — every file read and change is visible.
- When the agent proposes a patch, approve or reject it.
Tips for better agent results
- Be specific: file names, functions, expected behavior.
- Add a
.zenoide-rulesfile for conventions. - Break large tasks into smaller steps.
Reading the Timeline
The Timeline shows agent steps, chat, and patches. Filter: All | Agent | Chat | Patches.
Managing chat sessions
- Click + in Chat for a new conversation.
- Use the dropdown to switch sessions.
- Click × to close a session (it stays in the database).
Chat
The Chat panel sends your messages to Claude with workspace context.
Every message includes:
- The active file you have open
- Any files you @mentioned
- Any text selected in the editor
- The last few messages for context
Chat sessions are persisted in PostgreSQL (chat_sessions, chat_messages). Refresh restores your last active session.
Agent
The Agent uses Plan → Tool → Execute → Observe → Decide:
- Plan — Claude plans from your task.
- Tool — picks the next tool (read file, run command, etc.).
- Execute — the tool runs.
- Observe — Claude reads the output.
- Decide — next step or done.
When to use Chat vs Agent
| Situation | Use |
|---|---|
| Explain this function | Chat |
| Best way to fix this bug? | Chat |
| Actually fix the bug | Agent |
| Add a new feature | Agent |
| Review this code | Chat |
| Write tests for this module | Agent |
| Why is this test failing? | Chat |
Chat-to-Agent Handoff
Plan in Chat, then hand off to the Agent in one click. If Claude detects file changes are needed, it adds a marker; Zenoide shows ▶ Avvia Agent with involved files.
- Describe what to build or fix in Chat.
- Claude responds with a plan.
- Hidden marker when changes need files.
- ▶ Avvia Agent appears below the message.
- Click — Agent starts with full chat context.
You: "Add a loading spinner to LoginForm while submitting."
Claude: Plan with isLoading, submit disabled, spinner — files LoginForm.tsx, maybe Spinner.tsx.
[src/components/LoginForm.tsx] [src/components/ui/Spinner.tsx]
▶ Avvia AgentFile Explorer & Workspace
From the Dashboard, click Open Project and enter the full path to your project folder.
Navigating files
- Click any file in the tree to open it in the editor.
- Right-click: New File, New Folder, Rename, Delete.
- The tree respects
.gitignore.
@-mentions
Type @ in Chat to pick files; their full content is included as context.
Import graph
Zenoide builds a dependency graph; when you mention a file, the agent also gets direct imports for better refactors.
Clone Repository
From the UI
- File → Clone Repository (or Dashboard).
- Repository URL, e.g. https://github.com/user/myproject.git
- Destination folder, e.g. C:\Users\davide\Projects
- Clone — server runs git clone and opens the workspace.
git clone <url> <destination>/<reponame>. git must be on the server PATH..zenoide-rules
Create .zenoide-rules at the project root. The agent reads it before planning.
# .zenoide-rules
- Always use TypeScript strict mode
- Prefer named exports over default exports
- Use Tailwind CSS for styling, never inline styles
- Write Vitest tests for every new utility function
- Follow conventional commits: feat|fix|chore|docs|refactor
- Never use any type in TypeScriptThink of it as first-day instructions for a new teammate.
Timeline & History
The Timeline is a live feed of workspace activity, updated via SSE (server push without refresh).
| Event | Meaning |
|---|---|
| 🤖 agent_task_started | Agent task began |
| 🔧 agent_step | One tool call executed |
| ✅ agent_task_completed | Task finished |
| ❌ agent_task_cancelled | Task cancelled |
| 💬 chat_session_opened | New chat session |
| 💬 chat_message | Chat message sent |
| 📄 patch_proposed | Patch proposed |
| ✅ patch_applied | Patch applied |
| ↩️ patch_rolled_back | Patch undone |
Events persist in timeline_events. On reload, the last 200 load then SSE resumes — history is not lost after restarts.
MCP Tools
MCP (Model Context Protocol) lets models use external tools — like plugins.
- Preferences → MCP Tools → Add Server
- Name, SSE URL, description
Popular servers
- GitHub, Linear, Jira, Slack, web search, database
Multi-Agent
Multiple agent tasks in parallel; in orchestrator mode a primary agent spawns sub-agents for independent work.
- Task spans independent parts (e.g. frontend + backend auth).
- Primary agent splits parallelizable subtasks.
- Sub-agents run; orchestrator merges results.
- Summary in the Timeline; parent-child links show who did what.
CLI
Control Zenoide from the terminal (scripting, CI/CD).
export ZENOIDE_BASE_URL=http://localhost:3000
export ZENOIDE_API_KEY=your_api_key_herezenoide agent "Add unit tests for the auth module"--workspace Path to workspace root
--autonomous No approval (fully automatic)
--timeout Seconds (default 300)zenoide patch --file src/components/Button.tsx --patch changes.diff
zenoide status --task-id abc123-def456Status: planning, running, completed, error, cancelled.
Preferences & Settings
Profile dropdown (bottom-left) → Preferences, or Ctrl+,.
Appearance
Dark / Light — preference is saved.
AI Model
- claude-opus-4 — most capable, slower
- claude-sonnet-4 — balanced (recommended)
- claude-haiku-4 — fastest
Token quota
- Permissive — works past quota (dev)
- Strict — blocks when exceeded (prod/cost)
MCP Tools: add/edit servers; effective on new agent tasks.
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
| Ctrl+Shift+P | Command Palette |
| Ctrl+Shift+L | New Chat session |
| Ctrl+Shift+A | Start Agent Task |
| Ctrl+, | Preferences |
| Ctrl+W | Close tab |
| Ctrl+\ | Split editor |
| Ctrl+B | Toggle sidebar |
| Ctrl+J | Toggle bottom panel |
| Ctrl+` | Terminal |
| Ctrl+F | Search in file |
| Ctrl+Shift+F | Search workspace |
Environment Variables
Key variables for local/self-hosted setup:
| Variable | Description |
|---|---|
| DATABASE_URL | PostgreSQL connection string |
| AUTH_SECRET | Long random string for session encryption |
| ANTHROPIC_API_KEY | Claude API key — keep secret |
API Reference
For programmatic use — integrate Zenoide into tools, scripts, or CI/CD.
An API lets programs talk over HTTP; responses are usually JSON.
{ "name": "Davide", "age": 30 }Base URL
http://localhost:3000 (development)
https://your-domain.com (production)Authentication
Every request needs auth: session cookie (browser sign-in) or header
X-API-Key: your_key_here
401 Unauthorized means check API key or sign in again.Chat API
/api/chatSend a chat message (SSE stream)Streams Claude's reply in real time.
Request body
{
"messages": [
{ "role": "user", "content": "What does the LoginForm component do?" }
],
"modelId": "claude-sonnet-4-20250514",
"sessionId": "550e8400-e29b-41d4-a716-446655440000",
"rootPath": "/path/to/your/project",
"context": {
"activeFilePath": "src/components/LoginForm.tsx",
"activeFileContent": "export function LoginForm() { ... }",
"mentionedFilePaths": ["src/lib/auth.ts"]
}
}Response
data: {"text": "The LoginForm component "}
data: {"text": "handles user authentication..."}
data: [DONE]/api/chat/sessionsList chat sessionsResponse
{
"sessions": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "LoginForm refactor",
"is_active": true,
"message_count": 12,
"created_at": "2025-03-18T10:00:00Z",
"closed_at": null
}
]
}/api/chat/sessionsCreate chat sessionRequest body
{ "workspaceId": "my-workspace-id" }Response
{ "sessionId": "772a0622-g4bd-63f6-c938-668877662222" }/api/chat/sessions/:sessionIdGet messages in session/api/chat/sessions/:sessionIdClose session (messages kept)/api/chat/sessions/:sessionId/messagesSave message to sessionAgent API
/api/agent/startStart agent taskRequest body
{
"taskDescription": "Add input validation to LoginForm",
"rootPath": "/path/to/your/project",
"workspaceId": "my-workspace-id",
"autonomousMode": false,
"chatSessionId": "550e8400-e29b-41d4-a716-446655440000",
"mentionedFiles": ["src/components/LoginForm.tsx"],
"seedInstructions": "Focus on handleSubmit"
}autonomousMode false = approval before writes; true = automatic.Response
{ "taskId": "task-abc123", "requestId": "req-xyz789" }/api/agent/status/:taskIdTask status/api/agent/stream/:taskIdSSE agent events/api/agent/approve/:taskIdApprove step/api/agent/cancel/:taskIdCancel task/api/agent/interruptedInterrupted tasksWorkspace API
/api/workspace/validateValidate path/api/workspace/file-treeFile tree/api/workspace/read-fileRead file/api/workspace/write-fileWrite file/api/workspace/cloneClone repoTimeline API
/api/timelineLast events (?filePath= optional)/api/timeline/streamSSE timelineHTTP status codes
| Code | Meaning | What to do |
|---|---|---|
| 200 | Success | OK |
| 201 | Created | OK |
| 400 | Bad Request | Fix request body |
| 401 | Unauthorized | Auth / API key |
| 403 | Forbidden | No permission |
| 404 | Not Found | Check id/path |
| 500 | Server error | Check logs |
| 504 | Timeout | Retry / increase timeout |
Self-hosting / Deploy
Recommended: Fly.io
flyctl auth login
flyctl apps create zenoide
flyctl secrets set \
DATABASE_URL="postgresql://user:pass@host:5432/zenoide" \
AUTH_SECRET="your-random-secret-string" \
ANTHROPIC_API_KEY="sk-ant-your-key"
flyctl deployDB migrations (production)
psql $DATABASE_URL < database/init.sql
psql $DATABASE_URL < database/add_agent_steps.sql
psql $DATABASE_URL < database/add_chat_tables.sql
psql $DATABASE_URL < database/alter_timeline_events.sql- CSP headers, HSTS, restrictive CORS
- /api-docs dev-only in production
Roadmap
Current: v0.1.0 (Sprint 5)
Planned
- Real-time collaboration
- Git diff viewer (inline)
- PR integration from agent tasks
- Voice input
- Mobile app for tasks
- SSO / SAML
🏗️ Upcoming: Debt Collector Module
Planned Enterprise Feature
A dedicated Debt Collector integration is planned:
- Excel (.xlsx) — read, analyze, modify collection files
- Bulk operations across debtor records
- Rule engine — collection rules via agent tasks
- Audit trail — Timeline for all file changes
- Export — updated Excel with status, payment plans, notes
Requires agent tools for Excel (cells, formulas, formatting). Implementation timeline to be announced.
