Documentation

Configuration MCP

Chaque compte dispose de son propre point d’accès MCP, limité aux tâches de ce compte. Aucun jeton partagé ou global.

1. Connectez-vous par OAuth (recommandé)

Done est un serveur d’autorisation OAuth 2.1 complet pour son point d’accès MCP. Les clients qui parlent OAuth (claude.ai, les connecteurs ChatGPT et Claude Desktop) se connectent donc tout seuls, sans aucun jeton à copier. Ajoutez Done comme connecteur personnalisé, avec l’URL seulement :

https://trydone.app/mcp
  1. Allez dans Settings → Connectors → Add custom connector.
  2. Indiquez https://trydone.app/mcp comme URL du serveur MCP distant et cliquez sur Add.
  3. Cliquez sur Connect. Le client découvre les points d’accès OAuth de Done, s’enregistre et vous envoie sur Done pour vous connecter et approuver l’accès.
  4. Approuvez, et le connecteur est actif, limité à votre seul compte.

2. Ou utilisez un jeton bearer

Pour les clients configurés à la main (ou par un script), générez plutôt un jeton. Ouvrez le panneau Compte, en bas à gauche de la barre latérale, et générez un jeton MCP. Il n’est affiché qu’une fois : copiez-le en lieu sûr. Vous pouvez créer un jeton à accès complet, un jeton en lecture seule ou un jeton limité à un seul projet. Pointez ensuite un client vers le point d’accès :

{
  "mcpServers": {
    "done": {
      "url": "https://trydone.app/mcp",
      "headers": { "Authorization": "Bearer <votre-jeton-mcp-généré>" }
    }
  }
}

Sur claude.ai, vous pouvez aussi coller ce même Authorization: Bearer <token> comme en-tête de requête dans les Advanced settings d’un connecteur personnalisé. Dans les deux cas, un agent qui utilise le jeton ne voit et ne modifie que ce à quoi le jeton donne accès.

Connectez un agent personnel

Les agents personnels capables d’ajouter un serveur MCP distant se connectent à Done de la même façon : pointez-les vers https://trydone.app/mcp, puis connectez-vous par OAuth ou donnez-leur un jeton MCP de l’étape 2. Un jeton en lecture seule ou limité à un seul projet est un bon début pour un agent que vous apprenez encore à connaître.

Meta Muse

Muse ajoute de nouveaux outils sous forme de connecteurs personnalisés, et vous en demandez un dans la conversation. Dites à Muse : « Créez un connecteur personnalisé pour le serveur MCP de Done à l’adresse https://trydone.app/mcp. » Quand il demande des identifiants, donnez-lui votre jeton MCP par son invite sécurisée de saisie des identifiants, pas dans la conversation elle-même.

Hermes Agent (Nous Research)

Ajoutez Done à ~/.hermes/config.yaml, puis lancez hermes mcp login done pour approuver l’accès dans Done, et hermes mcp test done pour vérifier qu’il liste bien les outils de Done :

mcp_servers:
  done:
    url: "https://trydone.app/mcp"
    auth: oauth

Pour utiliser un jeton à la place, remplacez auth: oauth par headers: { Authorization: "Bearer <votre-jeton-mcp>" }.

OpenClaw (anciennement Clawdbot)

Ajoutez Done comme serveur streamable-HTTP, connectez-vous, puis testez la connexion :

openclaw mcp add done --url https://trydone.app/mcp --transport streamable-http
openclaw mcp login done
openclaw mcp doctor done --probe

Préférez la connexion par OAuth à un en-tête Authorization statique : certaines versions d’OpenClaw ne transmettent pas les en-têtes personnalisés aux serveurs streamable-HTTP.

Poke

Dans Poke, ouvrez Integrations → New, nommez l’intégration Done, indiquez https://trydone.app/mcp comme MCP Server URL, collez votre jeton MCP dans API Key et cliquez sur Create Integration.

Instinct

Instinct ne publie pas encore de marche à suivre pour les outils externes. Si le vôtre peut ajouter une connexion MCP personnalisée, donnez-lui l’URL https://trydone.app/mcp et un jeton MCP, envoyé sous la forme Authorization: Bearer <token>.

Tout autre agent capable d’ajouter un serveur MCP distant convient aussi : suivez les étapes OAuth du point 1 s’il prend en charge OAuth, ou utilisez un jeton du point 2 dans le cas contraire. Dans les deux cas, il apparaît dans Réglages → Accès des agents, où vous pouvez le révoquer en un clic.

3. Outils à la disposition de l’agent

Le serveur MCP expose des outils pensés pour des flux de travail, et non du CRUD brut :

list_my_tasks
Récupère la file d’attente prête à être traitée : les tâches attribuées à un agent IA, ni bloquées ni en pause, de la plus prioritaire à la moins prioritaire. À appeler en premier. Quand elle revient vide, elle dit pourquoi, avec le détail de ce qui est masqué (blocked/done/wont_do/pending_approval/plan_proposed/needs_input/paused/claimed_by_other). Ainsi, « rien à faire » et « tout est en pause » ne se lisent pas de la même façon. Passez include_paused pour lister les tâches en pause et signaler ce que l’exécution a laissé de côté ; cela ne lève aucune pause, elles ne peuvent toujours pas être traitées.
next_task
Prend en charge, de façon atomique, la seule tâche prête la plus prioritaire : c’est le retrait de la file. À utiliser dans une flotte pour que deux agents ne prennent jamais la même.
list_tasks
Affiche tout le tableau ; filtrez par status/priority/project/parent ou cherchez dans les titres.
get_task
Charge une tâche en entier : notes, sous-tâches, blocages et fil d’activité, ainsi que les trois niveaux de brief permanent (workspace_brief, project_brief et le notes_for_agent de la tâche elle-même). Ordre de priorité : espace de travail → projet → tâche, le plus précis en dernier. Avec un budget : le fil renvoie par défaut les 50 entrées les plus récentes (limit, 0–500) et include restreint les sections ; tout ce qui est laissé de côté est nommé dans context_summary, pour qu’une réponse courte ne soit jamais prise pour un historique complet.
claim_task / release_task
Prend une tâche en charge (en cours, attribuée à un agent, avec un commentaire de départ), en passant votre identifiant `agent` (par exemple "ChatGPT") pour qu’une flotte ne la réserve pas deux fois, ou la remet en place si vous ne pouvez pas la terminer maintenant.
decline_task
Retire complètement une tâche de votre file : efface l’attribution et votre prise en charge, la remet en not_started et publie votre motif dans le fil. Pour un travail qui vous a été attribué mais qui ne devrait pas l’être. release_task ne libère que la réservation ; cet outil-ci retire l’attribution.
handoff_task
Passe en cours de route une tâche qui vous appartient à un autre agent nommé de la liste. Elle rejoint aussitôt sa file (prise en charge libérée, retour à not_started, votre note publiée) et agent_ok est réinitialisé : l’agent suivant propose donc la clôture, sauf si un humain le réactive.
list_agents
La liste des agents du compte, et lequel de ces agents vous êtes. Votre couloir vient du nom de votre identifiant de connexion, jamais d’un argument ; les outils de file ne renvoient que les tâches de votre propre couloir. Liste vide = une seule file partagée.
pause_board
Le même bouton d’arrêt, un niveau au-dessus : plus aucun agent du compte ne reçoit de travail tant qu’un humain n’a pas relancé le tableau. Pour un mur qui ne tient pas à une seule tâche : identifiants disparus, toutes les tâches qui échouent de la même façon, une boucle qui s’étend sur plusieurs tâches. Ensuite, list_my_tasks et next_task refusent et renvoient le motif au lieu d’une file vide, de sorte qu’une exécution qui trouve le tableau à l’arrêt consigne pourquoi. Le travail déjà en cours peut encore être bouclé. Seul un humain peut relancer le tableau, dans le panneau Compte.
pause_task
Arrête le travail sur une tâche et tient tous les agents à l’écart jusqu’à ce qu’un humain la relance. Pour les cas où vous êtes COINCÉ d’une manière qu’aucune question ne réglerait : une boucle, un identifiant manquant, une tâche infaisable telle qu’elle est rédigée. Un motif est obligatoire, et vous ne pouvez pas lever la pause : la reprise est une action humaine dans l’application, si bien qu’un agent qui s’est mis en pause parce qu’il bouclait ne peut pas se remettre lui-même dans la boucle.
comment_on_task
Dépose résultats et conclusions dans le fil de la tâche, le couloir que lit un humain. Un seul commentaire dense par exécution, pas un récit pas à pas : les changements de statut, les prises en charge et les traces d’exécution sont consignés automatiquement dans l’historique de la tâche.
check_criterion
Coche un critère d’acceptation comme rempli. C’est le canal de l’avancement : cochez les conditions à mesure que vous les remplissez au lieu de raconter l’avancement en commentaires. Cocher toutes les cases ne termine pas la tâche.
ask_decision
Met une question de côté pour l’humain et passe à la suite : c’est la seule façon de le solliciter sans mettre fin à votre exécution. La tâche sort de votre file en needs_input ; vous la reprenez avec la réponse jointe. Une recommandation est obligatoire. Une seule question bloquante ouverte par tâche.
list_open_decisions / withdraw_decision
Affiche toutes les questions qui attendent un humain, ou en retire une que vous avez résolue vous-même. À vérifier en premier à chaque exécution : une tâche dont la question a reçu sa réponse est le travail le moins coûteux qui soit.
check_night_budget
Demande si vous pouvez commencer une autre tâche cette nuit. Les budgets de tâche plafonnent une tâche ; celui-ci plafonne toute une session sans surveillance, pour qu’une routine nocturne ne dépense pas en une nuit la marge d’une semaine.
delete_comment
Supprime l’un des commentaires de l’agent lui-même : le doublon d’une nouvelle tentative, ou un brouillon qu’il a remplacé. Vos commentaires et l’historique des statuts ne peuvent pas être supprimés.
complete_task
Marque la tâche comme terminée directement. Un résumé est obligatoire. Ne fonctionne que si la tâche a agent_ok=true ; sinon l’appel échoue et vous indique d’utiliser propose_completion.
propose_completion
Pour une tâche sans agent_ok : publie un résumé et passe le statut à pending_approval jusqu’à ce qu’un humain l’approuve ou la rejette.
approve_task / reject_task
Tranche une tâche en pending_approval (un agent superviseur peut le faire aussi, pas seulement un humain).
propose_plan
Avant un travail conséquent : publie le plan et passe le statut à plan_proposed jusqu’à ce qu’un humain l’approuve. C’est le pendant de propose_completion, avant l’exécution.
approve_plan / reject_plan
Tranche le plan d’une tâche en plan_proposed (un agent superviseur peut le faire aussi, pas seulement un humain).
create_task / update_task / delete_task
CRUD complet des tâches, validé de la même façon que l’API REST. delete_task déplace la tâche vers la Corbeille, sans la supprimer définitivement. Accepte des références : des URL ou des chemins servant de contexte, que l’agent récupère avec ses propres connecteurs MCP.
quick_capture
Crée une tâche à partir de texte brut : reconnaît l’échéance, la priorité, @agent (ou @claude/@chatgpt), la ~estimation et le #projet.
decompose_task
Découpe une tâche en plusieurs sous-tâches en un seul appel.
render_plan
Présente les sous-étapes d’une tâche sous forme de plan : une liste à cocher en markdown, du JSON structuré et un widget interactif pour les hôtes qui affichent l’interface MCP. À appeler après decompose_task/propose_plan.
set_step_status
Coche une sous-étape du plan ou la rouvre, et renvoie le plan actualisé. Cocher une étape de l’agent lui-même sans agent_ok passe quand même par l’étape d’approbation.
block_task / unblock_task
Gère les dépendances de blocage (avec détection des boucles).
start_run / end_run / check_budget
Ouvre et ferme une session de travail vérifiable ; consulte ce qu’il reste du budget d’une tâche en appels d’outils ou en minutes. Une fois le budget d’une tâche épuisé, start_run est refusé. Passez trace_url à start_run pour lier la transcription de la session : la réponse à « pourquoi a-t-il fait ça à 3 h du matin ? » est alors à un clic de l’exécution.
fleet_status
Instantané en direct de chaque tâche qu’un agent a prise en charge, depuis combien de temps, et si la réservation a expiré. À utiliser pour voir qui travaille sur quoi avant de prendre une tâche.
runner_heartbeat
Réservé à une machine d’exécution auto-hébergée : l’enregistre auprès du compte et signale son état de santé, pour que son propriétaire la voie dans Done au lieu de lire des journaux en SSH. Le seul état que rien d’autre ne peut montrer est celui d’une machine connectée mais en panne : son jeton Done est valide, elle garde donc le flux d’événements et apparaît « à l’écoute », alors que sa connexion expirée au modèle fait échouer chaque exécution.
list_triggers / claim_trigger
Les demandes qu’un humain vous a adressées : un appui sur « Lancer maintenant », ou @claude dans un commentaire. Chacune est une ligne durable qui attend qu’un agent se connecte, et qui atteint instantanément un agent connecté par le flux d’événements en direct. Une demande explicite passe avant l’ordre de la file : next_task classe donc en premier une tâche demandée. claim_trigger en accuse réception de façon atomique, pour qu’une flotte ne la traite pas deux fois.
search_activity
Cherche dans le fil d’activité de toutes les tâches que vous pouvez voir, au lieu de lire les tâches une par une : recherche d’une sous-chaîne dans les commentaires, les changements de statut et les comptes rendus d’agents, du plus récent au plus ancien, à affiner par task_id/author/kind/since.
list_routines
Lecture seule : les routines récurrentes qu’un humain a planifiées sur vos tableaux, avec horaire, fuseau horaire, prochaine exécution, mise en pause et exécutions récentes. Chaque créneau crée une tâche ordinaire qui vous est attribuée, avec un déclencheur ; les exécutions arrivent donc par list_triggers et next_task comme n’importe quelle autre demande. Aucun outil ne permet d’en créer ou d’en modifier une : un agent capable de se planifier lui-même mettrait son propre travail en file d’attente.
changes_since
Le pendant « à la demande » du flux d’événements en direct, pour une session qui se connecte, travaille et s’arrête : passez votre dernier curseur et ne recevez que ce qui a changé depuis. Sans curseur, l’outil en fixe un et ne renvoie aucun changement : un premier appel ne peut pas déverser tout le tableau. Les déclencheurs ne sont pas inclus ; list_triggers reste la source pour ceux-là.
list_claude_shipped
Liste les tâches qu’un agent IA a marquées comme terminées, de la plus récente à la plus ancienne. Pour un point quotidien, une rétrospective ou la question « qu’a réellement fait l’agent ? ».
list_stale_tasks
Repère le travail ouvert qui s’est tu, avec les preuves pour décider quoi en faire : jours d’inactivité, avancement des sous-tâches, blocages ouverts et codes de motif. C’est la passe de nettoyage.
get_evidence
Tout ce qu’un humain voudrait vérifier avant d’approuver une tâche, en un seul appel : avancement des critères, dépenses par rapport au budget, justificatifs, livrables et liens vers les traces.
create_artifact_upload
Joint un vrai fichier (un PDF, une capture d’écran, une feuille de calcul) à une tâche. Renvoie un lien d’envoi à usage unique : envoyez-y les octets bruts avec PUT, sans en-tête Authorization, puis renseignez l’artifact_id du livrable avec update_task. Le lien fonctionne une seule fois et expire au bout de 15 minutes. Refusé pour un jeton en lecture seule, une tâche hors du projet ou de l’espace de travail du jeton, une tâche dans la Corbeille ou un fichier qui dépasse les limites de taille.
propose_capture / list_capture_inbox
La porte d’entrée : propose une tâche que l’humain n’a pas encore saisie, pour sa boîte de saisie. Ne crée rien : c’est l’humain qui écrit, en acceptant. La liste indique le rapport entre propositions acceptées et écartées, qui dit si cette fonction mérite sa place.
propose_edit
Suggère des modifications sur les champs d’une tâche sans les appliquer : une comparaison entre l’actuel et le proposé, qu’un humain accepte ou écarte champ par champ, pour que trois bonnes suggestions ne soient pas rejetées avec la quatrième. N’écrit rien. Un champ que vous ne pouvez pas modifier, vous ne pouvez pas non plus le proposer.
propose_brief_edit
Propose une nouvelle rédaction du brief d’agent d’un projet ou d’une tâche, le plus souvent après un rejet que ce brief aurait dû éviter. Un remplacement complet accompagné d’un motif, présenté à l’humain dans À valider, l’actuel face au proposé. N’écrit rien : une personne l’applique ou l’écarte, et l’application est refusée si le brief a changé entre-temps. Le brief de l’espace de travail ne peut pas faire l’objet d’une proposition.
propose_grooming / list_grooming_proposals
Transforme une passe de nettoyage en un seul lot à relire : une décision recommandée par tâche, chacune avec son motif. N’écrit rien : un humain approuve chaque élément dans l’application, et c’est cette approbation qui écrit.
get_autonomy_ledger
Montre où agent_ok a été mérité : approbations et rejets regroupés par projet ou par étiquette, avec la série d’approbations en cours. Rapport uniquement : accorder de l’autonomie est une action humaine.
get_agent_roster
Ce que chaque agent nommé a réellement fait : exécutions, minutes et appels d’outils dépensés, tâches approuvées et rejetées, taux de rejet, impact et valeur apportés par les tâches approuvées, et appels d’outils dépensés par tâche approuvée. Rapport uniquement.
get_agent_economics
Coût et valeur par agent et par projet sur une période exprimée en jours : appels d’outils, minutes et budget dépensés, tâches approuvées et rejetées, taux de rejet, valeur et impact apportés par les tâches approuvées, et appels d’outils et minutes par tâche approuvée. En unités, pas en argent. Restreint au projet ou à l’espace de travail d’un jeton à portée limitée. Rapport uniquement.
get_digest / get_weekly_review / get_stats
Pour s’orienter en début de session, ou obtenir une vue plus complète de la productivité (tendance, série, répartitions).
list_projects / create_project / update_project / delete_project
Gère les projets de la barre latérale. create_project accepte un workspace_id facultatif (issu de list_workspaces) pour classer le projet dans un espace de travail partagé plutôt que dans l’espace personnel ; un sous-projet prend l’espace de travail de son parent, n’envoyez donc pas les deux.
list_workspaces
Les espaces de travail auxquels ce compte appartient : id, nom, rôle (owner ou member) et notes_for_agent, le brief permanent de l’espace de travail. Un espace de travail définit qui peut voir un ensemble de tâches. Lecture seule : c’est l’humain qui crée et partage les espaces de travail, dans Compte → Espaces de travail et équipe, et c’est à lui d’écrire le brief.
list_goals / create_goal / update_goal / delete_goal
Gère les objectifs, le niveau « cap à tenir » au-dessus des projets. Classez des projets ou des tâches sous un objectif avec goal_id ; supprimer un objectif détache son travail au lieu de le détruire.
list_tags / create_tag / delete_tag / tag_task / untag_task
Gère et applique les étiquettes transversales.
list_trash / restore_task
Affiche le contenu de la Corbeille et en ressort une tâche.
list_connections
Les applications connectées de l’humain (Drive, Gmail, Notion, GitHub, Linear, Slack, Fireflies, Granola, PostHog) et ce que chaque connexion permet réellement, ce qui peut être moins que ce qu’offre le fournisseur si l’écran de consentement a été restreint.
search_context
Cherche de quoi lire dans les applications connectées. Renvoie des résultats (titre, type, lien et une référence), jamais les contenus. Une connexion en panne est nommée au lieu de faire échouer toute la recherche.
read_context
Lit en texte brut un résultat de search_context, à partir de la connexion et de la référence. Une référence Slack renvoie le fil entier.
save_context
Enregistre un document texte dans une application connectée capable d’en accueillir un (Drive, à ce jour). C’est ainsi qu’un livrable sort de Done. Il n’existe ici absolument aucun outil pour envoyer un e-mail ou publier dans Slack.
list_calendar_events
Liste les événements de calendrier de l’humain mis en cache (titre, heure, lieu, organisateur, participants), issus de ses comptes Google connectés. À utiliser avant de décider à quelle tâche une réunion se rattache.
suggest_event_matches
Classe les paires tâche↔événement de calendrier les plus probables, la meilleure en premier, avec les preuves à l’appui de chacune. Cet appel ne lie rien : confirmez avec link_task_to_event.
link_task_to_event / unlink_task_from_event
Enregistre (ou supprime) le fait qu’une tâche et un événement de calendrier sont une seule et même chose, pour que la tâche soit épinglée à l’heure réelle de la réunion au lieu d’être casée dans le temps libre.

