Feature #103 » README.md
Redmine README Sync (v4)
Push README.md files to Redmine as issues or sub-tasks, one at a time or many at once, from a small Chrome extension. People sign in with their own Redmine username and password, and Redmine alone decides which projects they see and what they may do. Any project's issues can be downloaded with their description and .md attachments.
No AI API is used anywhere in this project. The extension never reads or scrapes any chat page, so it works the same next to Claude, ChatGPT, Gemini, or any other tool. The README is written by you, using the Claude Skill, and saved to a folder. The extension only picks up that file.
AI chat (any) Claude Skill Local folder Chrome extension Redmine
┌──────────────┐ you run ┌──────────────┐ you save ┌────────────────────┐ reads ┌──────────────┐ REST ┌─────────┐
│ your project │ ────────▶ │ writes the │ ─────────▶ │ ~/redmine/<Project>│ ──────▶ │ pick project │ ─────▶ │ issue / │
│ conversation │ │ README.md │ │ /<Story>_<ts>.md │ via │ and issue, │ │ sub-task│
└──────────────┘ └──────────────┘ └────────────────────┘ backend │ press Push │ └─────────┘
└──────────────┘
What is in this folder
| Folder | What it is |
|---|---|
backend/ |
FastAPI service. Checks Redmine logins and talks to Redmine as the signed-in person. |
extension/ |
Chrome extension (Manifest V3, plain JavaScript, no build step). |
skill/Updated_SKILL_v2.md |
Your skill file with one new section (26A) that adds a small metadata header to each README. |
docs/ |
Setup, how sign-in and permissions work, deployment, workflow, and troubleshooting. |
Quick start
-
Backend
cd backend python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt cp config.yaml.example config.yaml # then edit it: set the Redmine URL python run.pyrun.pyshows the Redmine address and where it listens. There are no accounts to set up: people sign in with their Redmine login. -
Extension
- Open
chrome://extensions, turn on Developer mode, choose Load unpacked, and select theextension/folder. - Open the extension. Enter the backend address (
http://localhost:8000) and your Redmine username and password, then press Sign in.
- Open
-
Skill
- Replace your current skill with
skill/Updated_SKILL_v2.md.
- Replace your current skill with
-
Daily use
- Work in any AI chat. When you are ready, run the skill to generate the README.
- Save it as
~/redmine/<Project name>/<Story name>_<YYYYMMDD-HHMM>.md. - Open the extension. The newest unpushed README is already selected, the project and issue are suggested, and the fields are filled in. Check the one-line summary at the bottom and press Push to Redmine.
Full details are in docs/USAGE.md. If something does not work, see docs/TROUBLESHOOTING.md.
Access comes from Redmine
Nothing about users is set in this project. Sign in with your Redmine login and you get what Redmine gives you:
| Redmine administrator | Everyone else | |
|---|---|---|
| Projects (Push, Manage, Log time) | All | My projects only: the ones they are assigned to in Redmine |
| Push, bulk push, update issues, log time | Yes | In My projects, where their role allows it |
| Download issues | Yes | In My projects |
| Create a new project | Yes | Never (administrators only) |
| Edit projects, upload project files | Yes | In My projects, where their role allows it |
| Assign people, create Redmine users | Yes | No (Redmine only lets administrators do this) |
| Reads the server's README folder | Yes | No, they add files in the extension |
| Push history | Everyone's | Their own |
No limit on the number of administrators or users. New user in Redmine: they can sign in at once. Lock or remove someone, or change their roles, in Redmine: it takes effect within minutes. Details: docs/ACCESS_CONTROL.md.
What changed from v2 and v1
| v1 | v2 | |
|---|---|---|
| README creation | Backend called the Anthropic API | You run the Claude Skill yourself, so no API cost |
| Source of the README | Scraped from the claude.ai page | A local file, so it works with any AI tool |
| Extension permissions | Content script on claude.ai, plus scripting
|
No content scripts, no page access. Only activeTab, storage, and localhost |
| Project and issue choice | Fixed behaviour | Existing or new project, new issue, sub-task, or update, with remembered matches |
| Duplicate protection | Tracked progress by chat message count | Decided by Redmine: the README and each file are compared with what the issue already holds, and a duplicate needs a tick on Push anyway |
| Preview | Not available | Dry run shows exactly what will be created, and sends nothing |
| Backend security | CORS allow-list only | Localhost only, access token required, host check, no file paths accepted from the client |
| UI | Basic | Redesigned, with the real Redmine logo, light and dark themes |
New in v4: sign-in with Redmine logins and permissions taken from Redmine, files that travel with a README, duplicate checks against Redmine, README-based tracker choice, a skill that saves everything for you, bulk push of up to 50 READMEs, a Manage-tab issue list with per-issue and whole-project downloads, a dark-mode toggle, and a refreshed Redmine-style interface. Details: docs/ENHANCEMENTS_v4.md.
Privacy and security in one paragraph
Every request except /health and sign-in needs a session. Redmine checks the password, once, and it is never stored. The backend then works as the signed-in person with their own Redmine API key, which stays in memory on the server and is never sent to the extension, so Redmine's own rules apply to every action. Repeated wrong passwords lock the sign-in for a while, sessions end after a set time and when Redmine locks the account, and people only see their own push history. The extension sends the backend only opaque file IDs, never paths, and reads only the URL and title of the active tab to recognise a returning chat. On a shared server put the backend behind HTTPS: see docs/DEPLOYMENT.md.