Claude - statusline

Visto que ahora paso más tiempo en Claude Code que en ninguna otra aplicación, es importante tener una buena “statusline” porque ya sabes, no basta con serlo sino que hay que parecerlo.

De serie, Claude Code trae una statusline funcional pero escasa. Según vas usando más y más CC, te vas dando cuenta de que echas en falta cierta información que te acompañe en tu día a día.

Para configurarla, hay que modificar la clave statusline en el fichero %USERPROFILE%\.claude\settings.json.

  "statusLine": {
    "type": "command",
    "command": "python C:/Users/sergio.leon/.claude/statusline.py"
  },

Toda la información sobre la statusline la puedes encontrar en la documentación oficial de Claude Code

Lo que más me ayudó y con lo que entendía que estaba pasando, fue volcar la entrada a disco y ver exactamente el payload recibido:

data = json.loads(sys.stdin.read())
with open(Path.home() / ".claude" / "statusline.json", "w") as f:
    json.dump(data, f, indent=2)

También es cierto que hay proyectos por ahí que son una auténtica maravilla, prueba este, ¡me ha flipado mucho! De hecho, parece haber todo un ecosistema alrededor de la statusline. ¡Quién lo iba a decir!

Sin embargo, todavía me gusta investigar por mí mismo algo de vez en cuando y me tomo la modificación de la statusline como una oportunidad para aprender más sobre Claude Code. No es tan virtuosa como la de sirmalloc, pero es mía y eso me hace valorarla más.

Es verdad que tiene una dependencia de python, pero para mí no es un problema. Además, portar el código a cualquier otro lenguaje ya sabemos sería trivial.

El código de statusline.py lo puedes encontrar aquí

Y el resultado sería algo así:

statusline

  • Se puede configurar un threshold para que te avise cuando el contexto esté ocupado por encima de ese valor.
  • Muestra tanto la rama activa como si estás en un worktree.
    • Tanto el icono de rama como el de worktree usan caracteres unicode, no son dependientes de tener instalada ninguna fuente.
  • El directorio es clickable y te lo abrirá en el explorador de Windows.

Si no sabes qué es clsniff, ya estás tardando https://www.panicoenlaxbox.com/post/clsniff/

No es el objetivo de este post, pero el combo para que la Windows Terminal sea un poco más amigable es:

  • Instalar una Nerd Font, por ejemplo CaskaydiaCove Nerd Font
    • Y configurarla en Windows Terminal
  • Instalar el módulo de PowerShell Terminal-Icons
  • Instalar oh-my-posh
    • Elegir un tema
      • Yo he elegido avit porque soy triste y me gusta una terminal minimalista.
      • Además, descargar el fichero .json porque vamos a modificarlo:
        • "template": "{{ .HEAD }}{{ if .IsWorkTree }} <#FF8C00>\uec7e</>{{ end }} ",
    • ¡Ojo!, oh-my-psh también se puede integrar con CC, pero ya es too much.

Con todo eso, editamos el fichero de perfil de PowerShell code $PROFILE y tendría algo así (si quieres verlo completo está aquí)

oh-my-posh init pwsh --config "$env:USERPROFILE\avit.omp.json" | Invoke-Expression

Import-Module -Name Terminal-Icons

$global:__ompPrompt = $Function:prompt
function prompt {
    $osc = ''
    $loc = $ExecutionContext.SessionState.Path.CurrentLocation
    if ($loc.Provider.Name -eq 'FileSystem') {
        $osc = "$([char]27)]9;9;$($loc.ProviderPath)$([char]27)\"
    }
    "$(& $global:__ompPrompt)$osc"
}

¿Y esa función prompt? ¿para qué vale? Pues vale para inyectar en la shell el current working directory. Sí, ya lo sé, parece muy loco que no lo supiera… tiene más info en este enlace Y aunque esto lo puede hacer también oh-my-posh modificando pwd https://ohmyposh.dev/docs/configuration/general#settings eso implicaría modificar (aún más) el fichero avit.omp.json y en esto prefiero hacerlo por fuera con independencia del tema elegido.

Y todo esto del pwd no es, sino para que cuando uses la acción de duplicar pestaña (Ctrl+Shift+D) se abra en la misma ruta que desde la pestaña que estás duplicando. ¡Vaya tela!

Un saludo!


Ver también