{
  "pyrtan-catalog": 1,
  "generated": "2026-10-27T23:09:08Z",
  "count": 11,
  "trees": [
    {
      "id": "pyrtan/disk-space",
      "namespace": "pyrtan",
      "name": "disk-space",
      "version": 2,
      "description": "How full a filesystem is, from df on the box this tree runs on.",
      "tags": [
        "ops",
        "box",
        "read-only"
      ],
      "hosts": [],
      "commands": [
        "df"
      ],
      "sources": [
        "shell"
      ],
      "triggers": [
        "[how] full is the disk",
        "disk space",
        "disk space on {mount:word}"
      ],
      "inputs": {
        "mount": {
          "type": "str",
          "default": "/",
          "description": "A mount point, or any path on the filesystem to measure"
        }
      },
      "license": "MIT",
      "path": "pyrtan/disk-space.toml",
      "sha256": "020bc6fe7437f225feeec535e46e9ca51b073912f59169dc65f7131551c22f07",
      "size": 2148
    },
    {
      "id": "pyrtan/github-release",
      "namespace": "pyrtan",
      "name": "github-release",
      "version": 2,
      "description": "The latest release of a GitHub repository.",
      "tags": [
        "github",
        "read-only"
      ],
      "hosts": [
        "api.github.com"
      ],
      "sources": [
        "http"
      ],
      "triggers": [
        "[what's the] latest release of {repo:word}",
        "latest {repo:word} release"
      ],
      "inputs": {
        "repo": {
          "type": "str",
          "required": true,
          "description": "owner/name"
        }
      },
      "license": "MIT",
      "path": "pyrtan/github-release.toml",
      "sha256": "ae05a4600c1c124c823528e326ec01b5c40adda304ff8073a81aac36968cf96b",
      "size": 1953
    },
    {
      "id": "pyrtan/hacker-news-item",
      "namespace": "pyrtan",
      "name": "hacker-news-item",
      "version": 2,
      "description": "One Hacker News item by id: title, url, score, author.",
      "tags": [
        "news",
        "read-only"
      ],
      "hosts": [
        "hacker-news.firebaseio.com"
      ],
      "sources": [
        "http"
      ],
      "triggers": [
        "hacker news item {id:int}"
      ],
      "inputs": {
        "id": {
          "type": "int",
          "required": true,
          "description": "The item id"
        }
      },
      "license": "MIT",
      "path": "pyrtan/hacker-news-item.toml",
      "sha256": "d3dbac0b934ba78b0f3a2a2f7f5da52e0d4ac97a2184152829f16cfb64db257d",
      "size": 1694
    },
    {
      "id": "pyrtan/hacker-news",
      "namespace": "pyrtan",
      "name": "hacker-news",
      "version": 2,
      "description": "Top stories on Hacker News, from its public API.",
      "tags": [
        "news",
        "read-only"
      ],
      "hosts": [
        "hacker-news.firebaseio.com"
      ],
      "sources": [
        "http"
      ],
      "triggers": [
        "[what's the] top story on hacker news",
        "top {count:int} stories on hacker news"
      ],
      "inputs": {
        "count": {
          "type": "int",
          "default": 1,
          "description": "How many stories to return"
        }
      },
      "license": "MIT",
      "path": "pyrtan/hacker-news.toml",
      "sha256": "d53952c940a5dc713d85582e15c384890c4000e478fae0ac7dbdf27b1c75adf3",
      "size": 1931
    },
    {
      "id": "pyrtan/log-errors",
      "namespace": "pyrtan",
      "name": "log-errors",
      "version": 2,
      "description": "Error lines in the tail of a log file on this box.",
      "tags": [
        "ops",
        "box",
        "read-only"
      ],
      "hosts": [],
      "paths": [
        "/var/log"
      ],
      "sources": [
        "file"
      ],
      "triggers": [
        "errors in the log",
        "errors in {path:word}"
      ],
      "inputs": {
        "path": {
          "type": "str",
          "default": "/var/log/syslog"
        },
        "lines": {
          "type": "int",
          "default": 200,
          "description": "How many lines from the end to look at"
        }
      },
      "license": "MIT",
      "path": "pyrtan/log-errors.toml",
      "sha256": "0104c1ef289d6a6298d3f1e2cd7246c0287716c8c6004bdc4d2a9e2662242f7e",
      "size": 1886
    },
    {
      "id": "pyrtan/modem-check",
      "namespace": "pyrtan",
      "name": "modem-check",
      "version": 2,
      "description": "Whether a modem on a serial line answers AT.",
      "tags": [
        "hardware",
        "serial"
      ],
      "hosts": [],
      "devices": [
        "/dev/ttyUSB*",
        "/dev/ttyACM*"
      ],
      "sources": [
        "serial"
      ],
      "triggers": [
        "is the modem up",
        "is the modem on {device:word} up"
      ],
      "inputs": {
        "device": {
          "type": "str",
          "default": "/dev/ttyUSB0"
        }
      },
      "license": "MIT",
      "path": "pyrtan/modem-check.toml",
      "sha256": "a128dcf59619d86ed6ea338511209d072df5d7d803983ca4c8ec3dc6e61c181b",
      "size": 1432
    },
    {
      "id": "pyrtan/rendered-headline",
      "namespace": "pyrtan",
      "name": "rendered-headline",
      "version": 2,
      "description": "The main heading of a page that needs a script to render, through a real browser.",
      "tags": [
        "web",
        "browser",
        "read-only"
      ],
      "hosts": [
        "*"
      ],
      "sources": [
        "browser"
      ],
      "triggers": [
        "headline of {url:url}",
        "what does {url:url} say"
      ],
      "inputs": {
        "url": {
          "type": "str",
          "required": true
        }
      },
      "license": "MIT",
      "path": "pyrtan/rendered-headline.toml",
      "sha256": "eef7e16e48354e3992796e5c205fd50d61f66e547f107fb384569de1c004a1e8",
      "size": 1708
    },
    {
      "id": "pyrtan/room-temperature",
      "namespace": "pyrtan",
      "name": "room-temperature",
      "version": 2,
      "description": "The temperature a room's sensor last published, over MQTT.",
      "tags": [
        "home",
        "mqtt"
      ],
      "hosts": [
        "broker.local"
      ],
      "topics": [
        "home/+/temperature"
      ],
      "sources": [
        "queue"
      ],
      "triggers": [
        "[what's the] temperature in the {room:word}",
        "how warm is the {room:word}"
      ],
      "inputs": {
        "room": {
          "type": "str",
          "default": "kitchen"
        }
      },
      "license": "MIT",
      "path": "pyrtan/room-temperature.toml",
      "sha256": "40c78605533cb20652bac599b5259ad3609ae036c9057c7fc0475dc27908fb59",
      "size": 2453
    },
    {
      "id": "pyrtan/site-status",
      "namespace": "pyrtan",
      "name": "site-status",
      "version": 2,
      "description": "Whether a web site answers, and how quickly.",
      "tags": [
        "ops",
        "read-only"
      ],
      "hosts": [
        "*"
      ],
      "sources": [
        "http"
      ],
      "triggers": [
        "is {host:host} up",
        "is {host:host} down",
        "[check] status of {host:host}"
      ],
      "inputs": {
        "host": {
          "type": "str",
          "required": true,
          "description": "A host name, with no scheme"
        }
      },
      "license": "MIT",
      "path": "pyrtan/site-status.toml",
      "sha256": "13b155f87b97fa306075ba0b7b146ae426caf2618559edd5731064265b7492bb",
      "size": 2167
    },
    {
      "id": "pyrtan/small-talk",
      "namespace": "pyrtan",
      "name": "small-talk",
      "version": 1,
      "description": "How are you, who are you, what can you do, goodbye: what a stranger asks a bot in the chat before asking anything.",
      "tags": [
        "chat",
        "read-only"
      ],
      "hosts": [],
      "sources": [],
      "triggers": [
        "how are you [doing|today]",
        "(who|what) are you",
        "what (can|do) you do",
        "are you (a bot|human|real|a person)",
        "(bye|goodbye|see you|see ya)"
      ],
      "inputs": {
        "topic": {
          "type": "str",
          "required": true
        }
      },
      "license": "MIT",
      "path": "pyrtan/small-talk.toml",
      "sha256": "1eb4c673c0d201530142e3dc8ee8fb2d9e49a09224ce181f1fc3640f071d5c43",
      "size": 1995
    },
    {
      "id": "pyrtan/weather",
      "namespace": "pyrtan",
      "name": "weather",
      "version": 2,
      "description": "Current weather for a place, from Open-Meteo.",
      "tags": [
        "weather",
        "read-only"
      ],
      "hosts": [
        "geocoding-api.open-meteo.com",
        "api.open-meteo.com"
      ],
      "sources": [
        "http"
      ],
      "triggers": [
        "[what's the] weather in {place}",
        "[what's the] weather for {place}",
        "how [hot|cold|warm] is it in {place}"
      ],
      "inputs": {
        "place": {
          "type": "str",
          "required": true,
          "description": "A town or city name"
        },
        "units": {
          "type": "str",
          "default": "celsius"
        }
      },
      "license": "MIT",
      "path": "pyrtan/weather.toml",
      "sha256": "864862b62e8d443f957915f008db7991293f693222b32d2722e4066b1250a28a",
      "size": 4038
    }
  ]
}
