DevSync is a local-first, self-hosted team context engine that keeps updates, documentation, artifacts, activity logs, plan items, AI assistants, and automations in sync—turning scattered inputs into shared context, useful outputs, and trackable actions, all stored in a readable filesystem vault that can be inspected and versioned with Git.
Quick Docker trial:
docker run -p 4000:4000 \
-v devsync-data:/data \
-e AUTH_MODE=none \
caporro/devsync:latestOpen:
http://127.0.0.1:4000AUTH_MODE=none is only for private local use. For deployment, use password auth.
Full configuration: docs/reference/env-vars.md.
docker hub images: https://hub.docker.com/r/caporro/devsync
Devsync starts from a simple idea: teams should leave a trace of work where work actually happens.
Typical flow:
- create a project;
- write short updates in the activity log;
- save long-form material as artifacts;
- create plan items for work to be done;
- use My Items to see what is assigned to you;
- use Assistant and workflows to summarize, update reports, and generate outputs;
- use Team Docs for shared knowledge not tied to a single project, such as guidelines, statements, ADRs, and similar documents.
Practical rules:
- log = short timeline;
- artifact = useful material;
- plan = operational work;
- generated = AI or workflow output;
- docs = team knowledge;
- vault = data source.
Build + start:
npm install
npm run build
npm startOpen:
http://127.0.0.1:4000Local config:
cp .env.example .envMinimum:
AUTH_MODE=none
DEVSYNC_VAULT_NAME=devsync-vault
DEVSYNC_AGENT_MODEL=openai:gpt-4.1-mini
OPENAI_API_KEY=sk-...Backend:
npm run dev:serverFrontend:
npm run dev:webUse .env in the repository root.
For production, use only the Docker image, persistent storage, password auth, and HTTPS.
Generate a password hash:
node scripts/hash-password.mjsRun:
docker run -d \
--name devsync \
-p 4000:4000 \
-v devsync-data:/data \
-e AUTH_MODE=password \
-e 'AUTH_USERS=email@example.com|Name|scrypt$...' \
-e AUTH_SESSION_SECRET='change-me-to-a-long-random-string-at-least-32-chars' \
-e AUTH_COOKIE_SECURE=true \
-e OPENAI_API_KEY='sk-...' \
caporro/devsync:0.1.1Notes:
- always mount persistent storage on
/data; - use
AUTH_COOKIE_SECURE=trueonly behind HTTPS; - put Devsync behind a reverse proxy if publicly exposed;
- do not use
AUTH_MODE=noneon shared servers.
Docker Compose:
docker compose up -dMain variables:
PORT=4000
HOST=0.0.0.0
DEVSYNC_VAULT_NAME=devsync-vault
DEVSYNC_DATA_ROOT=/data
AUTH_MODE=password
AUTH_USERS=email@example.com|Name|scrypt$...
AUTH_SESSION_SECRET=change-me-to-a-long-random-string-at-least-32-chars
AUTH_COOKIE_SECURE=trueUser format:
email|display name|password hashMultiple users:
AUTH_USERS=claudio@example.com|Claudio|scrypt$...,mario@example.com|Mario|scrypt$...AI provider:
DEVSYNC_AGENT_MODEL=openai:gpt-4.1-mini
OPENAI_API_KEY=sk-...OpenAI-compatible:
DEVSYNC_AGENT_MODEL=openai-compatible:model-name
OPENAI_API_KEY=...
OPENAI_BASE_URL=https://api.example.com/v1Other supported providers:
DEVSYNC_AGENT_MODEL=anthropic:claude-sonnet-4-5-20250929
ANTHROPIC_API_KEY=...
DEVSYNC_AGENT_MODEL=google-genai:gemini-2.5-flash
GOOGLE_API_KEY=...
DEVSYNC_AGENT_MODEL=mistralai:mistral-large-latest
MISTRAL_API_KEY=...
DEVSYNC_AGENT_MODEL=groq:openai/gpt-oss-120b
GROQ_API_KEY=...Git vault sync:
DEVSYNC_VAULT_REPO_URL=https://github.com/org/devsync-vault.git
DEVSYNC_GIT_USERNAME=oauth2
DEVSYNC_GIT_TOKEN=...
DEVSYNC_GIT_COMMIT_NAME=Devsync
DEVSYNC_GIT_COMMIT_EMAIL=devsync@example.invalidFull reference: docs/reference/env-vars.md.
Default local path:
data/devsync-vault/Default Docker paths:
/data/devsync-vault/
/data/auth/
/data/system-log/Layout:
data/<vault>/
README.md
assistant.md
vault-plan.json
roles/
workflows/
docs/
projects/
project-id/
project.json
README.md
assistant.md
roles/
workflows/
artifacts/
plan/
logs/
generated/Meaning:
- project folder name is the project id/name shown in the UI;
project.json: project metadata only;nameis legacy and ignored;README.md: main notes;logs/: append-only activity log;artifacts/: notes, links, uploads, images, PDFs, Excalidraw files;plan/: plan items, owner, deadline, and index;generated/: Assistant/workflow output;assistant.md: AI instructions;roles/: prompt specializations;workflows/: automations.
The vault can be versioned with Git. Git sync helps, but it does not replace a full backup.
Detailed layout: docs/reference/vault-layout.md.
Devsync automates work through Assistant, roles, and workflows.
Global Assistant:
data/<vault>/assistant.mdProject Assistant:
data/<vault>/projects/<project>/assistant.mdInstruction order:
base Devsync
+ vault assistant
+ project assistant
+ selected role
+ chat historyExample assistant.md:
---
title: "Project Operator"
model: openai:gpt-4.1-mini
tools:
- filesystem
- save_generated_markdown
- append_activity_log
read:
- "**/*"
write:
- generated/**
- plan/**
---
Work on the project. Write long outputs to generated/.Workflow:
---
title: "Update Situation"
trigger: manual
tools:
- filesystem
read:
- README.md
- artifacts/**
- logs/**
write:
- generated/situation.md
---
Update generated/situation.md with status, blockers, and next actions.Supported triggers:
manual;event;schedule.
Supported events:
project_log.added;artifact.added;plan_item.added.
Schedule uses 5-field cron:
trigger: schedule
cron: "0 18 * * 1-5"Main tools:
filesystem;append_activity_log;save_generated_markdown;send_email_ses;list_plan_items;read_plan_item;create_plan_item;update_plan_item;toggle_plan_item;delete_plan_item.
Devsync exposes MCP for external AI clients.
Endpoint:
/mcpLocal stdio:
npm run mcpUser token:
- open the user menu;
- create an MCP token;
- configure the client with
Authorization: Bearer devsync_mcp_...; - revoke the token when it is no longer needed.
Codex example:
export DEVSYNC_MCP_TOKEN=devsync_mcp_...
codex mcp add devsync --url http://127.0.0.1:4000/mcp --bearer-token-env-var DEVSYNC_MCP_TOKENMCP tools:
list_projects;get_project;search_files;read_file;list_plan_items;read_plan_item;create_plan_item;update_plan_item;toggle_plan_item;delete_plan_item.
Healthcheck:
curl http://127.0.0.1:4000/api/healthExpected response:
{ "ok": true, "authMode": "password" }Docker logs:
docker logs -f devsyncMinimum backup:
data/System Log records events such as:
- project creation;
- metadata changes;
- artifact creation;
- workflow runs;
- git pull/push;
- role changes.
Recommended upgrade flow:
- back up the vault;
- update the image;
- restart;
- check the healthcheck;
- verify login;
- open a project;
- test Assistant if configured.
Devsync uses and thanks:
- Node.js;
- Fastify;
- React;
- Vite;
- TypeScript;
- Tailwind CSS;
- shadcn/radix-ui;
- TanStack Query;
- Hugeicons;
- Excalidraw;
- Milkdown/Crepe;
- SVAR Gantt;
- LangChain;
- DeepAgents;
- Model Context Protocol SDK.
MIT. See LICENSE.
Contributions are welcome: PRs, issues, ideas, discussions, bug reports, documentation, workflow examples, plugins, and integrations.
Project philosophy:
- KISS;
- YAGNI;
- filesystem-first;
- minimal out-of-the-box functionality;
- no database until it is truly needed;
- advanced features should preferably live in plugins;
- operational UI, not decorative UI.
We are also looking for sponsors and feedback from teams that use AI every day on real projects.
See CONTRIBUTING.md.
Report vulnerabilities through SECURITY.md.
Do not open public issues with secrets, reproducible exploits, or sensitive data.
Devsync is provided "as is", without warranties. Whoever installs and uses it is responsible for configuration, security, backups, permissions, inserted data, AI outputs, and production use.
Outputs generated by Assistant, workflows, or AI models must be reviewed before being used for operational, legal, financial, security, or production decisions.
Possible directions:
- Electron app;
- plugin system;
- subscription and conversation imports from tools such as Codex, Claude, and similar products;
- optional external integrations;
- marketplace/community workflows;
- self-hosted deployment hardening.

