sheets-terminal-spreadsheet

Terminal-based spreadsheet TUI tool written in Go for editing CSV files in the terminal with vim-like keybindings

22 stars

Best use case

sheets-terminal-spreadsheet is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Terminal-based spreadsheet TUI tool written in Go for editing CSV files in the terminal with vim-like keybindings

Teams using sheets-terminal-spreadsheet should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/sheets-terminal-spreadsheet/SKILL.md --create-dirs "https://raw.githubusercontent.com/Aradotso/trending-skills/main/skills/sheets-terminal-spreadsheet/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/sheets-terminal-spreadsheet/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How sheets-terminal-spreadsheet Compares

Feature / Agentsheets-terminal-spreadsheetStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Terminal-based spreadsheet TUI tool written in Go for editing CSV files in the terminal with vim-like keybindings

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Sheets Terminal Spreadsheet

> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.

Sheets is a terminal-based spreadsheet TUI (Terminal User Interface) for viewing and editing CSV files directly in your terminal. It features vim-style navigation, formula support, visual selection, search, undo/redo, and a command mode — all without leaving the terminal.

---

## Installation

### Using Go

```bash
go install github.com/maaslalani/sheets@main
```

### Download Binary

Download a prebuilt binary from [GitHub Releases](https://github.com/maaslalani/sheets/releases).

### Verify Installation

```bash
sheets --help
```

---

## CLI Usage

### Launch the TUI

```bash
sheets budget.csv
```

### Read from stdin

```bash
sheets <<< "ID,Name,Age
1,Alice,24
2,Bob,32
3,Charlie,26"
```

Or pipe from another command:

```bash
cat data.csv | sheets
```

### Read a Specific Cell

```bash
sheets budget.csv B9
# Output: 2760
```

### Read a Cell Range

```bash
sheets budget.csv B1:B3
# Output:
# 1200
# 950
# 810
```

### Modify Cells (Non-Interactive)

```bash
# Set one cell
sheets budget.csv B7=10

# Set multiple cells
sheets budget.csv B7=10 B8=20
```

---

## Navigation Keybindings

### Basic Movement

| Key | Action |
|-----|--------|
| `h`, `j`, `k`, `l` | Move left, down, up, right |
| `gg` | Jump to top |
| `G` | Jump to bottom |
| `5G` | Jump to row 5 |
| `gB9` | Jump to cell B9 |
| `0` | Jump to first column |
| `^` | Jump to first non-empty column in row |
| `$` | Jump to last non-empty column in row |
| `H` / `M` / `L` | Jump to top / middle / bottom visible row |
| `ctrl+u` / `ctrl+d` | Move half page up / down |

### View Alignment

| Key | Action |
|-----|--------|
| `zt` | Align current row to top of window |
| `zz` | Align current row to middle of window |
| `zb` | Align current row to bottom of window |

### Search

| Key | Action |
|-----|--------|
| `/` | Search forward |
| `?` | Search backward |
| `n` | Repeat last search (forward) |
| `N` | Repeat last search (backward) |

### Marks & Jump List

| Key | Action |
|-----|--------|
| `ma` | Set mark `a` at current cell |
| `'a` | Jump to mark `a` |
| `ctrl+o` | Move backward through jump list |
| `ctrl+i` | Move forward through jump list |

---

## Editing Keybindings

### Insert Mode

| Key | Action |
|-----|--------|
| `i` | Edit current cell |
| `I` | Edit from start of cell |
| `c` | Clear cell and start editing |
| `ESC` | Leave insert / visual / command mode |
| `enter` | Commit and move down |
| `tab` | Commit and move right |
| `shift+tab` | Commit and move left |
| `ctrl+n` | Commit and move down |
| `ctrl+p` | Commit and move up |

### Row Operations

| Key | Action |
|-----|--------|
| `o` | Insert row below and start editing |
| `O` | Insert row above and start editing |
| `dd` | Delete current row |

### Copy / Cut / Paste

| Key | Action |
|-----|--------|
| `y` | Yank (copy) current cell |
| `yy` | Yank current row(s) |
| `x` | Cut current cell or selection |
| `p` | Paste current register |

### Undo / Redo

| Key | Action |
|-----|--------|
| `u` | Undo |
| `ctrl+r` | Redo |
| `U` | Undo all changes |
| `.` | Repeat last change |

---

## Visual Mode

Enter visual mode with `v` (cell selection) or `V` (row selection).

| Key | Action |
|-----|--------|
| `v` | Start visual cell selection |
| `V` | Start visual row selection |
| `=` | Insert formula after selected range (e.g., `=\|(B1:B8)`) |

---

## Command Mode

Press `:` to open the command prompt.

| Command | Action |
|---------|--------|
| `:w` | Save file |
| `:w path.csv` | Save to a new file |
| `:e path.csv` | Open another CSV file |
| `:q` | Quit |
| `:wq` | Save and quit |
| `:goto B9` | Jump to cell B9 |
| `:B9` | Jump to cell B9 (shorthand) |

---

## Common Patterns

### Create a New CSV and Edit It

```bash
# Create a CSV with headers
echo "Name,Amount,Category" > budget.csv
sheets budget.csv
```

### Pipe CSV Data and Edit

```bash
# Generate CSV from a database query and edit in sheets
psql -c "COPY (SELECT * FROM sales) TO STDOUT WITH CSV HEADER" | sheets
```

### Script: Update a Cell Programmatically

```bash
#!/bin/bash
# Update Q4 value in financial report
sheets report.csv D4=95000 D5=102000 D6=88000
echo "Updated Q4 values in report.csv"
```

### Script: Extract a Range for Processing

```bash
#!/bin/bash
# Extract column B rows 1-10 and sum them in bash
values=$(sheets data.csv B1:B10)
total=0
while IFS= read -r line; do
    total=$((total + line))
done <<< "$values"
echo "Total: $total"
```

### Script: Read a Specific Cell in a Shell Script

```bash
#!/bin/bash
# Get current budget total from spreadsheet
budget_total=$(sheets budget.csv C15)
if [ "$budget_total" -gt 10000 ]; then
    echo "Budget exceeded!"
fi
```

### Go Integration Example

If building a Go application that generates CSV for use with sheets:

```go
package main

import (
    "encoding/csv"
    "fmt"
    "os"
    "os/exec"
)

func createAndOpenSpreadsheet(data [][]string, filename string) error {
    // Write CSV data
    f, err := os.Create(filename)
    if err != nil {
        return fmt.Errorf("creating file: %w", err)
    }
    defer f.Close()

    w := csv.NewWriter(f)
    if err := w.WriteAll(data); err != nil {
        return fmt.Errorf("writing CSV: %w", err)
    }
    w.Flush()

    // Open in sheets TUI
    cmd := exec.Command("sheets", filename)
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    return cmd.Run()
}

func main() {
    data := [][]string{
        {"Month", "Revenue", "Expenses", "Profit"},
        {"January", "12000", "8500", "3500"},
        {"February", "13500", "9200", "4300"},
        {"March", "11800", "8900", "2900"},
    }

    if err := createAndOpenSpreadsheet(data, "monthly_report.csv"); err != nil {
        fmt.Fprintf(os.Stderr, "Error: %v\n", err)
        os.Exit(1)
    }
}
```

### Go: Read a Cell Non-Interactively

```go
package main

import (
    "fmt"
    "os/exec"
    "strings"
)

func readCell(csvFile, cell string) (string, error) {
    out, err := exec.Command("sheets", csvFile, cell).Output()
    if err != nil {
        return "", fmt.Errorf("reading cell %s: %w", cell, err)
    }
    return strings.TrimSpace(string(out)), nil
}

func readRange(csvFile, cellRange string) ([]string, error) {
    out, err := exec.Command("sheets", csvFile, cellRange).Output()
    if err != nil {
        return nil, fmt.Errorf("reading range %s: %w", cellRange, err)
    }
    lines := strings.Split(strings.TrimSpace(string(out)), "\n")
    return lines, nil
}

func main() {
    total, err := readCell("budget.csv", "B9")
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("Budget total:", total)

    values, err := readRange("budget.csv", "B1:B6")
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("Monthly values:", values)
}
```

---

## Tips for AI Agents

### Suggesting Sheets for CSV Tasks

When a user wants to view or edit CSV files in the terminal, suggest sheets:

```bash
# Instead of cat data.csv
sheets data.csv

# Instead of awk/sed edits for simple changes
sheets data.csv B3=new_value
```

### Formula Insertion Workflow

1. Navigate to the column where you want the formula
2. Enter visual mode with `v`
3. Select the range (e.g., B1:B8)
4. Press `=` to insert formula after the selection: `=|(B1:B8)`

### Efficient Navigation (Vim Users)

Sheets uses vim-style navigation — users familiar with vim can be productive immediately:
- `gg`/`G` for top/bottom
- `hjkl` for movement
- `i`/`c` for insert modes
- `dd` to delete rows
- `u`/`ctrl+r` for undo/redo
- `/` for search

---

## Troubleshooting

### `sheets` command not found

```bash
# Ensure Go bin directory is in PATH
export PATH=$PATH:$(go env GOPATH)/bin

# Or install again and verify
go install github.com/maaslalani/sheets@main
which sheets
```

### File Not Saved After Editing

Use `:w` in command mode to save, or `:wq` to save and quit. Just pressing `q` or `ctrl+c` quits **without saving**.

### TUI Rendering Issues

Sheets relies on terminal capabilities. If the display looks broken:
- Ensure your terminal supports 256 colors or truecolor
- Try a different terminal emulator (iTerm2, Alacritty, Ghostty, WezTerm)
- Check `TERM` environment variable: `echo $TERM`

### Reading Non-CSV Files

Sheets is designed for CSV format. Convert other formats first:

```bash
# Excel to CSV (using Python)
python3 -c "import pandas as pd; pd.read_excel('data.xlsx').to_csv('data.csv', index=False)"
sheets data.csv
```

### Large Files Performance

For very large CSV files, navigate directly to specific cells rather than scrolling:
```
:goto A1000
```
or press `5G` to jump to row 5 directly.

Related Skills

wterm-web-terminal

22
from Aradotso/trending-skills

Web terminal emulator with Zig/WASM core, DOM rendering, and React/vanilla JS bindings

syswatch-terminal-diagnostics

22
from Aradotso/trending-skills

SysWatch is a single-host system diagnostics TUI for macOS and Linux with twelve tabs, plain-English insights, and session scrubbing.

rattles-terminal-spinners

22
from Aradotso/trending-skills

Minimal terminal spinner library for Rust with preset collection and no-std support

ghostling-libghostty-terminal

22
from Aradotso/trending-skills

Build minimal terminal emulators using the libghostty-vt C API with Raylib for windowing and rendering

cmux-terminal-multiplexer

22
from Aradotso/trending-skills

AI-native terminal multiplexer with programmable socket API, full Playwright-equivalent browser automation, and agent team coordination — built for Claude Code and autonomous agent workflows

```markdown

22
from Aradotso/trending-skills

---

zeroboot-vm-sandbox

22
from Aradotso/trending-skills

Sub-millisecond VM sandboxes for AI agents using copy-on-write KVM forking via Zeroboot

yourvpndead-vpn-detection

22
from Aradotso/trending-skills

Android app that detects VPN/proxy servers (VLESS/xray/sing-box) via local SOCKS5 vulnerability, exposing exit IPs and server configs without root

xata-postgres-platform

22
from Aradotso/trending-skills

Expert skill for Xata open-source cloud-native Postgres platform with copy-on-write branching, scale-to-zero, and Kubernetes deployment

x-mentor-skill-nuwa

22
from Aradotso/trending-skills

AI-powered X (Twitter) content strategy skill that distills methodologies from 6 top creators + open-source algorithm data into actionable writing, growth, and monetization guidance.

wx-favorites-report

22
from Aradotso/trending-skills

End-to-end pipeline to extract, decrypt, and visualize WeChat Mac favorites from encrypted SQLite DB into an interactive HTML report.

worldmonitor-intelligence-dashboard

22
from Aradotso/trending-skills

Real-time global intelligence dashboard with AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking