Redmine

Issue trackers · publisher buff · version 1.1.0

Questions and answers right in Redmine issues — in the tracker you already have, which is not going anywhere.

  • The answer arrives as a comment in the same issue.
  • The setup form — each integration has its own fields: address, scope, bot name and credentials.
  • The connection is live: its own set of tools and its own allowed address.
  • The connection check does not just say “ok”: it reports the account it signed in with and how many projects are in scope.
  • What the integration will get is written on its card in the connector’s catalogue.

Click a screenshot to open it in full. All screenshots are from a working installation.

Overview

The integration connects Buff to your Redmine from inside your own network. The team keeps working where it is used to: in the issue. Buff reads the issue together with its discussion, answers with a comment there and, if asked, creates a development task with a link back. The code comes from your repositories — they are connected to Buff separately, as a code source.

Use cases

The situations it is installed for.

  • A question about the code without leaving the issue

    A tester has filed an issue “CSV export breaks on Cyrillic” and does not know where to dig. The developer is busy, and the answer is needed today.

    Result. They mention the bot in a comment. A few minutes later the issue holds an analysis: where the export is built, why the encoding is lost and what will have to change. Nobody switched to another interface.

  • A development task from a discussion

    The issue has twenty comments, half the requirements appeared along the way, and nobody wants to rewrite the brief from scratch.

    Result. Buff reads the whole issue together with its journal and drafts a development task from it. The link comes back as a comment, so Redmine stays the one place the team looks at.

  • This happened before — find where exactly

    An issue has come in that looks suspiciously like last year’s. Searching every project by hand takes a long time.

    Result. The integration searches the selected projects and brings back related issues: duplicates, past requests about the same subsystem, the issues the current one depends on — with links.

  • The answer where it is expected

    The person who requested the task does not open the Buff interface and has no plans to. They need an answer in the issue they opened.

    Result. The finished analysis or a link to the development task arrives as a comment in the original issue. It is the only tool of the integration that writes anything — and it is unavailable at the stages where the model only reads.

Examples

What to write and what comes back. How the bot is addressed is set in the connection settings — here it is “@buff”.

  1. @buff, find out why Cyrillic breaks when exporting to CSV

    a comment in the issue itself

    tool: get_issue

    I read the whole issue together with its discussion and traced it through the code. The export is built in ExportService.buildCsv; the file is served without a BOM and with a text/csv header without a charset — Excel on Windows reads such a file as cp1251. I attached the analysis with the places in the code as a document and posted a link to it here.

  2. /research where the delay in the report comes from

    a comment in an issue — this is how deep research starts

    tool: get_issue

    The word after the mention picks the work: without it — a short answer, “research” — deep research with a document, “task” — a draft development task. The familiar slash command works too.

  3. @buff, find issues about catalogue caching

    a comment in any issue of a selected project

    tool: search_issues

    Found 4 issues about caching: • catalog#218 “Catalogue cache is not reset after a price change” — closed • catalog#341 “Empty responses for the first 30 seconds after a deploy” — closed, cache warm-up • catalog#402 “Duplicates in results after invalidation” — open, similar to the current one • ops#77 “Redis eats memory during exports” — open, discussion about TTL

  4. @buff, what has already been discussed in this issue?

    a comment in an issue with a long thread

    tool: get_issue

    A short summary of the discussion: what was asked for originally, which requirements were added along the way and in which comment, what was agreed and what remains unresolved. Useful when an issue is six months old and its journal has thirty entries.

What it does

Reads the whole issue, not just the title

get_issue gives the model the description and the issue’s whole journal. That is what a real brief is made of: the title says “search does not work”, and the third comment says what exactly and on which data. The tool only reads.

Searches the selected projects

search_issues goes through the projects you selected and finds related issues — duplicates, past requests about the same subsystem, the issues the current one depends on. Also read only.

Answers in the same issue

add_comment writes the answer to the original issue: an analysis of the question or a link to the development task. It is the only tool of the integration that changes anything — and it is unavailable at the stages where the model only reads. The connector checks that on its side.

Recognises its own answers

In the Redmine journal an entry has only the author’s display name — there is no login at all. The integration knows its own name and so does not take its own answer for a new question. A small thing, without which the bot would answer itself endlessly.

Starts work only when addressed

A change of status, priority or assignee starts nothing: those are made by rules and bulk edits, and work nobody ordered would still be billed. Assigning an issue to the bot’s account is a way of addressing it, but it can be automatic too, so it is turned on by a separate setting. The list of selected projects is the access control: inside them any member can call the bot, outside them nobody can.

How to use it

