Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
c9fb1f8
La Passerelle relie une messagerie à l'Atelier
Shaenn Aug 18, 2026
9bb16bd
Le manuel explique la Passerelle, et les documents cessent de la taire
Shaenn Aug 18, 2026
99e424d
La Passerelle s'appuie sur node-telegram-bot-api
Shaenn Aug 18, 2026
b667aeb
Un document part en message riche, tableaux compris
Shaenn Aug 18, 2026
a3c87e8
On consulte un projet, et on n'ouvre que ceux qu'on connaît
Shaenn Aug 18, 2026
16efe82
Le manuel dit ce que la Passerelle est devenue
Shaenn Aug 18, 2026
6cd9732
La Passerelle ne dit plus si elle est arrêtée
Shaenn Aug 18, 2026
e9c508c
Une citation, une liste imbriquée et une colonne alignée arrivent ent…
Shaenn Aug 18, 2026
98c7384
Le code littéral se surligne, pour survivre à un petit écran
Shaenn Aug 18, 2026
d9d471b
Un libellé de lien se relit, et Telegram cesse d'en inventer
Shaenn Aug 19, 2026
bdc5093
Un fichier dit ce que les blocs riches savent faire, et ce qu'ils fon…
Shaenn Aug 19, 2026
db8a12c
Une bulle éphémère dit que ça travaille, et à quoi
Shaenn Aug 19, 2026
7c07e13
La réponse de l'agent est un document, et se rend comme tel
Shaenn Aug 19, 2026
690a3f5
Le manuel dit ce qui se passe pendant qu'un tour travaille
Shaenn Aug 19, 2026
baa9832
Le repli d'un document reste un message riche
Shaenn Aug 19, 2026
1d793d8
Un clic ne peut plus emporter le serveur
Shaenn Aug 19, 2026
28b7ef9
Les commandes n'ont plus qu'une source
Shaenn Aug 19, 2026
31cb684
Chaque langue a sa liste, la référence comprise
Shaenn Aug 19, 2026
abb9b51
L'accueil constate au lieu de réciter
Shaenn Aug 19, 2026
cb4fba4
Une question se pose en entier, un contexte vidé se dit
Shaenn Aug 19, 2026
69fea4a
La fenêtre de contexte se dit, de loin comme de près
Shaenn Aug 19, 2026
e76258d
Les nombres de la fenêtre s'abrègent
Shaenn Aug 19, 2026
2efab4e
La compaction se déclenche d'ici, et se replie
Shaenn Aug 19, 2026
ddc2c6a
Un plan se lit avant de s'approuver
Shaenn Aug 19, 2026
b0c889a
Une demande tranchée retire ses boutons
Shaenn Aug 19, 2026
1b3e6e3
Le menu des commandes ne s'affiche plus que là où il sert
Shaenn Aug 19, 2026
2567e14
La Passerelle dit pour quel usage elle est faite
Shaenn Aug 20, 2026
3699ef8
AURA passe en 1.3.0
Shaenn Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,46 @@ par cas.
Une version se pose quand il y a quelque chose à annoncer, pas à chaque fusion. Une journée
entière de montées de dépendances n'en produit aucune.

## [1.3.0] — 2026-08-20

Une version d'une seule capacité, et elle est grande : la **Passerelle**, qui relie une
messagerie à l'Atelier pour lancer, surveiller et débloquer une session quand on n'est pas
devant le poste. Elle est éteinte par défaut et le reste tant qu'on ne la configure pas.

### Ce qui change pour vous

- **Piloter l'Atelier depuis Telegram.** On écrit à un bot, AURA ouvre une session sur un
projet connu ou transmet le message à celle qui travaille déjà, et rend sa réponse. Une
conversation tient une session à la fois. `/sessions`, `/etat`, `/stop`, `/fin` disent et
font le reste ; tout autre message part comme un tour, sans syntaxe à retenir.
- **Consulter un projet sans ouvrir de session.** `/projets` donne un écran de navigation qui
descend l'arborescence dossier par dossier et ouvre un fichier — même inventaire et mêmes
gardes que la page Projet, aucun processus lancé, aucun jeton dépensé.
- **Les documents arrivent en documents.** Markdown traduit en messages riches — titres,
listes, citations, code coloré et vrais tableaux —, découpés en pages quand ils sont longs,
la coupe tombant sur une fin de ligne. Ce qui n'est pas du Markdown reste en chasse fixe.
- **Décider de loin.** Une demande de permission arrive avec ses deux boutons ; un plan arrive
entier, mis en forme, avant d'être approuvé. Une question de l'agent se pose comme à
l'écran, à choix simple ou multiple, et se répond aussi en écrivant. L'échéance du quart
d'heure de l'Atelier s'applique ici : sans réponse, la demande est refusée, jamais l'inverse.
- **Voir la fenêtre de contexte, et agir dessus.** `/etat` donne le compte exact et son
dénominateur, `/compacter` compacte sans attendre le débordement. AURA prévient quand la
fenêtre a été compactée — résumé replié à l'appui — et une fois quand elle passe les 80 %.
- **Savoir que ça travaille.** Le temps d'un tour, une bulle éphémère dit quels outils tournent
et depuis combien de temps, avec les mêmes libellés qu'à l'écran.

