Gestión de sesiones de Pi Agent

El sistema de gestión de sesiones de Pi Agent es una de sus características más potentes.

Este capítulo detalla el guardado, la restauración, la ramificación y la exportación de sesiones.


Mecanismo de almacenamiento de sesiones

Cada conversación se guarda automáticamente como un archivo de sesión, almacenado en formato JSONL en~/.pi/agent/sessions/, clasificados por ruta de proyecto.

El nombre del directorio se obtiene convirtiendo la ruta absoluta del proyecto: las barras se reemplazan por guiones y se envuelve con -- al principio y al final.

El nombre del archivo se forma concatenando la marca de tiempo de creación y el UUID de la sesión.

Cada sesión se organiza internamente como una estructura de árbol, lo que significa que puedes ramificarte en cualquier nodo histórico sin perder el contenido de conversaciones anteriores.

~/.pi/agent/sessions/
└── --Users-ejemplo-projects-ejemplo-demo--/        # 目录名为项目路径,斜杠已替换为连字符
    ├── 2026-08-31T02-40-11-000Z_019fc2a1-93b4-7c22-8d5e-2b3c4d5e6f7a.jsonl    # 时间戳_UUID.jsonl
    ├── 2026-08-31T04-12-38-000Z_2c8f71ba-4a19-4e63-9d02-7f5a6b8c9d0e.jsonl
    └── 2026-08-31T08-55-02-000Z_5e3d92f4-8b26-47ac-a174-9c0d1e2f3a4b.jsonl

Estructura interna del archivo de sesión

La primera línea del archivo de sesión es un metadato fijo que registra la versión del formato de sesión, el ID de sesión, la hora de creación y el directorio de trabajo.

Estos metadatos no tienen campos id ni parentId y no participan en el árbol de conversación.

A partir de la segunda línea, cada línea es una entrada con campos id y parentId, que juntos forman la estructura de árbol.

Los tipos de entrada incluyen message, compaction, branch_summary, label, custom, etc.

Las sesiones creadas con /fork o /clone tienen además un campo parentSession en los metadatos de la primera línea, que apunta al archivo de sesión original.

{"type":"session","version":3,"id":"019fc2a1-93b4-7c22-8d5e-2b3c4d5e6f7a","timestamp":"2026-08-31T02:40:11.000Z","cwd":"/Users/ejemplo/projects/ejemplo-demo"}
{"type":"message","id":"m1","parentId":null,"message":{"role":"user","content":[{"type":"text","text":"帮我实现登录功能"}]}}
{"type":"message","id":"m2","parentId":"m1","message":{"role":"assistant","content":[{"type":"text","text":"好的,我用 JWT 来实现"}]}}

El directorio de sesiones también se puede personalizar; la prioridad de mayor a menor es: el parámetro --session-dir, la variable de entornoPI_CODING_AGENT_SESSION_DIRy la opción en settings.jsonsessionDir。


Opciones de sesión al inicio

Controla el comportamiento de la sesión al inicio mediante parámetros de línea de comandos:

$ pi -c
Resumed session abc123-def456 (42 messages, model claude-sonnet-4-5)

$ pi -r
┌ 选择要恢复的会话:
│ > abc123  快速审查      3 分钟前
│   def456  重构认证模块  2 小时前
└

$ pi --session ~/.pi/agent/sessions/--Users-ejemplo-projects-ejemplo-demo--/2026-08-30T09-15-04-000Z_019fbb5d-7a2e-7f31-b5c4-1a2b3c4d5e6f.jsonl
Resumed session 019fbb5d-7a2e-7f31-b5c4-1a2b3c4d5e6f

$ pi --session abc123
Resumed session abc123-def456

$ pi --fork abc123
Forked to session 9f2e7a01-5c48

$ pi --name "重构认证模块"
Session renamed: 重构认证模块

$ pi --no-session
Temporary session (will not be saved)

Comandos de gestión de sesiones

Una vez en el modo interactivo, los siguientes comandos cubren la gestión diaria de sesiones.

ComandoFunciónCaso de uso
/resumeExplorar y reanudar sesiones históricasCambiar a una conversación anterior y continuar trabajando
/newIniciar nueva sesiónIniciar una tarea completamente nueva sin relación con el historial
/name nombreEstablecer el nombre de la sesiónPoner un nombre fácil de recordar a la sesión
/sessionVer información de la sesiónVer la ruta del archivo, el número de mensajes, el uso de tokens y el costo
/treeAbrir el navegador de árbol de sesionesSaltar a cualquier nodo del árbol de conversación
/forkBifurcar sesiónCrear una nueva sesión a partir de un mensaje de usuario anterior
/cloneClonar sesiónCopiar la rama activa actual a un nuevo archivo de sesión
/export archivoExportar como archivo HTML o JSONLArchivo local o compartir sin conexión
/shareCompartir sesiónSubir como GitHub Gist y generar un enlace compartible

Selector de sesiones /resume

Al escribir /resume o iniciar con pi -r, se abre el selector de sesiones del proyecto actual.

En la lista, escribe caracteres directamente para filtrar sesiones; las demás teclas de operación son las siguientes:

OperaciónTeclaDescripción
Filtrar sesionesEscribir caracteres directamenteFiltra la lista de sesiones del proyecto actual en tiempo real según lo escrito
Alternar visualización de rutaCtrl+PMostrar u ocultar la ruta del directorio de trabajo de la sesión
Alternar ordenCtrl+SAlternar entre modos de ordenamiento
Mostrar solo sesiones con nombreCtrl+NFiltrar sesiones que tienen un nombre configurado
RenombrarCtrl+RModificar el nombre de la sesión seleccionada
EliminarCtrl+DSe ejecuta tras la confirmación; si el sistema tiene el comando trash, se mueve a la papelera en lugar de eliminarse directamente.