Prompts et ressources

Au-delà des outils, le serveur est pleinement natif MCP : il expose aussi des prompts et des ressources, pour qu’un client puisse proposer des flux de travail prêts à l’emploi et joindre des données en direct comme contexte.

  • prompts/list · des modèles d’une ligne qui correspondent à de vrais flux de travail, pour qu’un client puisse les présenter comme des commandes slash :
    • plan_my_day — Prépare un plan réaliste et hiérarchisé pour aujourd’hui à partir de mes tâches ouvertes.
    • work_next — Prend en charge et traite la seule tâche prête la plus prioritaire.
    • daily_review — Résume ce qui a été fait, ce qui est en retard et ce sur quoi se concentrer ensuite.
    • groom_board — Repère le travail ouvert qui s’est éteint sans bruit et propose quoi faire de chaque tâche (propose seulement).
    • answer_backlog — Reprend les tâches dont j’ai déjà répondu aux questions en attente.
    • prep_meetings — Associe les événements de calendrier du jour aux tâches qu’ils concernent et prépare chacun d’eux.
    • triage_task — Évalue une tâche, puis la planifie ou signale ce qui la bloque.
  • resources/list · des vues en lecture seule qu’un client peut joindre : done://digest, done://queue et un done://task/<id> par tâche ouverte. Les jetons à portée limitée ne voient jamais que leur propre projet.

