{"adoption": {"forks": 104, "observed_at": "2026-08-28T04:03:25.900844+00:00", "stars": 1061}, "canonical_url": "https://ross.abutalabs.com/products/bash-preexec", "card": {"archived": false, "artifact_type": "library", "description": "⚡ preexec and precmd functions for Bash just like Zsh. ", "domain": ["developer-tools", "command-line"], "enriched": true, "function": ["developer-tools", "cli", "middleware"], "health_score": 99, "homepage": null, "language": "Shell", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["rcaloras/bash-preexec"], "name": "rcaloras/bash-preexec", "platform": ["cli", "cross-platform"], "pushed_at": "2026-08-24T01:33:23+00:00", "repo": "rcaloras/bash-preexec", "stars": 1061, "tags": ["bash", "shell-hooks", "preexec", "precmd", "zsh-style", "prompt-command", "terminal", "command-line", "linux", "macos"], "topics": ["bash", "preexec", "precmd"], "urls": [], "use_cases": ["run a hook before each bash command executes", "replace PROMPT_COMMAND with something more reliable", "track command execution time in bash", "integrate shell history tools like Atuin with bash", "build custom bash prompt logic", "capture the typed command for logging or syncing"], "what_it_is": "A single-file shell library that brings Zsh-style preexec and precmd hook functions to Bash 3.1+. It lets scripts and tools run code just before command execution and just before each prompt, with support for hook function arrays.", "when_to_avoid": ["you're using Zsh, fish, or another shell with native hooks", "you only need simple prompt customization without hooks", "you need hooks in a non-Bash POSIX shell like dash"], "when_to_choose": ["you need Zsh-style preexec/precmd hooks in Bash", "you're building a shell integration for a terminal or history tool that must support Bash", "PROMPT_COMMAND is too fragile for your prompt or hook needs"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bash-preexec", "repo": "rcaloras/bash-preexec", "role": "main", "score": 88}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:56:52.092113+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a79a7a8c6fdeea11c5af5efeee3922c65b805d807d5e00fad6b1e4f9d2d6cacc", "fetched_at": "2026-08-28T04:03:25.900844+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rcaloras/bash-preexec"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:56:52.092113+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a79a7a8c6fdeea11c5af5efeee3922c65b805d807d5e00fad6b1e4f9d2d6cacc", "fetched_at": "2026-08-28T04:03:25.900844+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rcaloras/bash-preexec"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:56:52.092113+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a79a7a8c6fdeea11c5af5efeee3922c65b805d807d5e00fad6b1e4f9d2d6cacc", "fetched_at": "2026-08-28T04:03:25.900844+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rcaloras/bash-preexec"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:56:52.092113+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a79a7a8c6fdeea11c5af5efeee3922c65b805d807d5e00fad6b1e4f9d2d6cacc", "fetched_at": "2026-08-28T04:03:25.900844+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rcaloras/bash-preexec"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:56:52.092113+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a79a7a8c6fdeea11c5af5efeee3922c65b805d807d5e00fad6b1e4f9d2d6cacc", "fetched_at": "2026-08-28T04:03:25.900844+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rcaloras/bash-preexec"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:56:52.092113+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a79a7a8c6fdeea11c5af5efeee3922c65b805d807d5e00fad6b1e4f9d2d6cacc", "fetched_at": "2026-08-28T04:03:25.900844+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rcaloras/bash-preexec"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:25.900844+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:56:52.092113+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a79a7a8c6fdeea11c5af5efeee3922c65b805d807d5e00fad6b1e4f9d2d6cacc", "fetched_at": "2026-08-28T04:03:25.900844+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rcaloras/bash-preexec"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:56:52.092113+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a79a7a8c6fdeea11c5af5efeee3922c65b805d807d5e00fad6b1e4f9d2d6cacc", "fetched_at": "2026-08-28T04:03:25.900844+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rcaloras/bash-preexec"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:56:52.092113+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a79a7a8c6fdeea11c5af5efeee3922c65b805d807d5e00fad6b1e4f9d2d6cacc", "fetched_at": "2026-08-28T04:03:25.900844+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rcaloras/bash-preexec"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:56:52.092113+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a79a7a8c6fdeea11c5af5efeee3922c65b805d807d5e00fad6b1e4f9d2d6cacc", "fetched_at": "2026-08-28T04:03:25.900844+00:00", "kind": "readme", "missing": false, "url": "https://github.com/rcaloras/bash-preexec"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 67}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4292, "days_push": 10, "days_rel": 10, "gap_med": 385, "n_releases_24m": 2}, "score": 88, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}