Una volta collegato uno strumento IA (Collegare uno strumento IA), puoi rendere stabile la collaborazione: con lo skill worker incluso, il tuo agente lavora in autonomia sulla tua cartella dati, su richiesta o in modo continuativo in background, così collaborate quasi in tempo reale.
Una base di attività comune per te e i tuoi agenti
TandemLoop è entrambe le cose: il tuo sistema personale per gestire la tua vita e i tuoi progetti, e una base di attività condivisa su cui collabori con agenti IA di ogni tipo. Poiché tutto si trova come semplici file nella cartella dati, questa cartella dati è la verità comune: tu pianifichi e decidi, uno o più agenti leggono lo stesso stato, propongono e completano ciò che è stato loro assegnato. Nessun agente è integrato in modo fisso, nessuno è esclusivo: puoi cambiare o combinare gli strumenti, e tutti continuano a lavorare sullo stesso insieme di dati.
Lo skill worker
Lo skill worker è un’istruzione compatta che dai al tuo strumento IA. Descrive un ciclo di lavoro ricorrente:
- raccogliere e mettere in pratica per prime le tue risposte alle sue restituzioni,
- trovare le attività disponibili assegnate
all’agente (
assigned_to: ai) e svolgerle in ordine di priorità, - controllare le proposte aperte (se attivate) per verificare se hai lasciato nuovo feedback e rivederle,
- restituirti i risultati da verificare o con una domanda.
Rispetta rigorosamente il contratto di lavoro di
AGENTS.md: senza proposte crea nuovi elementi e modifica
direttamente ciò che esiste già, in modo tracciabile nella cronologia
delle tue attività, ma elimina solo su tua richiesta e non completa né
abbandona di sua iniziativa le tue attività; con le proposte suggerisce
tutto ciò che è strutturale come proposta. Il controllo
resta a te.
Di ritorno dall’agente
Se affidi attività all’agente, le ricevi anche indietro: se ha preparato qualcosa, ti restituisce l’attività da verificare; se gli serve una decisione, un’informazione o del materiale, ti pone una domanda. Ogni restituzione contiene una nota dell’agente: cosa ha fatto, dove si trova il risultato e cosa devi fare tu, oppure la sua domanda.
Dove vedi le restituzioni:
- Nella barra laterale, sotto l’Inbox, trovi Di ritorno dall’agente con il numero di restituzioni aperte e, sotto, appena ce ne sono, separate, Da verificare, Domanda e Presso l’agente. Su iPhone è il pannello Dall’agente.
- Ovunque compaia l’attività (nei progetti, nelle viste, nella bacheca, nella tabella, nel calendario) ha un simbolo proprio: un fumetto con un segno di spunta (da verificare) o con un punto interrogativo (domanda). Un clic sul simbolo mostra la nota formattata con link cliccabili, insieme alle risposte possibili.
- Nei dettagli dell’attività la restituzione compare in cima.
Come rispondi, direttamente nell’elenco, nella finestra dal simbolo, nei dettagli o nel menu contestuale:
| Risposta | Effetto |
|---|---|
| Accetta (con Da verificare) | L’attività è completata; resta annotato che l’ha completata l’agente e che tu l’hai accettata |
| Fai rielaborare (con Da verificare) | Torna all’agente con un breve commento |
| Rispondi (con Domanda) | La tua risposta va all’agente e l’attività torna a lui |
| Prendi in carico | L’attività viene assegnata a te |
| Abbandona attività | L’attività viene abbandonata |
Puoi annullare ogni risposta con Annulla nell’avviso
in basso. Ogni risposta finisce, insieme al commento o alla risposta
scritta, nella cronologia dell’attività; così lo scambio resta
tracciabile: chi ha detto cosa e quando. Al ciclo successivo l’agente
riconosce la tua risposta senza ambiguità e si occupa per prime delle
rielaborazioni e delle risposte. Nelle viste puoi filtrare per lo stato
Da verificare o Domanda, per @is_handback
e per la tua risposta; nella bacheca entrambi compaiono come colonne
proprie accanto ad Attivo.
Presso l’agente: l’agente funziona al di fuori di
TandemLoop, quindi l’app non può avviarlo. Finché non riprende la tua
rielaborazione o la tua risposta, l’attività compare in Di
ritorno dall’agente sotto Presso l’agente, con
il tempo trascorso dalla tua risposta e il momento in cui l’agente ha
lavorato l’ultima volta (lo annota a ogni ciclo in
_config/agent.yaml). Avvia allora il tuo agente o dagli la
frase adatta con Copia incarico. Non appena riprende
l’attività, questa scompare da lì e ricevi una notifica. Se il tuo
agente viene eseguito regolarmente, ad esempio tramite una
pianificazione, non devi fare nulla.
Come l’agente restituisce le attività è descritto in
AGENTS.md. Lì trovi il formato dei file
(status: needs-review o needs-input e la nota
come voce della cronologia). Un agente può scriverlo e leggerlo senza
strumenti aggiuntivi, anche mentre l’app è chiusa.
Installazione: copia il testo e passalo all’agente
Installi lo skill passando il suo testo al tuo strumento: nessun download, nessun file di configurazione.
- Indirizza lo strumento sulla cartella dati (vedi Collegare uno strumento IA).
- Copia il testo dello skill, per intero, dalla sezione Il testo dello skill da copiare alla fine di questo capitolo.
- Passalo allo strumento. Incolla il testo nel tuo
strumento IA. La prima riga del testo indica allo strumento di
trasformarlo in uno skill riutilizzabile chiamato
tandem-worker: non devi spiegare altro. - Richiamalo. Poi avvii un ciclo con
/tandem-worker(o con la forma di richiamo del tuo strumento).
L’istruzione è nel testo. Poiché l’istruzione “trasformalo in uno skill” si trova già all’inizio del testo copiato, basta incollarlo una volta per intero. Gli strumenti con un proprio sistema di skill (ad es. Claude Code/Cowork, OpenClaw, Hermes Agent) lo salvano poi in modo permanente.
Funzionamento continuo: quasi in tempo reale
Invece di avviare ogni ciclo a mano, puoi far eseguire lo skill ripetutamente. Più breve è l’intervallo, più la collaborazione si avvicina al tempo reale: crei un’attività o scrivi un feedback in una proposta, e poco dopo il tuo agente reagisce. Il modo esatto dipende dallo strumento:
| Strumento | Funzionamento continuo (esempio) |
|---|---|
| Claude Code / Cowork | comando loop con intervallo, ad es.
/loop 10m /tandem-worker |
| Codex CLI | esecuzione autonoma con la modalità /goal o
un’esecuzione --full-auto che ripete lo skill |
| OpenClaw | cron job pianificato che avvia lo skill a intervalli |
| Hermes Agent | è comunque sempre attivo (24/7): fai eseguire lo skill nella sua pianificazione |
| Generico | una voce cron o un piccolo script che richiama periodicamente il tuo
strumento con /tandem-worker |
La sintassi esatta e la disponibilità di questi meccanismi di loop dipendono dal singolo strumento, non da TandemLoop: in caso di dubbio consulta la sua documentazione.
Non far scrivere più agenti contemporaneamente. Se più cicli o più agenti modificano in parallelo la stessa cartella dati, soprattutto se è sincronizzata tramite cloud, possono nascere copie in conflitto o modifiche doppie. Fai scrivere un solo agente alla volta e non scegliere un intervallo più breve di un ciclo tipico. Vedi anche La cartella dati e il formato dei file.
Collegare agenti diversi
La procedura è la stessa per ogni strumento agentico: dare accesso
alla cartella dati, indicare AGENTS.md, passare lo skill
worker. Due esempi oltre a quelli citati nel capitolo precedente:
- OpenClaw: un agente personale open source che legge e scrive file locali, ha un proprio sistema di skill ed esegue attività pianificate con cron. Lo indirizzi sulla tua cartella dati e gli dai lo skill worker.
- Hermes Agent: un agente open source sempre attivo, con accesso ai file locali e un proprio concetto di skill. Può seguire la cartella dati 24 ore su 24.
Poiché tutti usano la stessa cartella dati e lo stesso contratto di
lavoro (AGENTS.md), puoi combinare o cambiare agenti:
finché ne scrive uno solo alla volta, la vostra base di attività comune
resta coerente.
Il testo dello skill da copiare
Copia per intero il testo seguente e passalo al tuo strumento IA. (È
identico al file modello incluso
docs/agent-skills/tandem-worker.md.)
# /tandem-worker—Autonomous work cycle for TandemLoop
> **To the AI tool receiving this text:** Turn the following into a reusable skill (or a
> saved instruction / slash command) named `tandem-worker`. Run it whenever I say
> `/tandem-worker`—once or periodically in a loop. Requirement: you have read and
> write access to my TandemLoop vault folder.
One pass of an autonomous work cycle for a TandemLoop vault. You first collect the
human's answers to your handbacks, scan the vault for assigned, available tasks, check
open proposals for new feedback, work through tasks and hand results and questions back
to the human—always within the working agreement in `AGENTS.md`.
---
## Required reading
Read these files **once per session** (not on every pass). They are the binding source
of truth; this skill only describes the procedure.
| File | Provides |
|------|----------|
| `AGENTS.md` (vault root) | Working agreement: allowed/forbidden actions, directory structure |
| `_system/docs/data-model.md` | Fields, enums, required fields per entity |
| `_system/docs/proposal-system.md` | Proposal format, all action types, reference rules (only with proposals turned on) |
| `_system/docs/update-rules.md` | Write permissions, decision tree |
---
## Core principle
Tandem: the human sets the direction, the AI provides the power. Control always stays
with the human. Whether proposals are turned on is stated in `AGENTS.md`. This results in
three channels:
- **Allowed directly:** maintain the content of tasks with `assigned_to: ai` (title, body,
`status`, date fields, `waiting_for`, `tags`, `delegation`, `repeat`, custom
attributes). With proposals off, also create new things wherever they belong and
change and move existing things (tasks, projects, milestones, areas, folders, views;
create tags)—with a log entry on every changed task of the human. With proposals on,
only new tasks in `_inbox/`. In both cases the exceptions in `AGENTS.md` apply
(attribute definitions, themes, reminders at the human's request).
- **Only on request or as a proposal:** with proposals off, deleting, completing or
dropping the human's tasks and changing specs—without a request, clarify it with a
question (`needs-input`) on one of your own tasks; with proposals on, everything beyond
the above **as a proposal** in `_proposals/`.
- **Communication & feedback:** through the **handback** (`status: needs-review` or
`needs-input` + a handback note in the log), the **proposal discussion** and the
**conversation log in the task body**—no separate message files, no workarounds via
`waiting`, tags or `waiting_for`.
Never perform the forbidden actions listed in `AGENTS.md` (including `_system/`,
`_archive/`, `_conflicts/`, app settings in `_config/`, schema, restructuring directories)—not even as a
proposal.
---
## Phase 1: Orientation
First record your run: write `_config/agent.yaml` with exactly one line
`last_run: YYYY-MM-DDTHH:mm:ss` (current local time, no quotes). The app uses it to show
the human when you last worked.
### 1a) Collect the human's answers (before any new work)
- **Returns:** all tasks with `assigned_to: ai`, `status: active` and
`handback_reply: revise` or `handback_reply: answered`. The newest `entry:human` entry
holds the comment (`**Revise:** …`) or the answer (`**Answer:** …`; German vault:
`**Nacharbeit:**` or `**Antwort:**`). Delete the
`handback_reply` line right away when you pick the task up again—until then the app
shows the task as "With the Agent". → Highest priority in phase 2.
- `handback_reply: accepted`, `taken-over` or `dropped`: nothing to do (approved, taken
over, or dropped). Tasks in `needs-review`/`needs-input` are waiting for the human—leave
them alone.
- Read **open proposals** in `_proposals/` (only with proposals turned on). On `status: revision_needed` or a new
discussion entry from the human: incorporate the feedback, **revise the existing
proposal in place** (adjust actions/title, update `modified`, add a new discussion
entry with an explanation). Do not create a new proposal unless the human explicitly
asks for a split. → Highest priority in phase 2.
- Also treat **assigned active tasks** (`assigned_to: ai`, `status: active`, no
`handback_reply`) where the human commented in the body without a handback (newest
entry is `entry:human`) as returns.
### 1b) Determine available tasks
A task is available when **all** conditions are met:
1. **Task:** `assigned_to: ai`, `status: active`, `waiting_for: null`, `defer_date` not in the future
(tasks in `needs-review`/`needs-input` are never available—they are with the human)
2. **Project** (if any): `status: active`
3. **Milestone** (if any): `status: active`
4. **Sequence:** with `project_type: sequential`, formally only the first active task
Also scan `_inbox/` for tasks with `assigned_to: ai`.
**Think from the project goal, not from the task list.** Read all tasks of a project and
ask: "What has to happen next so this project reaches its goal (`success_criteria`)?"
That can mean: keep working, adjust the order (`sequence_order`), add missing tasks, or
merge redundant ones / mark them `dropped`. The task list is a tool; the project goal is
the truth. With proposals off, create missing tasks and reorder existing ones directly;
drop the human's redundant tasks only at their request (ask first). With proposals on, such adjustments
go through a proposal.
---
## Phase 2: Prioritization
Order of the available tasks:
1. **Returns** with feedback (from 1a)—always first
2. **Overdue**—`due_date` in the past
3. **Today**—`do_date` = today
4. **Delegation**—`do` before `draft` before `ask`
5. **Sequence**—lower `sequence_order` first
Choose by **complexity budget**, not by a fixed limit:
| Complexity | Examples | Share of budget |
|------------|----------|-----------------|
| Light | Fix a field, short research, vault maintenance | ~10% |
| Medium | Analysis, draft concept, compare options | ~30% |
| Heavy | Extensive concept, multi-step research, code feature | ~50% |
**Goal: 3–5 tasks per pass** (e.g., 1 heavy + 2–3 light, or 2 medium + 2 light).
Returns count as one task and do not block the pass.
**Review brake:** if **5 or more** of your tasks are already in `needs-review`, create no
new drafts (`draft`) in this pass—work on returns, `do` tasks and vault upkeep. The human
should not get more reviews than they can handle.
---
## Phase 3: Execution
For each task (or a related group of tasks in the same project):
1. **Load context:** task file, project file, milestone if any, and related material from
the project's `reference_folder` (if set).
2. **Solve the task** according to its type:
| Task type | Approach |
|-----------|----------|
| Concept / strategy / research / analysis | Save the result as a file in the project's `reference_folder` (or, if none is set, summarize it in the task body) |
| Vault work | Carry it out directly on the assigned task (within the allowed fields) |
| Code | Own branch (`ai/<feature>`), work and commit locally there—never on `main`, no push without instruction |
**Obstacles are tasks.** Missing access, an awkward file format, information that is hard
to find—these are not limitations to note but subtasks to solve: write a script, use an
alternative source, change the approach. "Can't be done" is not an answer. The only
acceptable answers are: **"Done."** or **"I need X from the human to continue."**—the
latter as a question (`needs-input`, see phase 4).
> **Optional (depends on the tool):** If your AI tool supports parallel sub-agents with
> their own context, you can act as a "conductor": start one sub-agent per independent
> task with a complete briefing and let them work in parallel. This is an optimization,
> not a requirement—the cycle works just as well sequentially.
---
## Phase 4: Completing each task
Immediately after finishing a task (do not batch)—using TandemLoop's native mechanisms:
| Delegation | Completion |
|------------|------------|
| `do` | Task → `status: completed` (+ `completed_date`, `completed_by: ai`). Log entry in the body. Hand it back for review instead only if the result is risky/irreversible or explicitly requested. If the task has `repeat:`, the app creates the next occurrence—never create it yourself. |
| `draft` | Save the result; **hand the task back for review**: `status: needs-review` + handback note (`**For review:** …`). Never `completed` yourself. |
| `ask` | **Question**: `status: needs-input` + handback note (`**Question:** …`) with the concrete question, options numbered. |
| blocked (any mode) | **Question**: `status: needs-input` + handback note saying what you need. |
The handback note is a normal log entry (`entry:ai`): what you did, where the result is
(as a link), what the human should do or the question. In a German vault it starts with
`**Zur Prüfung:**` or `**Rückfrage:**`. Delete an existing
`handback_reply` line when handing back. Exact format and example: `AGENTS.md`,
"Handing a Task Back to the Human".
Update `modified` on every change. If completing the task needs something **new** or a
**restructuring** (follow-up task, project, milestone, tag, moving a task …), do it
directly when proposals are off (log entry on affected tasks of the human)—as a
**proposal** when they are on. Never **delete** without an explicit request.
**Conversation log in the task body** (format exactly as in `AGENTS.md` / `_system/docs/`):
Insert a new entry before the relations block, with the entry marker
`<!-- entry:ai:YYYY-MM-DDTHH:mm:ss -->`, the heading as given in `AGENTS.md` (English
vault: `## AI agent — YYYY-MM-DD`, German vault: `## KI-Agent — D.M.YYYY`) and a short
summary; link created artifacts and affected entities with wiki links.
---
## Phase 5: Next-action check
After execution, check for each affected project: **Does it still have a clear next
action?**
| Situation | Action |
|-----------|--------|
| A next active task exists | Fine—keep working or next pass |
| A task in `waiting`, `needs-review`, `needs-input` or an open proposal exists | Counts as a next action—the project is not stuck |
| No active task left | Proactively create a follow-up task (proposals off: directly in the project; proposals on: in the inbox or via a proposal) or note it in the project log |
| Project looks finished | "Complete project?" for a decision—as a proposal, or with proposals off as a question (`needs-input`) on one of your own tasks |
**No project may be left hanging without a next action.**
---
## Phase 6: Proactive
If capacity remains after the assigned tasks: **act instead of asking**, within the
working agreement.
- **Obviously right** → do it directly (if allowed) or as a proposal
- **Direction decision needed** → hand it back for review (`needs-review`) or as a proposal
- **Affects the human's life or external relationships** → ask (`needs-input`)
Proactively created entities carry `created_by: ai`. Make larger actions traceable in the
task/project log.
---
## Limits
Within the vault and the code repositories, the agent has wide freedom. Hard limits:
- **External communication**—no emails, messages or posts without instruction
- **`git push`**—only on explicit instruction (local commits and branches are free)
- **Deleting, completing or dropping the human's tasks, changing specs**—only on explicit
request; restructuring as a proposal with proposals on, traceable with proposals off
(log entry, summary)
- **Forbidden areas**—`_system/`, `_archive/`, `_conflicts/`, app settings in `_config/`,
schema, directory structure (see `AGENTS.md`)
- **Private content**—personal notes/reflections remain reserved for the human
---
## Code projects: branch workflow
When a task involves code:
1. **Always a separate branch**—`ai/<feature-name>`
2. **Local commits are free**—no push without instruction
3. **Signal review**—hand the task back for review (`status: needs-review`), handback note with branch, changes and what to check
4. **The human decides on the merge**