Une exécution type d’un agent

get_digest → list_open_decisions → next_task → get_task → travail, en cochant check_criterion à mesure que chaque condition est remplie → comment_on_task une seule fois, avec le compte rendu → propose_completion. Vous relisez les résultats dans le fil de la tâche et vous en restez le responsable.

Demander sans s’arrêter

Un agent qui arrive à un vrai choix (dépenser de l’argent, agir vers l’extérieur, faire quelque chose d’irréversible) ne doit pas deviner, mais il ne doit pas non plus rester à attendre. Il appelle ask_decision et passe à la suite : la tâche sort de sa file en needs_input, vous répondez dans À valider ou directement depuis un message privé Slack, et la tâche revient dans la file avec votre réponse jointe. L’exécution suivante lit ainsi la réponse au lieu de reconstituer la question.

Chaque question arrive avec la recommandation de l’agent et le raisonnement qui la fonde : y répondre tient le plus souvent en un clic, pas en un travail de rédaction. Répondre n’est pas approuver : cela rend la tâche à l’agent et ne clôture jamais rien. Une seule question bloquante peut être ouverte par tâche, ce qui évite qu’une boîte de décisions ne devienne le fil de commentaires qu’elle a remplacé.

C’est ce qui rend une routine nocturne digne d’être laissée en marche. Sans cela, la première ambiguïté à 3 h du matin arrête toute la nuit ; avec cela, seule cette tâche est mise de côté et l’agent continue de traiter le reste.