Árbol de sesiones (/tree)

Esta es la característica más distintiva de Pi Agent: las sesiones se almacenan en una estructura de árbol y puedes ramificarte en cualquier nodo histórico.

Estructura del árbol

A continuación se muestra una estructura de árbol de sesión típica:

├─ user: "帮我实现一个登录功能..."
│  └─ assistant: "好的,我来实现..."
│     ├─ user: "用 JWT 方案..."
│     │  └─ assistant: "使用 JWT 实现..."
│     │     └─ user: "测试通过了"  ← 当前活跃分支
│     └─ user: "还是用 Session 方案..."
│        └─ assistant: "使用 Session 实现..."

En este ejemplo, partiendo del mismo punto inicial, exploras dos enfoques: JWT y Session. Las conversaciones de cada enfoque se conservan por completo.

Operaciones del navegador de árbol

Después de abrir /tree, usa las siguientes teclas para moverte y seleccionar en el árbol.

OperaciónAtajo de tecladoDescripción
Moverse arriba/abajo↑/↓Mueve el cursor entre las entradas visibles
Cambiar de página←/→Página arriba/abajo
Plegar/desplegarCtrl+←/Ctrl+→ o Alt+←/Alt+→Plegar/desplegar segmentos de rama o saltar
Establecer etiquetaShift+LEstablecer una etiqueta para el nodo seleccionado
Alternar marca de tiempoShift+TMostrar/ocultar la marca de tiempo de las etiquetas de entrada (las etiquetas se establecen con Shift+L)
Confirmar selecciónEnterSeleccionar el nodo actual
CancelarEscape / Ctrl+CSalir del navegador de árbol
Alternar modo de filtradoCtrl+OCicla entre los modos de filtrado (solo tiene efecto dentro del navegador /tree)

Modos de filtrado

El modo de filtrado determina qué entradas se muestran en el navegador de árbol; se alterna con Ctrl+O.

ModoContenido mostrado
defaultVista predeterminada, pliega los detalles de las llamadas a herramientas
no-toolsOculta todas las llamadas a herramientas y sus resultados
user-onlyMostrar solo mensajes de usuario
labeled-onlyMostrar solo entradas etiquetadas
allMostrar todas las entradas

Seleccionar un mensaje de usuario rellena el área de edición con su texto, lo que te permite volver a editarlo y enviarlo para crear una nueva rama.

Seleccionar una respuesta de IA o una llamada a herramienta salta directamente a esa posición, permitiéndote continuar la conversación desde allí.


Diferencias entre /tree, /fork y /clone

Los tres permiten volver a una posición histórica; la diferencia está en si se genera un nuevo archivo de sesión y en el rango de conversación que se puede ver.

ComandoSalidaVistaUso típicoResumen de ramasResumen en una frase
/treeEl mismo archivo de sesiónÁrbol de conversación completoExplorar alternativas en la misma sesiónResumen opcionalGestionar varias líneas de pensamiento juntas para facilitar la comparación
/forkNuevo archivo de sesiónMostrar solo mensajes de usuarioIniciar una nueva sesión desde un mensaje anteriorNingunoReiniciar desde un punto histórico, completamente independiente
/cloneNuevo archivo de sesiónRama activa actualCopiar el trabajo actual y continuarNingunoHacer una copia antes de continuar para tener una salida de seguridad

Resumen de ramas

Cuando saltas de una rama a otra mediante /tree, Pi Agent puede generar un resumen de la rama abandonada.

Este resumen se adjunta a la nueva ubicación para que sepas qué hizo la rama anterior:

ModoComportamientoCaso de uso
No generar resumenSaltar directamente sin conservar ninguna información de la rama abandonadaLos intentos abandonados no tienen valor para conservar
Resumen predeterminadoUsar el prompt predeterminado para que la IA resuma la rama abandonadaSolo quieres una idea general de lo que se hizo antes
Resumen personalizadoEspecifica el enfoque y la IA resume según tus necesidadesNecesitas extraer conclusiones específicas, como los errores encontrados

Puedes, en~/.pi/agent/settings.jsoncontrolar el comportamiento del resumen:

Ejemplos

{
  "branchSummary": {
    "reserveTokens": 16384,
    "skipPrompt": false
  }
}

ConfiguraciónskipPromptEstablecer como true permite omitir la pregunta de «¿generar resumen?» durante la navegación con /tree.

Al omitir la pregunta, no se genera resumen por defecto y se salta directamente a la posición de destino.


Exportar y compartir sesiones

La sesión se puede exportar a un archivo local, o subir directamente para generar un enlace de compartir.

Exportar como HTML

La exportación genera una página de un solo archivo que se puede abrir directamente en el navegador, adecuada para visualización sin conexión.

# 导出到默认位置
/export

# 导出到指定文件
/export ~/Desktop/my-session.html

Compartir como GitHub Gist

Cuando no quieras subir archivos, usa el comando /share para generar un enlace en línea.

/share

Después de ejecutarlo, se creará un GitHub Gist privado y se generará un enlace HTML compartible.

Exportación desde línea de comandos

También se pueden exportar sesiones existentes sin entrar en el modo interactivo.

$ pi --export session.jsonl output.html
Exported to output.html (128 KB)

Si trabajas en un proyecto de código abierto y deseas publicar la sesión con fines de investigación, puedes consultarpi-share-hfla herramienta, que puede publicar la sesión en el conjunto de datos de Hugging Face.

Otras extensiones