### Ce qu'il faut peser avant de l'allumer

- **La Passerelle est faite pour un usage personnel.** Ce qui transite passe par les serveurs
de la messagerie, sans chiffrement de bout en bout : elle n'est **pas recommandée en
contexte professionnel**. Une forme sans tiers est cherchée — un réseau privé rendant
l'Atelier joignable depuis un téléphone — mais elle n'existe pas aujourd'hui.
- **Ce qu'elle n'ouvre pas.** Aucun port : l'échange est sortant, le serveur continue de
n'écouter que `127.0.0.1`, et les gardes de l'API ne bougent pas.
- **Ce qu'elle accorde.** Un accès distant au poste. La liste blanche des conversations est la
serrure : elle est obligatoire, la Passerelle refuse de démarrer sans elle, et un message
venu d'ailleurs reste sans réponse. [SECURITY.md](SECURITY.md) détaille le reste.

## [1.2.0] — 2026-08-18

Une version de la fiche projet : son volet de ressources retient enfin ce qu'on lui montre,
Expand Down Expand Up @@ -133,6 +173,7 @@ collées, reprise d'une session existante.
externe, aucun secret dans le navigateur. Voir [SECURITY.md](SECURITY.md).
- Windows, exclusivement — la seule plateforme sur laquelle l'application a tourné.

