Skip to main content

keeplog

CI PyPI Python License

Terminal session logger with full-text search.

Records every command + output in your terminal, saves to SQLite, and lets you search instantly.

pip install keeplog
keeplog setup   # auto-start on every terminal
# restart your terminal — it's already recording

Features

  • PTY capture — records full output, not just commands
  • SQLite + FTS5 — instant full-text search across everything
  • fzf integration — interactive fuzzy search with preview
  • Zero config — install and forget, always running in background
  • Two modes — full (capture output) or light (metadata only)
  • Lightweight — no servers, no cloud, no dependencies
  • Cross-platform — macOS + Linux, zsh + bash + fish

Install

pip install keeplog

Or one-liner (installs pip package + sets up auto-start):

curl -fsSL https://raw.githubusercontent.com/rathinadev/keeplog/main/install.sh | sh

Quick Start

# Initialize database
keeplog init

# Start recording manually
keeplog record
# (type commands, then exit)

# Set up auto-start (adds to .zshrc/.bashrc/config.fish)
keeplog setup
# Restart your terminal — recording starts automatically

# Search recorded commands
keeplog search docker
keeplog search "npm install"

# Browse recent
keeplog recent
keeplog get 1    # show full output of command #1

# Stats
keeplog status

Commands

Command Description
record Start recording session
setup Add auto-start hook to shell rc
remove Remove auto-start hook
search <query> Interactive search (fzf if available)
recent Show recent commands
get <id> Show full command details + output
status Show stats
last Show last session
export Export all data as JSON
clear <days> Clear data older than N days
config [key val] Get/set configuration
init Initialize database

Shell Support

keeplog auto-detects your shell ($SHELL) and installs the matching hook:

  • zsh — via ZDOTDIR + preexec/precmd
  • bash — via PROMPT_COMMAND + the DEBUG trap
  • fish — via fish_preexec/fish_postexec events

Configuration

# Set mode to light (metadata only, no output)
keeplog config mode light

# Set retention to 7 days
keeplog config retention_days 7

# View current config
keeplog config

Config file location:

  • macOS: ~/Library/Application Support/keeplog/config.json
  • Linux: ~/.config/keeplog/config.json

How It Works

  1. keeplog record spawns your shell inside a pseudo-terminal (PTY)
  2. Every keystroke and output streams through keeplog
  3. Shell hooks (preexec/precmd) mark command boundaries
  4. Output is stripped of ANSI escape codes and saved to SQLite with FTS5
  5. keeplog search queries the FTS index and pipes results into fzf
Terminal → keeplog record → PTY → your shell
                                ↓
                          SQLite DB → fzf search

Storage

Data is stored locally — no cloud, no servers:

  • macOS: ~/Library/Application Support/keeplog/logs.db
  • Linux: ~/.local/share/keeplog/logs.db

The database and config file are created with 0600 permissions (owner read/write only).

Privacy & Security

In full mode (the default), keeplog records everything that appears in your terminal — including anything you type or that gets printed back, unfiltered. That means:

  • Passwords typed at interactive prompts, API keys, tokens, and secrets pasted or echoed to the terminal will be saved in plaintext in logs.db.
  • keeplog export dumps this data as JSON with no redaction.
  • Anyone with read access to your user account can read logs.db directly with sqlite3.

If this matters to you:

  • Use keeplog config mode light to record only the command, directory, exit code, and timestamp — no output — for a safer default.
  • Set a shorter retention_days so sensitive data doesn't linger (keeplog config retention_days 7).
  • Avoid running secrets-handling commands while a full-mode session is active, or switch to light mode first.

keeplog does not send data anywhere — everything stays in your local SQLite file — but it does not currently redact secrets on your behalf.

Uninstall

pip uninstall keeplog
keeplog remove

Development

git clone https://github.com/rathinadev/keeplog
cd keeplog
pip install -e .
python -m pytest tests/

License

MIT

Release files for keeplog 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for keeplog 1.0.0
File Size Uploaded
keeplog-1.0.0.tar.gz 25.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for keeplog 1.0.0
File Interpreter ABI Platform
keeplog-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 39.4 kB

Release files / keeplog-1.0.0.tar.gz

Download URL keeplog-1.0.0.tar.gz
Size 25.6 kB
Tags Source
SHA-256 checksum
How to use checksums
cf633941f443a4dbfc7ce675d8172b43ae138ef963204e6634f1efc78fc604cd
BLAKE2b-256 checksum
How to use checksums
408e9f940311e8bdb6ee7723a70c4f63ff280a369b4673b87e7e3b7e96a3ebed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / keeplog-1.0.0-py3-none-any.whl

Download URL keeplog-1.0.0-py3-none-any.whl
Size 13.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e85cd73835373cc339b0e85d858e42c1b4dbc99140c876887c90a84353679a38
BLAKE2b-256 checksum
How to use checksums
1694447e7824e77afc04a420ab065443cf13bc6a989174794f387143a51b1f02
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release history Release notifications | RSS feed

1.1.1

2 release files

1.1.0

2 release files

This release

1.0.0 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page