Lancez-le à heures fixes

Done ne fait tourner aucun agent sur ses propres serveurs. Pour que vos tâches soient traitées sans surveillance, quelque chose doit l’appeler, par exemple le planificateur du client MCP que vous utilisez déjà. Tous les clients MCP se connectent de la même façon ; seule la planification change :

Claude — Routines

S’exécute dans le cloud d’Anthropic selon un horaire, avec Done ajouté comme connecteur.

  1. Ajoutez Done comme connecteur sur claude.ai/customize/connectors, avec l’URL du serveur MCP https://trydone.app/mcp. Il doit se trouver sur votre compte claude.ai : une routine ne voit pas les serveurs MCP ajoutés localement dans la CLI.
  2. Ouvrez claude.ai/code/routines et cliquez sur New routine, ou lancez /schedule dans la CLI Claude Code et décrivez ce que vous voulez avec vos mots.
  3. Collez l’un des prompts de Done comme instructions. Une routine s’exécute sans personne pour la surveiller : le prompt doit donc se suffire à lui-même. C’est exactement pour cela que ceux de la vue Prompts sont écrits.
  4. Donnez-lui un déclencheur planifié : toutes les heures, tous les jours, en semaine ou toutes les semaines. Une heure est l’intervalle le plus court autorisé.
  5. Sous Connectors, laissez Done inclus et retirez ceux auxquels cette routine n’a aucune raison de toucher. Créez-la, puis cliquez une fois sur Run now pour suivre la première exécution de bout en bout.