[1.3.0]: https://github.com/Shaenn/aura/releases/tag/v1.3.0
[1.2.0]: https://github.com/Shaenn/aura/releases/tag/v1.2.0
[1.1.0]: https://github.com/Shaenn/aura/releases/tag/v1.1.0
[1.0.0]: https://github.com/Shaenn/aura/releases/tag/v1.0.0
12 changes: 12 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,18 @@ Navigateur (SPA Quasar) ──/api/*──► BFF Fastify (server/) ──►
AURA est un outil **local, mono-utilisateur** : aucun service externe, aucun secret, aucune
authentification. Le front n'appelle que `/api/*` en même origine — pas de CORS.

**Une seule exception, et elle est optionnelle** : la Passerelle
(`server/passerelle/`) relie une messagerie à l'Atelier. Elle porte un secret, appelle un
service externe, et n'existe que si l'utilisateur la configure — sans jeton, rien ne démarre
et aucun appel ne sort. Elle n'ouvre **aucun port** : son long-polling est sortant, si bien
que l'écoute reste `127.0.0.1` et que `guard.ts` ne bouge pas. Ce qui la tient est sa liste
blanche de conversations, et elle refuse de démarrer sans elle.

Elle vise l'usage personnel : ce qui transite passe par les serveurs de la messagerie, sans
chiffrement de bout en bout, donc elle **n'est pas recommandée en contexte professionnel**. Une
forme sans tiers reste à trouver — piste d'un réseau privé (Tailscale) joignant l'Atelier depuis
un téléphone, ce qui supposerait de l'adapter à cet écran.

- `src/` — SPA Vue 3 / Quasar. Voir `src/CLAUDE.md`.
- `server/` — BFF Fastify. Voir `server/CLAUDE.md`.
- `shared/` — types de _wire_ (`transcript.ts`, `context.ts`, `agent.ts`, `projects.ts`,
Expand Down
31 changes: 27 additions & 4 deletions README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -227,15 +227,16 @@ The detail — bounds, background work, resuming a session — is in

## The manual

AURA ships its own manual: **18 pages** that do not merely describe where to click, but **why
AURA ships its own manual: **19 pages** that do not merely describe where to click, but **why
each screen is built the way it is** — why a permission that expires is denied and not granted,
why the diagnostic thresholds are percentiles, why sub-agents get their own track. The `?` key
opens the page matching the current screen.

It reads online, without installing anything:

[Concepts](https://shaenn.github.io/aura/en/guide/concepts) · [Session replay](https://shaenn.github.io/aura/en/guide/replay) ·
[Workshop](https://shaenn.github.io/aura/en/guide/atelier) · [Active sessions](https://shaenn.github.io/aura/en/guide/sessions) ·
[Workshop](https://shaenn.github.io/aura/en/guide/atelier) · [Gateway](https://shaenn.github.io/aura/en/guide/passerelle) ·
[Active sessions](https://shaenn.github.io/aura/en/guide/sessions) ·
[Diagnostic](https://shaenn.github.io/aura/en/guide/diagnostic) · [Usage & costs](https://shaenn.github.io/aura/en/guide/usage) ·
[all the pages](https://shaenn.github.io/aura/en/guide/concepts)

Expand Down Expand Up @@ -285,6 +286,19 @@ leave the managed folder, whatever the number of `..`.
The only process that talks to the outside is the Workshop agent, when you tell it to — and it
uses the authentication of your Claude Code installation, not ours.

One thing alone can change that, and turning it on is your call: the
[Gateway](https://shaenn.github.io/aura/en/guide/passerelle), which links a messaging app to the
Workshop so you can drive a session remotely. It is **inert by default** — with no token nothing
starts and no call goes out. Turned on, it holds a secret and calls an external service, but
**opens no port**: its exchange is outbound, the listener stays on `127.0.0.1`. The power it
grants is that of remote access to your machine, and its allowlist of conversations is what
closes it again — without one, it refuses to start.

What passes through travels through the messaging service's servers, with no end-to-end
encryption: the Gateway is made for personal use, and is **not recommended for professional
use**. A shape without a third party is being looked for — a private network making the Workshop
reachable from a phone — but it does not exist today.

[SECURITY.en.md](SECURITY.en.md) details the server's guards, what they do not cover, and how to
report a flaw.

Expand Down Expand Up @@ -349,14 +363,23 @@ The console window stays open: **it is the server**. Closing it stops AURA.

## Configuration

None. Two optional variables, to set in the environment or in `server/.env` (git-ignored, read
by `--env-file`):
None. A few optional variables, to set in the environment or in `server/.env` (git-ignored,
read by `--env-file`):

| Variable | Default | Role |
| ----------------- | ----------- | --------------------------------------------------------- |
| `PORT` | `8800` | Server listening port — the target of Quasar's dev proxy. |
| `AURA_CLAUDE_DIR` | `~/.claude` | Managed folder. Handy for working on a sandbox copy. |

The next three exist only for the [Gateway](https://shaenn.github.io/aura/en/guide/passerelle),
and **everything stays off as long as the first one is absent**:

| Variable | Default | Role |
| --------------------- | --------- | ------------------------------------------------------------------------- |
| `AURA_TELEGRAM_TOKEN` | — | The bot token. Absent: the Gateway does not exist. |
| `AURA_TELEGRAM_CHATS` | — | The allowed conversations. **Required**: without it, it refuses to start. |
| `AURA_TELEGRAM_MODE` | `default` | Permission mode of sessions opened from afar. |

A new variable requires a full restart: hot reload does not re-read `--env-file`.

---
Expand Down
30 changes: 27 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,15 +253,16 @@ Le détail — bornes, arrière-plan, reprise d'une session — est dans

## Le manuel

AURA embarque son propre manuel : **18 pages** qui ne décrivent pas seulement où cliquer, mais
AURA embarque son propre manuel : **19 pages** qui ne décrivent pas seulement où cliquer, mais
**pourquoi chaque écran est fait ainsi** — pourquoi une permission qui expire est refusée et
non accordée, pourquoi les seuils du diagnostic sont des percentiles, pourquoi les sous-agents
ont leur propre piste. La touche `?` ouvre la page correspondant à l'écran courant.

Il se lit en ligne, sans installer quoi que ce soit :

[Concepts](https://shaenn.github.io/aura/guide/concepts) · [Rejeu de session](https://shaenn.github.io/aura/guide/replay) ·
[Atelier](https://shaenn.github.io/aura/guide/atelier) · [Sessions actives](https://shaenn.github.io/aura/guide/sessions) ·
[Atelier](https://shaenn.github.io/aura/guide/atelier) · [Passerelle](https://shaenn.github.io/aura/guide/passerelle) ·
[Sessions actives](https://shaenn.github.io/aura/guide/sessions) ·
[Diagnostic](https://shaenn.github.io/aura/guide/diagnostic) · [Usage & coûts](https://shaenn.github.io/aura/guide/usage) ·
[toutes les pages](https://shaenn.github.io/aura/guide/concepts)

Expand Down Expand Up @@ -312,6 +313,19 @@ vérifié : il ne peut pas sortir du dossier géré, quel que soit le nombre de
Le seul processus qui parle à l'extérieur est l'agent de l'Atelier, quand vous lui en donnez
l'ordre — et il utilise l'authentification de votre installation Claude Code, pas la nôtre.

Une seule chose peut changer cela, et c'est vous qui décidez de l'allumer : la
[Passerelle](https://shaenn.github.io/aura/guide/passerelle), qui relie une messagerie à
l'Atelier pour piloter une session à distance. Elle est **inerte par défaut** — sans jeton,
rien ne démarre et aucun appel ne sort. Activée, elle porte un secret et appelle un service
externe, mais **n'ouvre aucun port** : son échange est sortant, l'écoute reste `127.0.0.1`.
Le pouvoir qu'elle accorde est celui d'un accès distant à votre poste, et sa liste blanche de
conversations est ce qui le referme — sans elle, elle refuse de démarrer.

Ce qui transite passe par les serveurs de la messagerie, sans chiffrement de bout en bout : la
Passerelle est faite pour un usage personnel, et **n'est pas recommandée pour un usage
professionnel**. Une forme sans tiers est cherchée — un réseau privé rendant l'Atelier joignable
depuis un téléphone — mais elle n'existe pas aujourd'hui.

[SECURITY.md](SECURITY.md) détaille les gardes du serveur, ce qu'elles ne couvrent pas, et
comment signaler une faille.

Expand Down Expand Up @@ -398,14 +412,24 @@ La fenêtre de console reste ouverte : **c'est le serveur**. La fermer arrête A

## Configuration

Aucune. Deux variables facultatives, à poser dans l'environnement ou dans `server/.env`
Aucune. Quelques variables facultatives, à poser dans l'environnement ou dans `server/.env`
(ignoré par git, lu par `--env-file`) :

| Variable | Défaut | Rôle |
| ----------------- | ----------- | ------------------------------------------------------------- |
| `PORT` | `8800` | Port d'écoute du serveur — cible du proxy dev de Quasar. |
| `AURA_CLAUDE_DIR` | `~/.claude` | Dossier géré. Pratique pour travailler sur une copie sandbox. |

Les trois suivantes n'existent que pour la
[Passerelle](https://shaenn.github.io/aura/guide/passerelle), et **tout reste éteint tant que
la première est absente** :

| Variable | Défaut | Rôle |
| --------------------- | --------- | ----------------------------------------------------------------------------- |
| `AURA_TELEGRAM_TOKEN` | — | Le jeton du bot. Absent : la Passerelle n'existe pas. |
| `AURA_TELEGRAM_CHATS` | — | Les conversations autorisées. **Obligatoire** : sans elle, refus de démarrer. |
| `AURA_TELEGRAM_MODE` | `default` | Mode de permission des sessions ouvertes de loin. |

Une nouvelle variable demande un redémarrage complet : le rechargement à chaud ne relit pas
`--env-file`.

Expand Down
43 changes: 42 additions & 1 deletion SECURITY.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ application guarantees, what it does not, and how to report a flaw.
## The model

AURA is a **local, single-user** tool. There is no account, no password, no external service:
the boundary is the machine itself.
the boundary is the machine itself. One feature, off by default, moves that boundary — see
_The Gateway_ below.

- The BFF **listens on `127.0.0.1` only**, with no option to open it up. No device on the
network can reach it.
Expand All @@ -26,6 +27,46 @@ the boundary is the machine itself.
file changed on disk in the meantime.
- Internal errors never return an absolute path: the detail stays in the server log.

## The Gateway, and what it changes

One feature alone steps outside this model, and **it exists only if you turn it on**: the
Gateway, which links a messaging app to the Workshop so you can drive a session remotely. With
no token configured it does not start, calls nothing, and everything above stays true word for
word.

What it does not change:

- **It opens no port.** The exchange is outbound — the server goes and fetches messages. The
BFF still listens on `127.0.0.1` only, and the `Host` and `Sec-Fetch-Site` guards are
untouched.
- **It does not go through the API.** It calls the session registry in the same process: no
route is opened, no request needs authenticating.

What it does change, and what you should weigh:

- **A secret now exists.** The bot token lives in `server/.env`, un-versioned. It does not
travel through the server's shared configuration and no route is able to hand it back.
- **The server calls an external service.** Your messages travel through it.
- **It is remote access to your machine.** Whoever writes in an allowed conversation can open
a session, have it run a command and approve a write. The allowlist of conversations is the
only guard against that: it is **required**, the Gateway refuses to start without it, and a
message from anywhere else gets no reply.
- **The channel's safety becomes yours.** Anyone who gains access to an allowed conversation —
an unlocked device, a compromised account — gains that same power. AURA cannot tell them
apart from you.

**Personal use is what the Gateway is made for; professional use is not.** Everything that
passes through — your messages, the agent's answers, the contents of files consulted remotely —
travels through the messaging service's servers, with no end-to-end encryption: a conversation
with a bot offers none. The trade-off holds for personal projects; it does not hold for company
code or client data. A shape without a third party is being looked for — a private network
(Tailscale or equivalent) making the Workshop reachable from a phone without exposing anything,
which would mean adapting the interface to that screen — but it does not exist today, and
nothing in the code tells a personal project from a work one.

Permission requests are still raised, and still deny themselves when unanswered.
`AURA_TELEGRAM_MODE=plan` opens remote sessions in plan mode, where nothing executes.

## What is not covered

- **The other processes in your session.** Anything running under your account can reach
Expand Down
47 changes: 46 additions & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ l'application garantit, ce qu'elle ne garantit pas, et comment signaler un défa
## Le modèle

AURA est un outil **local et mono-utilisateur**. Il n'y a ni compte, ni mot de passe, ni
service externe : la frontière est la machine elle-même.
service externe : la frontière est la machine elle-même. Une seule fonctionnalité, éteinte par
défaut, déplace cette frontière — voir _La Passerelle_ plus bas.

- Le BFF **n'écoute que `127.0.0.1`**, sans option pour en sortir. Aucun appareil du réseau
ne peut l'atteindre.
Expand All @@ -27,6 +28,50 @@ service externe : la frontière est la machine elle-même.
- Les erreurs internes ne renvoient jamais de chemin absolu : le détail reste au journal du
serveur.

## La Passerelle, et ce qu'elle change

Une seule fonctionnalité sort de ce modèle, et **elle n'existe que si vous l'activez** : la
Passerelle, qui relie une messagerie à l'Atelier pour piloter une session à distance. Sans
jeton configuré, elle ne démarre pas, n'appelle rien, et ce qui précède reste vrai mot pour
mot.

Ce qu'elle ne change pas :

- **Elle n'ouvre aucun port.** L'échange est sortant — c'est le serveur qui va chercher les
messages. Le BFF continue de n'écouter que `127.0.0.1`, et les gardes `Host` et
`Sec-Fetch-Site` sont inchangées.
- **Elle ne passe pas par l'API.** Elle appelle le registre de sessions dans le même
processus : aucune route n'est ouverte, aucune requête n'est à authentifier.

Ce qu'elle change, et qu'il faut peser :

- **Un secret existe désormais.** Le jeton du bot vit dans `server/.env`, non versionné. Il
ne traverse pas la configuration partagée du serveur et aucune route n'est en mesure de le
renvoyer.
- **Le serveur appelle un service externe.** Vos messages transitent par ce service.
- **C'est un accès distant à votre machine.** Qui écrit dans une conversation autorisée peut
ouvrir une session, lui faire exécuter une commande et approuver une écriture. La liste
blanche des conversations est la seule garde qui l'en empêche : elle est **obligatoire**,
la Passerelle refuse de démarrer sans elle, et un message venu d'ailleurs reste sans
réponse.
- **La sûreté du canal devient la vôtre.** Quiconque obtient l'accès à une conversation
autorisée — appareil déverrouillé, compte compromis — obtient ce même pouvoir. AURA ne
peut pas le distinguer de vous.

**L'usage personnel est celui pour lequel la Passerelle est faite ; l'usage professionnel ne
l'est pas.** Tout ce qui transite — vos messages, les réponses de l'agent, le contenu des
fichiers consultés de loin — passe par les serveurs de la messagerie, sans chiffrement de bout
en bout : une conversation avec un bot n'en offre pas. Le compromis se tient pour des projets
personnels ; il ne se tient pas pour du code d'entreprise ou des données de clients. Une forme
sans tiers est cherchée — un réseau privé (Tailscale ou équivalent) rendant l'Atelier joignable
depuis un téléphone sans rien exposer, ce qui demanderait d'adapter l'interface à cet écran —
mais elle n'existe pas aujourd'hui, et rien dans le code ne distingue un projet personnel d'un
projet de travail.

Les demandes de permission continuent d'être posées, et se refusent d'elles-mêmes sans
réponse. `AURA_TELEGRAM_MODE=plan` ouvre les sessions distantes en mode plan, où rien ne
s'exécute.

## Ce qui n'est pas couvert

- **Les autres processus de votre session.** Tout ce qui tourne sous votre compte peut
Expand Down
Loading