Minimal agent server with a local-first web UI. Production-ready for internal team use.
Status: Fase 1 (MVP) completada. Veja PHASE_1_COMPLETE.md e IMPLEMENTATION_ROADMAP.md para roadmap futuro.
- Description: Chokito is a TypeScript local-first coding agent with permission pipeline, hooks, workflow tracking, and secure bash execution.
- Website: https://github.com/nei66s/chokito/tree/main/agent-ts/chokito
- Topics: typescript, openai, ai-agent, coding-agent, permission-pipeline, workflow, hooks, bash-security, express, postgres
Main endpoints:
GET /conversations- lists persisted conversations from PostgresPOST /conversations- creates an empty conversationPUT /conversations/:id- replaces a conversation snapshot with messages and attachmentsPATCH /conversations/:id- renames a conversationPOST /conversations/:id/duplicate- duplicates a conversation and its workflowDELETE /conversations/:id- deletes a conversation and related recordsPOST /chat- sendsmessagesto the OpenAI Responses API and auto-runs tool callsPOST /chat/stream- streams text deltas and tool trace eventsPOST /tools/run- runs local tools such as file, search, web, todo, and workflow actionsGET /tools/status- returns enabled tool metadataGET /workflow/status- returns the active workflow plan for a specific chat viachatIdGET /files/raw- serves a file inline for preview (for example image preview)GET /- opens the Chocks UI
Quick start:
cd agent-ts
cp .env.example .env
# set OPENAI_API_KEY (and optionally OPENAI_MODEL) in .env
npm install
npm run devWhat the UI already supports:
- conversations persisted in Postgres
- ownership by local browser user id, created automatically and sent to the backend
- permission mode with
ask,auto, andread_only - interactive approval card in the trace when an action is blocked in
ask - full conversation context sent to the backend on each turn
- rename, duplicate, and delete chat
- quick actions on listed files and folders such as read, list, rename, move, create folder, delete, and download
- workspace file preview for text/code and images without requiring a new chat response
- direct file editing in the workspace preview with save
- richer file actions: copy, duplicate, create empty file, create folder by relative path, download
- continuous folder navigation inside the same listing block, with open and up actions
- persistent
Arquivosworkspace in the sidebar synced with the latest browsed folder - file attachments with validation
- real response streaming
- live tool trace with collapsible blocks
Workflowsidebar for per-chat plan progress- workflow operational controls in sidebar: reset, archive, resume prompt, and manual step updates
- permissions UX in sidebar config: show active approvals, revoke approvals, allow/revoke by category
- legacy
localStoragechats are migrated on first load if the database is empty
Safety notes:
file_read,file_write, andfile_editare restricted toPROJECT_ROOT- in
askmode, writes, deletes, shell, and web actions require explicit user intent in the latest message - in
read_onlymode, mutating, shell, and web tools are blocked bash_execis disabled by default and only allows a small safe command setweb_fetchis disabled by default and can use an allowlistglobandgrepignorenode_modulesand.git- conversations, todos, and workflow state are persisted in Postgres
- records are scoped by local owner id, so different local users do not share chats by default