WIP: A simple cli for daily tangled use cases and AI integration. This is for my personal use right now, but happy if others get mileage from it! :)

Install dependencies for Context Engine

Add simple-git for Git operations and cosmiconfig for configuration
management with proper precedence handling.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

markbennett.ca 26227542 71e9b487

verified
+208 -4
+206 -4
package-lock.json
··· 14 14 "@inquirer/prompts": "^8.2.0", 15 15 "@napi-rs/keyring": "^1.2.0", 16 16 "commander": "^12.1.0", 17 + "cosmiconfig": "^9.0.0", 18 + "simple-git": "^3.30.0", 17 19 "zod": "^4.3.6" 18 20 }, 19 21 "bin": { ··· 146 148 "license": "MIT", 147 149 "funding": { 148 150 "url": "https://github.com/sponsors/colinhacks" 151 + } 152 + }, 153 + "node_modules/@babel/code-frame": { 154 + "version": "7.29.0", 155 + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", 156 + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", 157 + "license": "MIT", 158 + "dependencies": { 159 + "@babel/helper-validator-identifier": "^7.28.5", 160 + "js-tokens": "^4.0.0", 161 + "picocolors": "^1.1.1" 162 + }, 163 + "engines": { 164 + "node": ">=6.9.0" 165 + } 166 + }, 167 + "node_modules/@babel/helper-validator-identifier": { 168 + "version": "7.28.5", 169 + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", 170 + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", 171 + "license": "MIT", 172 + "engines": { 173 + "node": ">=6.9.0" 149 174 } 150 175 }, 151 176 "node_modules/@biomejs/biome": { ··· 1089 1114 "dev": true, 1090 1115 "license": "MIT" 1091 1116 }, 1117 + "node_modules/@kwsites/file-exists": { 1118 + "version": "1.1.1", 1119 + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", 1120 + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", 1121 + "license": "MIT", 1122 + "dependencies": { 1123 + "debug": "^4.1.1" 1124 + } 1125 + }, 1126 + "node_modules/@kwsites/promise-deferred": { 1127 + "version": "1.1.1", 1128 + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", 1129 + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", 1130 + "license": "MIT" 1131 + }, 1092 1132 "node_modules/@napi-rs/keyring": { 1093 1133 "version": "1.2.0", 1094 1134 "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.2.0.tgz", ··· 1812 1852 "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1813 1853 } 1814 1854 }, 1855 + "node_modules/argparse": { 1856 + "version": "2.0.1", 1857 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1858 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1859 + "license": "Python-2.0" 1860 + }, 1815 1861 "node_modules/assertion-error": { 1816 1862 "version": "2.0.1", 1817 1863 "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", ··· 1838 1884 "node": ">=8" 1839 1885 } 1840 1886 }, 1887 + "node_modules/callsites": { 1888 + "version": "3.1.0", 1889 + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1890 + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1891 + "license": "MIT", 1892 + "engines": { 1893 + "node": ">=6" 1894 + } 1895 + }, 1841 1896 "node_modules/chai": { 1842 1897 "version": "5.3.3", 1843 1898 "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", ··· 1889 1944 "node": ">=18" 1890 1945 } 1891 1946 }, 1947 + "node_modules/cosmiconfig": { 1948 + "version": "9.0.0", 1949 + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", 1950 + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", 1951 + "license": "MIT", 1952 + "dependencies": { 1953 + "env-paths": "^2.2.1", 1954 + "import-fresh": "^3.3.0", 1955 + "js-yaml": "^4.1.0", 1956 + "parse-json": "^5.2.0" 1957 + }, 1958 + "engines": { 1959 + "node": ">=14" 1960 + }, 1961 + "funding": { 1962 + "url": "https://github.com/sponsors/d-fischer" 1963 + }, 1964 + "peerDependencies": { 1965 + "typescript": ">=4.9.5" 1966 + }, 1967 + "peerDependenciesMeta": { 1968 + "typescript": { 1969 + "optional": true 1970 + } 1971 + } 1972 + }, 1892 1973 "node_modules/debug": { 1893 1974 "version": "4.4.3", 1894 1975 "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", 1895 1976 "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", 1896 - "dev": true, 1897 1977 "license": "MIT", 1898 1978 "dependencies": { 1899 1979 "ms": "^2.1.3" ··· 1922 2002 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", 1923 2003 "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", 1924 2004 "license": "MIT" 2005 + }, 2006 + "node_modules/env-paths": { 2007 + "version": "2.2.1", 2008 + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", 2009 + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", 2010 + "license": "MIT", 2011 + "engines": { 2012 + "node": ">=6" 2013 + } 2014 + }, 2015 + "node_modules/error-ex": { 2016 + "version": "1.3.4", 2017 + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", 2018 + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", 2019 + "license": "MIT", 2020 + "dependencies": { 2021 + "is-arrayish": "^0.2.1" 2022 + } 1925 2023 }, 1926 2024 "node_modules/es-module-lexer": { 1927 2025 "version": "1.7.0", ··· 2048 2146 "url": "https://opencollective.com/express" 2049 2147 } 2050 2148 }, 2149 + "node_modules/import-fresh": { 2150 + "version": "3.3.1", 2151 + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", 2152 + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", 2153 + "license": "MIT", 2154 + "dependencies": { 2155 + "parent-module": "^1.0.0", 2156 + "resolve-from": "^4.0.0" 2157 + }, 2158 + "engines": { 2159 + "node": ">=6" 2160 + }, 2161 + "funding": { 2162 + "url": "https://github.com/sponsors/sindresorhus" 2163 + } 2164 + }, 2165 + "node_modules/is-arrayish": { 2166 + "version": "0.2.1", 2167 + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 2168 + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 2169 + "license": "MIT" 2170 + }, 2051 2171 "node_modules/iso-datestring-validator": { 2052 2172 "version": "2.2.2", 2053 2173 "resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz", 2054 2174 "integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==", 2055 2175 "license": "MIT" 2056 2176 }, 2177 + "node_modules/js-tokens": { 2178 + "version": "4.0.0", 2179 + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2180 + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2181 + "license": "MIT" 2182 + }, 2183 + "node_modules/js-yaml": { 2184 + "version": "4.1.1", 2185 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", 2186 + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", 2187 + "license": "MIT", 2188 + "dependencies": { 2189 + "argparse": "^2.0.1" 2190 + }, 2191 + "bin": { 2192 + "js-yaml": "bin/js-yaml.js" 2193 + } 2194 + }, 2195 + "node_modules/json-parse-even-better-errors": { 2196 + "version": "2.3.1", 2197 + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 2198 + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 2199 + "license": "MIT" 2200 + }, 2201 + "node_modules/lines-and-columns": { 2202 + "version": "1.2.4", 2203 + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 2204 + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 2205 + "license": "MIT" 2206 + }, 2057 2207 "node_modules/loupe": { 2058 2208 "version": "3.2.1", 2059 2209 "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", ··· 2075 2225 "version": "2.1.3", 2076 2226 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2077 2227 "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2078 - "dev": true, 2079 2228 "license": "MIT" 2080 2229 }, 2081 2230 "node_modules/multiformats": { ··· 2112 2261 "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2113 2262 } 2114 2263 }, 2264 + "node_modules/parent-module": { 2265 + "version": "1.0.1", 2266 + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2267 + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2268 + "license": "MIT", 2269 + "dependencies": { 2270 + "callsites": "^3.0.0" 2271 + }, 2272 + "engines": { 2273 + "node": ">=6" 2274 + } 2275 + }, 2276 + "node_modules/parse-json": { 2277 + "version": "5.2.0", 2278 + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 2279 + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 2280 + "license": "MIT", 2281 + "dependencies": { 2282 + "@babel/code-frame": "^7.0.0", 2283 + "error-ex": "^1.3.1", 2284 + "json-parse-even-better-errors": "^2.3.0", 2285 + "lines-and-columns": "^1.1.6" 2286 + }, 2287 + "engines": { 2288 + "node": ">=8" 2289 + }, 2290 + "funding": { 2291 + "url": "https://github.com/sponsors/sindresorhus" 2292 + } 2293 + }, 2115 2294 "node_modules/pathe": { 2116 2295 "version": "1.1.2", 2117 2296 "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", ··· 2133 2312 "version": "1.1.1", 2134 2313 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2135 2314 "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2136 - "dev": true, 2137 2315 "license": "ISC" 2138 2316 }, 2139 2317 "node_modules/postcss": { ··· 2165 2343 "node": "^10 || ^12 || >=14" 2166 2344 } 2167 2345 }, 2346 + "node_modules/resolve-from": { 2347 + "version": "4.0.0", 2348 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2349 + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2350 + "license": "MIT", 2351 + "engines": { 2352 + "node": ">=4" 2353 + } 2354 + }, 2168 2355 "node_modules/resolve-pkg-maps": { 2169 2356 "version": "1.0.0", 2170 2357 "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", ··· 2243 2430 }, 2244 2431 "funding": { 2245 2432 "url": "https://github.com/sponsors/isaacs" 2433 + } 2434 + }, 2435 + "node_modules/simple-git": { 2436 + "version": "3.30.0", 2437 + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz", 2438 + "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", 2439 + "license": "MIT", 2440 + "dependencies": { 2441 + "@kwsites/file-exists": "^1.1.1", 2442 + "@kwsites/promise-deferred": "^1.1.1", 2443 + "debug": "^4.4.0" 2444 + }, 2445 + "funding": { 2446 + "type": "github", 2447 + "url": "https://github.com/steveukx/git-js?sponsor=1" 2246 2448 } 2247 2449 }, 2248 2450 "node_modules/source-map-js": { ··· 2384 2586 "version": "5.9.3", 2385 2587 "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 2386 2588 "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 2387 - "dev": true, 2589 + "devOptional": true, 2388 2590 "license": "Apache-2.0", 2389 2591 "bin": { 2390 2592 "tsc": "bin/tsc",
+2
package.json
··· 35 35 "@inquirer/prompts": "^8.2.0", 36 36 "@napi-rs/keyring": "^1.2.0", 37 37 "commander": "^12.1.0", 38 + "cosmiconfig": "^9.0.0", 39 + "simple-git": "^3.30.0", 38 40 "zod": "^4.3.6" 39 41 }, 40 42 "devDependencies": {