Project

General

Profile

Feature #103 » README.md

Rajesh Gotur, 09/30/2026 01:02 PM

 

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

  1. 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.py
    

    run.py shows the Redmine address and where it listens. There are no accounts to set up: people sign in with their Redmine login.

  2. Extension

    • Open chrome://extensions, turn on Developer mode, choose Load unpacked, and select the extension/ folder.
    • Open the extension. Enter the backend address (http://localhost:8000) and your Redmine username and password, then press Sign in.
  3. Skill

    • Replace your current skill with skill/Updated_SKILL_v2.md.
  4. 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.

(2-2/3)