Synthèse automatique
Gère un magasin de tâches local en markdown (un fichier par tâche) avec revendication atomique par sentinelle O_EXCL, rafraîchissement TTL et classification HITL/AFK.
Points forts
- Protocole de verrouillage POSIX concret (O_EXCL pour le test-and-set, rename(2) pour les mutations) évitant les revendications concurrentes entre agents
- Séparation nette des responsabilités : le skill ne possède que le schéma et le protocole fichiers, l'intake et le triage sont délégués
- Contrat d'interface explicite via une CLI unique avec sous-commandes documentées et événements émis
- Porte de sélection (pick gate) claire qui interdit toute prise de tâche non triée ou verrouillée
Limites
- Fortement lié à l'écosystème : suppose des conventions de branches (holding branch, worktrees) et un dossier partagé via lien symbolique
- Pas de graphe de dépendances typé, de bail d'écriture ni de priorité/échéance — ajoutés seulement sur besoin démontré
- Nécessite Python3 et le chemin fixe ~/.agents/skills/mentat-tasks/scripts/tasks.py, donc peu portable en l'état
À utiliser quand plusieurs agents ou sessions parallèles doivent se coordonner sur une file de tâches locale sans serveur ni base de données.
À éviter si vous cherchez un gestionnaire de tâches riche (dépendances, priorités, estimations) ou une intégration avec un outil externe comme GitHub Issues ou Jira.
Analyse de sécurité
SûrThe allowed-tools declaration is tightly scoped to a single python3 script under the skill's own directory, and the documented operations are all local filesystem mutations (create/claim/refresh/done) using standard POSIX primitives. There are no destructive commands, no network calls, no secret/token exfiltration, no obfuscated payloads, and instructions are transparent. The only residual concern is that the actual script contents are not shown and the cross-repo symlink is a deliberate but broad filesystem action; neither rises to a destructive or exfiltrating capability.
- •The referenced implementation (scripts/tasks.py, lib.support.frontmatter.mutate) is not included in the SKILL.md, so its actual behavior cannot be fully audited from the listing alone.
- •Uses one-time symlink of ~/.mentat/tasks into each repo's .mentat/tasks, which shares task data across repositories (intentional, but broadens data visibility).
Exemples
Crée une nouvelle tâche pour ajouter la validation d'email au formulaire d'inscription, liée au plan PRD-004, avec des critères d'acceptation en checklist.Liste les tâches en statut todo, choisis une tâche AFK non verrouillée et revendique-la avec un TTL de 600 secondes pour l'agent claude-session-2.La tâche T007 a un claim_expires_at dépassé ; libère-la puis revendique-la à nouveau pour l'agent claude-session-5 avec un TTL de 900 secondes.name: mentat-tasks description: Local md task store. Atomic claim, TTL refresh, vertical-slice + HITL/AFK doctrine. allowed-tools: Bash(python3 ~/.agents/skills/mentat-tasks/scripts/tasks.py *)
mentat-tasks
Manage a local markdown task store backed by POSIX atomics. No server, no database, no binary. Each task is a file; each claim is a lock sentinel.
Layout
Tasks live at <repo>/.mentat/tasks/<ID>-{plan-ref}.md. Cross-repo unified view: ln -s ~/.mentat/tasks .mentat/tasks (user runs once).
Board-home vs worktree separation (ADR-0002): task files live on the holding branch. Chunks operating in worktrees write status back via the atomic protocol below.
Task file schema
---
id: T001
status: todo # todo | in-progress | review | done | wontfix
kind: HITL # HITL | AFK — vertical-slice classification (required before pick)
claimed_by: "" # agent id or empty
claim_expires_at: "" # RFC3339; empty if unclaimed
created_at: 2026-06-06T00:00:00Z
---
Body sections:
- Parent — plan or PRD link.
- What to build — one paragraph.
- Acceptance criteria — bulleted checklist.
- Blocked by — prose, free-form.
Invocation
All operations route through scripts/tasks.py. Set MENTAT_TASKS_DIR to override the default .mentat/tasks/ dir.
| Subcommand | Args | Description |
|---|---|---|
| next-id | — | Print next T### |
| create | {plan-ref} | reads stdin | Create task file from stdin body |
| claim <file> <agent> <ttl_s> | — | Atomic claim via O_EXCL lock sentinel |
| release <file> | — | Release claim, restore todo |
| refresh <file> <ttl_s> | — | Bump claim_expires_at |
| done <file> | — | Terminal state: done |
| wontfix <file> | — | Terminal state: wontfix |
| list [--status <s>] | — | Enumerate tasks as TSV (id, status, kind, claimed_by) |
Atomic-write invariant
All frontmatter mutations use lib.support.frontmatter.mutate — tmp+os.replace same-fs rename (POSIX rename(2)). Claims use os.open(O_CREAT|O_EXCL) for exclusive create — correct POSIX primitive for test-and-set. The lock sentinel (.lock) is separate from the content file so rename never rebinds the guard inode.
Pick gate
Pick only if:
statusistodo, orin-progresswithclaim_expires_at < now(stale — release then re-claim).kindis set (HITLorAFK). Never pick untriaged.- No
.locksentinel exists for a non-expired claim.
Events emitted
| Event | Payload |
|---|---|
| task_created | {id, slug} |
| task_claimed | {id, agent, expires_at} |
| task_released | {id} |
| task_resolved | {id} |
| task_canceled | {id} |
Boundary with other skills
Intake skill → writes task via mentat-tasks create.
triage → mutates kind + status.
mentat-prd → references task ids as T### in prose.
mentat-tasks owns schema + filesystem protocol only.
Deferred
Typed dep graph, touches: write-set lease, priority/tags/due/estimate. Add only on demonstrated need.
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/mentat-tasks-ms2s7bye/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/mentat-tasks-ms2s7bye' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/mentat-tasks-ms2s7bye/download' --output '.skill-downloads/mentat-tasks-ms2s7bye/SKILL.md.part' && mv '.skill-downloads/mentat-tasks-ms2s7bye/SKILL.md.part' '.skill-downloads/mentat-tasks-ms2s7bye/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Outils déclarés par l’auteur (à vérifier dans votre agent) : Bash(python3 ~/.agents/skills/mentat-tasks/scripts/tasks.py *)
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/mentat-tasks-ms2s7bye/SKILL.md' && test -s '.skill-downloads/mentat-tasks-ms2s7bye/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/mentat-tasks' && cp -R '.skill-downloads/mentat-tasks-ms2s7bye' '.claude/skills/mentat-tasks'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/mentat-tasks-ms2s7bye'openskills read 'mentat-tasks-ms2s7bye'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/mentat-tasks-ms2s7bye/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Lecteur PDF
Productivite
Lit et extrait le texte de fichiers PDF (rapports, contrats, tableurs). Gère les fichiers locaux, les URL et les pièces jointes WhatsApp. Utilisez-le dès qu'un contenu PDF est nécessaire, même sans demande explicite.
Workflows de messagerie Discord
Productivite
Utilisez l'outil message pour envoyer, modifier et modérer des messages Discord avec des composants interactifs.
Aperçu interactif des verdicts
Productivite
Générer un aperçu HTML interactif des verdicts (garder/supprimer) pour la revue par le mainteneur, puis traiter le JSON de retour.