Everything happens on the machine where the connector runs. At no step do you need to open access to your network from outside.

  1. Step 1

    Installation takes one click

    Open the “Marketplace” section on the connector’s local page. Before installing you can see what the integration will get: the addresses it will be able to reach, which credentials it will ask for and how many tools the model will see. The connector downloads a signed bundle from our registry and checks the signature before writing anything to disk.

    Connector

    ← scroll the frame →

    The access limits are written on the catalogue card.
  2. Step 2

    Setup: an address, a key and a list of projects

    You need the address of your Redmine, an API key of the bot’s account and the project identifiers — what appears in a project’s address. Redmine accepts the key only in its own header, and the connector inserts it itself: the integration does not see the key. In Redmine itself, remember to enable the REST API (Administration → Settings → Authentication).

    Connector

    ← scroll the frame →

    Each integration has its own form fields.
  3. Step 3

    Create a separate account for the bot

    Make it a member only of the projects where the bot should answer: the account’s permissions are the outer boundary, and the list of selected projects is the inner one. A role with permission to view and comment is enough; the bot should not be an administrator.

  4. Step 4

    Code is connected separately

    Redmine is an issue tracker; it does not give us repositories. For the bot to answer about your code, the repositories are connected to Buff as a code source — by the same connector, in the “Repositories” section. Either works without the other: the bot can read issues and answer in them, just without analysing the code.

  5. Step 5

    The same from the command line

    Installing without a GUI is an equal option, not a fallback: `connector install redmine`, then `connector instance add redmine --config base_url=… --config projects=catalog`. On a server without X you do the same and get the same result.

  6. Step 6

    Events arrive on their own

    After setup there is nothing to start: the integration watches the selected projects itself and brings in requests. No ports need to be opened — Redmine sends no calls of its own, and everything rests on polling, which only goes outward from your network.

    Connector

    ← scroll the frame →

    Each connection has its own set of tools and its own allowed address.

Access limits

The connector shows the same on your machine before installation. The list comes from the signed catalogue, not written here by hand.

Goes out to

only the addresses from the fields base_url

Credentials

api — the values stay in the connector, the integration does not see them

Webhooks

does not accept

Tools the model will see: 3, of which 2 only read. Writing tools are unavailable at the stages where the model only reads — and the connector checks that on its side.
ToolWhat it doesAccess
search_issuesFind issues by text — when a number is mentioned or context from the tracker is neededread only
get_issueRead an issue with its discussion — when requirements or the course of a discussion are neededread only
add_commentWrite a comment in an issuewrites

The integration runs as a separate process under its own operating system user: it does not see the connector’s key, does not read the files of other connections and cannot reach the network past the connector. More in the security section.

Requirements

  • Redmine with the REST API enabled (Administration → Settings → Authentication → “Enable REST web service”).
  • An API key of the bot’s account that is a member of the projects needed (the bot should not be an administrator).
  • Network access from the connector’s machine to Redmine — nothing needs to be opened from your network to the outside.
  • A connector run with the right to create a separate OS user for the integration (root or CAP_SETUID).
  • Analysing the code requires the repositories to be connected to Buff separately: Redmine does not provide repositories.

Questions

Does the Redmine key go to your cloud?
No. It is stored on the connector’s machine and never leaves it. The integration does not see it either: the connector inserts the key into the outgoing request itself — in the header Redmine expects.
Can the integration reach anything other than our Redmine?
No. It goes out only through the connector, only to the address derived from the setup field, and only to API paths. The connector rejects everything else.
Will the bot be able to write to projects we did not select?
No. The list of selected projects limits both reading and writing: a mention from an unselected project does not start work, and an attempt to answer there is rejected by the connector itself. The bot account’s permissions are a second, independent boundary.
Do I need to open a port?
No. Redmine sends no calls of its own, so the integration works by polling: the connector goes out itself, and no incoming connections are needed.
Can the bot start work on its own, without being addressed?
No. A change of status, priority or assignee does not count as addressing the bot: those are made by rules and bulk edits, and that would lead to work nobody ordered but that is billed. Assigning an issue to the bot is a way of addressing it, but it can be automatic too, so it is off by default.
Can the model accidentally write to an issue during analysis?
No. At the reading stages only the tools marked as reading are available. add_comment does not get there, and the connector checks that on its side, not we on ours.
What if the bot answers itself?
It will not. In the Redmine journal an entry has only the author’s display name, and the integration recognises its own answers by it. It is the only way to tell them apart — there is no login in the journal.
How quickly does the answer arrive?
A request is accepted within the polling interval — seconds to tens of seconds; the answer itself takes as long as the work takes.

Next

Connect Redmine

Install the connector in your network, open its local page and install the integration from the catalogue. Nothing needs to be rebuilt.

Companies and sole traders can pay by bank transfer and receive closing documents