metapet
metapet is a command-line tool, pet, for keeping notes on side-project ideas. Each
idea is a Markdown file with YAML frontmatter. An idea has a stage (seed, sketch,
spec, building, shipped or shelved), and moving it to a new stage asks that stage's
questions, such as what problem it solves or how it could work.
Installation
uv tool install metapet
or pipx install metapet. metapet needs Python 3.11 or newer and installs a command
called pet. To try it without installing, run uvx --from metapet pet.
Usage
Run pet init once to create the data folder. Then add an idea with a name, a tag
and a short description:
$ pet add "Nearby concert alerts" -t music \
-m "A small service that checks which artists I listen to on Spotify and emails me when one of them announces a show in my city."
+ nearby-concert-alerts Nearby concert alerts
The idea is saved as nearby-concert-alerts.md. pet new asks for the same things
one by one instead.
Stages
pet promote moves an idea to its next stage and asks that stage's questions. Enter
skips a question.
$ pet promote concert
? What problem does it solve? I find out about shows after they sell out
? Who is it for? Me and anyone who goes to a lot of concerts
? How could it work, roughly? Read my top artists from the Spotify API and check a concert listings API once a week
? What is it worth if it exists?
? Why is now a good time for it?
nearby-concert-alerts: seed → sketch
Any part of an id that matches only one idea works, so concert is enough.
pet refine concert changes the answers later.
Notes and ratings
pet note concert "Songkick and Bandsintown both have APIs for concert listings"
pet set concert excitement=5 effort=M
Listing ideas
$ pet ls
id title status exc tags imp effort
recipe-box Recipe box seed 3 cooking M
reading-tracker Reading tracker seed 2 books M
nearby-concert-alerts Nearby concert alerts sketch 5 music M
family-grocery-list Family grocery list seed 4 mobile 4 M
$ pet next
id title status score exc tags imp
nearby-concert-alerts Nearby concert alerts sketch 4.25 5 music
family-grocery-list Family grocery list seed 4.00 4 mobile 4
recipe-box Recipe box seed 3.00 3 cooking
pet next ranks ideas by excitement plus impact, divided by effort. pet show,
pet search and pet review cover the rest, and pet on its own opens the
full-screen view shown above. See pet --help for all commands.
Idea files
Each idea is a Markdown file that you can also edit by hand, or with pet edit.
This is nearby-concert-alerts.md after the commands above, without its two empty
sections:
---
id: nearby-concert-alerts
title: Nearby concert alerts
status: sketch
created: 2026-09-25
updated: 2026-09-25
tags:
- music
excitement: 5
effort: M
---
A small service that checks which artists I listen to on Spotify and emails me when one of them announces a show in my city.
## Problem
I find out about shows after they sell out
## Who it's for
Me and anyone who goes to a lot of concerts
## Rough solution
Read my top artists from the Spotify API and check a concert listings API once a week
## Notes
- 2026-09-25: Songkick and Bandsintown both have APIs for concert listings
Configuration
Data folder. Ideas are kept in ~/.local/share/metapet on Linux,
~/Library/Application Support/metapet on macOS and %LOCALAPPDATA%\metapet on
Windows. Set METAPET_HOME or pass --home PATH to use another folder.
pet where shows the folder in use.
Custom stages. A stages.toml in the data folder replaces the questions of any
stage. The built-in file
shows the format, and pet check reports mistakes.
Backup. pet init --git --remote <url> makes the folder a git repository, and
pet sync commits and pushes it. A folder synced by Dropbox, iCloud or Syncthing
works too.
Shell completion. pet --install-completion adds Tab completion for commands and
idea ids in bash, zsh, fish and PowerShell.
Development
git clone https://github.com/jrazi/metapet.git
cd metapet
uv sync
uv run pytest
License
Release files for metapet 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| metapet-0.1.1.tar.gz | 84.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| metapet-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 148.3 kB
Release files / metapet-0.1.1.tar.gz
| Download URL | metapet-0.1.1.tar.gz |
|---|---|
| Size | 84.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e043c9fec73f1476860fcf9aae259694f35a18818f7d3f8f15eb5033cf286173
|
|
BLAKE2b-256 checksum How to use checksums |
250e5aed584157c4435701765dbcfa66e9912c3c1b8ce5d3f63b1d93de8387b4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / metapet-0.1.1-py3-none-any.whl
| Download URL | metapet-0.1.1-py3-none-any.whl |
|---|---|
| Size | 63.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f74edfe06e0669973bb3d4cca95df48a881f38d8d668b1a861dd72a655773e7
|
|
BLAKE2b-256 checksum How to use checksums |
76a2b4dee42c7ef152aa558438fa23cb017eaa1ee5d6300addf2fbecacbfb5e6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|