An AI Agent-powered Markdown Document Management & Reading System. The AI Agent understands your intent and autonomously invokes 11 different tools to read, create, edit, delete, move files, and even search the web or fetch webpage content.
# Add to your Claude Code skills
git clone https://github.com/wink-wink-wink555/MarkiNoteLast scanned: 8/18/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-08-18T04:34:13.410Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}MarkiNote is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by wink-wink-wink555. An AI Agent-powered Markdown Document Management & Reading System. The AI Agent understands your intent and autonomously invokes 11 different tools to read, create, edit, delete, move files, and even search the web or fetch webpage content. It has 100 GitHub stars.
Yes. MarkiNote passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/wink-wink-wink555/MarkiNote" and add it to your Claude Code skills directory (see the Installation section above).
MarkiNote is primarily written in Python. It is open-source under wink-wink-wink555 on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh MarkiNote against similar tools.
No comments yet. Be the first to share your thoughts!
A self-hosted Markdown workspace with a guarded AI agent.
简体中文 · Quick start · Features · AI agent · Operations · Contributing
MarkiNote turns a directory of Markdown files into a browser-based writing, reading, and AI-assisted knowledge workspace. The current full edition combines a React 19 and TypeScript client, a FastAPI modular monolith, a generated OpenAPI client, and an NGINX same-origin gateway. Optional Compose profiles add PostgreSQL, Prometheus, and OpenTelemetry.
The AI assistant is an agent rather than a chat-only sidebar: it can inspect the library, search content, create and edit documents, organize folders, fetch public web pages, and roll back one selected file operation. Mutating tools are deliberately guarded by opt-in write access, resource selection, one-time approvals, bounded input, before-images, and an operation journal.
[!IMPORTANT] MarkiNote 4.0.0 is Beta software. It is suitable for open-source review, single-machine self-hosted evaluation, and feedback. It is not yet a stable production release, a multi-user account system, or a highly available service. Read Known limitations before exposing it beyond a trusted machine.
The original Flask-based lightweight edition is preserved on the lite branch. The main branch contains this full React/FastAPI/Docker edition.
| Area | Current implementation |
|---|---|
| Web | React 19, TypeScript, Vite, CodeMirror 6, TanStack Query |
| API | Python 3.12, FastAPI, Pydantic, SQLAlchemy, Alembic |
| Entry point | NGINX serves the SPA and proxies same-origin HTTP/SSE traffic |
| Documents | Markdown, Markdown-compatible text, and plain text on LocalFS |
| Conversations | JSON by default; optional SQLite/PostgreSQL repository adapter |
| AI | DeepSeek and Kimi allowlists, streaming SSE, 11 bounded tools |
| Operations | Docker Compose, optional metrics/tracing/database profiles, hardened production overlay |
| Intended topology | Single tenant, one API container, one Uvicorn worker, one document writer |
MarkiNote has been integrated with FinanceMCP to form FinNote, an intelligent financial document system designed for financial research, AI-assisted analysis, and long-term knowledge preservation. The project participated in the Shanghai Collegiate Computer Application Ability Competition and received a Second Prize.
🌐 Live Demo: https://finvestai.top/
Within the FinNote architecture, FinanceMCP serves as the financial data and tool service layer. Built with Node.js, Express, and the Model Context Protocol (MCP) SDK, it exposes 19 standardized MCP tools that provide AI agents with access to stocks, funds, bonds, macroeconomic data, financial news, technical indicators, and multi-market financial data.
MarkiNote serves as the AI Agent-powered document and knowledge management application layer. It receives and organizes users' natural-language tasks, presents financial data and model-generated analysis inside an editable Markdown workspace, and turns the resulting analysis into manageable, traceable, and reusable document assets.
In the FinNote use case, the two systems collaborate through an HTTP / MCP service workflow:
Natural-language request → AI Agent task understanding → FinanceMCP tool invocation → Financial data retrieval → AI-assisted analysis → Markdown document generation and preservation → Continuous editing and knowledge management
As a result, MarkiNote can be used not only as a general-purpose self-hosted Markdown workspace and AI Agent document operating system, but also as the intelligent research workspace of FinNote, connecting real-time financial data, AI analysis, and long-term document asset management within a unified workflow.
| Capability | What is implemented | Current boundary |
|---|---|---|
| Library | Tree browsing, filename/path filtering, upload, create, save, move, rename, and recoverable delete | The Web UI does not yet list or restore trash; the API does |
| Editor | CodeMirror 6, source/preview/split modes, search, keyboard editing, and download | Documents and previews are bounded by configured size limits |
| Rendering | Sanitized Markdown, fenced code, syntax highlighting, Mermaid, KaTeX, and theme-aware output | Unsafe HTML is removed; rendering is not a general-purpose HTML host |
| Reliability | Dirty-buffer protection, external-change detection, content versions, ETags, and conflict UI | Third-party clients may omit a write precondition and perform a blind update |
| Internationalization | Chinese, English, French, and Japanese UI; light/dark themes; responsive desktop/mobile layouts | Product documentation is maintained in English and Simplified Chinese |
| AI chat | Versioned streaming events, conversation history, cancellation, current-document context, and attachments | Real provider availability depends on the account, region, balance, and network |
| AI actions | 11 tools, write opt-in, per-resource authorization, exact one-time approvals, before-images, audit records, and single-operation rollback | There is no atomic whole-group rollback across multiple files |
| Platform | RFC 9457-style errors, request IDs, liveness/readiness, Prometheus metrics, optional OpenTelemetry, deterministic OpenAPI generation | Readiness is a basic runtime check, not a complete provider/data/disaster-recovery proof |
Sidebar search filters names and paths. Full-text document search is available to the agent through search_files.
PowerShell:
Copy-Item .env.example .env
docker compose config --quiet
Bash:
cp .env.example .env
docker compose config --quiet
The checked-in defaults bind the gateway to 127.0.0.1:8080. A loopback-only evaluation may leave MARKINOTE_ACCESS_TOKEN empty. Before binding to another interface, configure access security as described in Production deployment.
docker compose up -d --build --wait
Open http://127.0.0.1:8080. Useful checks:
docker compose ps
docker compose logs -f --tail=200 api gateway
curl --fail http://127.0.0.1:8080/gateway-health
curl --fail http://127.0.0.1:8080/health/live
curl --fail http://127.0.0.1:8080/health/ready
PowerShell users can replace the three curl calls with Invoke-RestMethod.
gateway-health proves only that NGINX is serving. health/live proves that the API process is alive. health/ready additionally checks the four writable data directories and, when the database backend is active, its schema revision; it still does not validate every record, provider, or restore path.
# Preserve containers, named volumes, and the Docker Desktop start button.
docker compose stop
# Rebuild after pulling a code update.
docker compose up -d --build --wait
# Remove containers and networks, but preserve named volumes.
docker compose down
[!CAUTION]
docker compose down -vdeletes the named data volumes. Do not use it as a routine stop or upgrade command.
.md, .markdown, or .txt document from the library sidebar.The default Compose stack stores application data in named volumes. It does not bind-mount the repository's lib directory.
| Volume | Container path | Purpose |
|---|---|---|
${MARKINOTE_VOLUME_PREFIX}_library |
/data/library |
Markdown document source of truth |
${MARKINOTE_VOLUME_PREFIX}_conversations |
/data/conversations |
Default JSON conversations |
${MARKINOTE_VOLUME_PREFIX}_backups |
/data/backups |
AI before-images, journals, and recovery state |
${MARKINOTE_VOLUME_PREFIX}_trash |
/data/trash |
Recoverably deleted documents |
| `${MARKINOTE_VOLUME_PREFI |