Avant de commencer : Les routines nécessitent une offre Claude payante (Pro, Max, Team ou Enterprise) avec Claude Code sur le web activé.

ChatGPT — Tâches planifiées

Une tâche programmée, qui accède à Done par un connecteur personnalisé.

  1. Ajoutez Done comme connecteur personnalisé en mode développeur, en le faisant pointer vers https://trydone.app/mcp, puis connectez-vous quand il le demande.
  2. Ouvrez une conversation, collez l’un des prompts de Done et demandez qu’il soit planifié : « lance ceci chaque jour de semaine à 8 h ».
  3. Gérez ce que vous avez créé sous Tasks, dans le menu de votre profil. Les tâches ne se déclenchent que sur minuterie, toutes les heures au mieux, et se mettent en pause toutes seules si vous les ignorez assez longtemps.

Avant de commencer : Avec ChatGPT Plus et Pro, les connecteurs MCP personnalisés sont en lecture seule : un agent peut lire votre file d’attente, mais ne peut rien prendre en charge, commenter ni terminer. Pour écrire en retour, il faut une offre ChatGPT Business, Enterprise ou Edu.

Tout le reste — Votre propre planificateur

N’importe quel client MCP, réveillé par l’outil que vous utilisez déjà pour lancer des choses à heure fixe.

  1. Faites pointer le client vers https://trydone.app/mcp, en envoyant votre jeton dans un en-tête Authorization: Bearer.
  2. Demandez à cron, à une planification de CI, à un moteur de workflows (ce à quoi vous faites déjà confiance pour tourner à heure fixe) de démarrer ce client avec l’un des prompts de Done comme instructions.
  3. Donnez à l’exécution un endroit où rendre compte. Chaque prompt de la bibliothèque se termine en écrivant dans Done : le tableau sert de journal, et vous n’avez pas besoin de regarder ailleurs.

