{"id":46211014,"url":"https://github.com/pliancy/guru-cli","last_synced_at":"2026-03-03T09:08:27.855Z","repository":{"id":40748127,"uuid":"348491076","full_name":"pliancy/guru-cli","owner":"pliancy","description":"A NodeJS based CLI tool for doing useful things against Guru KB","archived":false,"fork":false,"pushed_at":"2026-02-19T03:36:24.000Z","size":308,"stargazers_count":6,"open_issues_count":15,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-19T08:45:55.949Z","etag":null,"topics":["cli","guru","kb","nodejs"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pliancy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-03-16T21:03:38.000Z","updated_at":"2025-06-28T00:15:16.000Z","dependencies_parsed_at":"2023-10-11T07:37:45.686Z","dependency_job_id":"853e69df-8280-44fc-8b51-9ba99c7a19f7","html_url":"https://github.com/pliancy/guru-cli","commit_stats":{"total_commits":26,"total_committers":7,"mean_commits":"3.7142857142857144","dds":0.6923076923076923,"last_synced_commit":"3aba6f3ac4762096b363afc5847114167b230e42"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/pliancy/guru-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pliancy%2Fguru-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pliancy%2Fguru-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pliancy%2Fguru-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pliancy%2Fguru-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pliancy","download_url":"https://codeload.github.com/pliancy/guru-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pliancy%2Fguru-cli/sbom","scorecard":{"id":40832,"data":{"date":"2025-08-04","repo":{"name":"github.com/pliancy/guru-cli","commit":"417a02978d13eab5c2055be4256f02fb659e723d"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":2.8,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 2/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/push.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/push.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/pliancy/guru-cli/push.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/push.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/pliancy/guru-cli/push.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/pliancy/guru-cli/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/pliancy/guru-cli/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/pliancy/guru-cli/release.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: MIT License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"30 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-h5c3-5r3r-rr8q","Warn: Project is vulnerable to: GHSA-rmvr-2pp2-xj38","Warn: Project is vulnerable to: GHSA-xx4v-prfh-6cgc","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-ghr5-ch3p-vcr6","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-5v2h-r2cx-5xgj","Warn: Project is vulnerable to: GHSA-rrrm-qjm4-v8hf","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-hj9c-8jmm-8c52","Warn: Project is vulnerable to: GHSA-p8p7-x288-28g6","Warn: Project is vulnerable to: GHSA-x2pg-mjhr-2m5x","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-f9xv-q969-pqx4"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-14T21:28:52.886Z","repository_id":40748127,"created_at":"2025-08-14T21:28:52.887Z","updated_at":"2025-08-14T21:28:52.887Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30038671,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T06:58:30.252Z","status":"ssl_error","status_checked_at":"2026-03-03T06:58:15.329Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","guru","kb","nodejs"],"created_at":"2026-03-03T09:08:26.196Z","updated_at":"2026-03-03T09:08:27.846Z","avatar_url":"https://github.com/pliancy.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Guru CLI\n\n[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/pliancy/guru-cli/CI)](https://github.com/pliancy/guru-cli)\n[![npm](https://img.shields.io/npm/v/guru-cli.svg)](https://www.npmjs.com/package/guru-cli)\n[![Downloads](https://img.shields.io/npm/dm/guru-cli.svg)](https://www.npmjs.com/package/guru-cli)\n[![Dependency Status](https://img.shields.io/david/pliancy/guru-cli)](https://david-dm.org/pliancy/guru-cli)\n[![License](https://img.shields.io/github/license/pliancy/guru-cli)](https://www.npmjs.com/package/guru-cli)\n\nA NodeJS based CLI tool for doing useful things against the Guru KB (\u003chttps://getguru.com\u003e)\n\n**_Note: This tool is an open source project that is not officially supported by Guru. Use at your own risk._**\n\nThis tool was made by us at Pliancy to augment the Guru administration experience. We hope it's useful to others as well!\n\nIt currently provides the following features:\n\n- Search all cards with a powerful query language supporting regex in the title, content, collection, and board metadata.\n- Verify any card. This works by generating an API token for the card's owner and using it to verify.\n- Verify expired (stale) cards.\n- Find and replace across all Guru cards with regex support, optional filtering, and powerful preview.\n- Backup your cards to JSON format.\n\n![find-replace-482742](https://user-images.githubusercontent.com/34489899/112241533-a8d31e80-8c07-11eb-874a-1a22d26097e4.gif)\n\n## Installation\n\nThe NPM method is preferred since it is consistent across operating systems. The homebrew method is for convienence only.\n\n### NPM Method\n\nInstall Node JS 14 or greater if you do not already have it from the [Offical NodeJS Download Page](https://nodejs.org/en/download/)\n\n```shell\nnpm install -g guru-cli\n\n# or\n\nyarn global add guru-cli\n```\n\n### Homebrew Method\n\n```bash\nbrew install pliancy/tap/guru-cli\n```\n\n## Getting Started\n\n1. First, you need to authenticate to the guru API. Navigate to \u003chttps://app.getguru.com/settings/api-access\u003e and generate an API token for a **Guru admin account**\n2. Log in to the cli tool\n\n```bash\n$ guru-cli login\nLogin to Guru API\n-------------------\nGuru Admin Email: example@company.com\nAdmin API Token: some-api-token\n✅ Successfully authenticated to Guru API. You can now run guru-cli commands.\n```\n\nNow you're ready!\n\n## The filter query language\n\nMany commands support a powerful filtering syntax with regex support. The filtering supports a familiar google-style query syntax of `key:value` where key is one of `collection`, `board`, `title`, or `content` and value is any ECMAScript supported regular expression. Typically you can just fuzzy match via something like `title:Overview` which logically means title contains the substring \"Overview\". See below for more examples of using this filtering.\n\nIf you need to ignore case sensitivity in the supplied regex you can pass the `--ignore-case` or `-i` flag to the command.\n\n## Examples\n\n### Find all cards with the words \"Typescript\" or \"Javascript\" in the title under the \"Engineering\" collection\n\n```bash\nguru-cli find 'title:Typescript|Javascript collection:Engineering'\n```\n\n### Find cards that have the text \"Caleb\" and \"great guy\" with anything in between in the content\n\n```bash\nguru-cli find 'content:Caleb.*great guy'\n```\n\n### Verify a card by its title\n\n```bash\nguru-cli verify-by-title 'card title'\n```\n\n### Verify a card by its title with optional collection filtering\n\n```bash\nguru-cli verify-by-title --collection 'collection title' 'card title'\n```\n\n### Verify all cards that are in an expired (stale) state\n\n```bash\nguru-cli verify-expired\n```\n\n### Verify all cards that are in an expired state in collection Engineering with \"Overview\" in title\n\n```bash\nguru-cli verify-expired 'collection:Engineering title:Overview'\n```\n\n### Find and replace across all cards with case insensitivity turned on (-i)\n\n```bash\nguru-cli find-replace -i 'G Suite' 'Google Workspace'\n```\n\nOnce you're confident in your changes affecting the proper data in the preview:\n\n```bash\nguru-cli find-replace -i 'G Suite' 'Google Workspace' --confirm\n```\n\n### Find and replace across cards except for the ones that have the phrase \"this is how you get ants\"\n\nThis one is a bit more complex because it uses a regex feature known as negitive look-ahead in the filter to accomplish filtering out the relevant cards\n\n```bash\nguru-cli find-replace 'Archer' 'Lana' 'content:\"^(?!.*this is how you get ants)\"'\n```\n\nOnce you're confident in your changes affecting the proper data in the preview:\n\n```bash\nguru-cli find-replace 'Archer' 'Lana' 'content:\"^(?!.*this is how you get ants)\"' --confirm\n```\n\n### Backup your Guru Cards to JSON\n\n```bash\nguru-cli backup-cards /path/to/some/folder\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpliancy%2Fguru-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpliancy%2Fguru-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpliancy%2Fguru-cli/lists"}