Quelle que soit la voie choisie, voici le prompt à lui donner (il est en anglais ; copiez-le tel quel) :

You are my Done task runner. Work my queue through the Done MCP connector only — never touch anything outside my Done account.

Each run:
1. Call list_open_decisions first, then get_digest and list_my_tasks, to see what's assigned to me (the AI agent) and ready. A task whose parked question I've since answered is the cheapest work on the board — the context is written down and the blocker just cleared — so start there.
2. For each ready task, decide what to do:
   - in_progress with plan_approved_at set → its plan is approved, so DO THE WORK now. Read it with get_task (notes_for_agent, acceptance_criteria, description, references), carry it out, and when it's finished call propose_completion with a summary — or complete_task if the task is agent_ok.
   - not_started and small or agent_ok → just do it, then complete_task (agent_ok) or propose_completion.
   - not_started and substantial or ambiguous (multi-step, judgment calls, anything I'd want to sign off on the approach for) → do NOT start it. Call propose_plan with a short plan of how you intend to tackle it, then move on. It waits for my approval and comes back to you once I approve it in Needs you.
3. Report progress by ticking the acceptance criteria with check_criterion as you actually meet each one — not by narrating into comments. Post at most ONE dense comment_on_task per task per run: what you did, what you found, what's left. A running commentary is noise.
4. Hit a real fork — spending money, anything outward-facing (an email, a post, a reply to a customer), anything irreversible — and call ask_decision with your own recommendation, then MOVE ON to the next task. Don't guess, and don't sit there waiting. If you later work the answer out yourself, withdraw_decision rather than leaving a stale question in my queue.
5. If a task was assigned to me but shouldn't be — it needs my accounts, my signature, or my judgment — hand it back with decline_task and a one-line reason. Declining is a valid outcome.
6. Respect the gates: never force a non-agent_ok task to done, and never act on a task that isn't assigned to me.
7. For any task that has sub-steps (a plan) — one you decomposed, or that already had subtasks — call render_plan on it so I get the laid-out plan with progress and an "Open in Done" link.
8. If nothing is ready, stop — don't invent work.

If you're running unattended overnight, wrap the run: call start_run at the top and check_night_budget before picking up each task, so you stop at the caps I set in Settings → Where agents run, and call end_run when you finish.

End with a one-line summary: plans proposed, tasks worked, tasks completed, questions parked.

À chaque exécution, il propose un plan pour toute tâche conséquente et attend, puis il exécute tout ce que vous avez approuvé dans À valider depuis la dernière fois. Vous approuvez, l’agent fait le travail : vous n’avez jamais à lancer une exécution à la main. La même configuration est à un clic dans le panneau Compte (« Mettez un agent IA au travail sur votre file d’attente »).

Remarques

  • Connectez-vous par OAuth (pour les clients qui découvrent /.well-known/oauth-authorization-server) ou avec un jeton bearer longue durée, propre à chaque compte et généré dans l’application. Les deux fonctionnent sur le même point d’accès.
  • Chaque jeton et chaque autorisation sont limités à un seul compte ; il n’existe aucun jeton global ni commun à plusieurs comptes. Les jetons bearer peuvent être restreints davantage, à la lecture seule ou à un seul projet.
  • Régénérer ou révoquer un jeton l’invalide immédiatement.
  • L’offre Gratuit comprend 100 appels d’agent (MCP) par mois ; Pro et Teams sont illimités. Consultez les tarifs.