From c017bef4a784369870bd5686594e737b47c3e3bf Mon Sep 17 00:00:00 2001
From: Ryan Duguid
Date: Fri, 30 Oct 2026 08:56:08 +1100
Subject: [PATCH] docs: add badge row, CodeQL, Scorecard, CITATION.cff and
llms.txt
---
.github/workflows/codeql.yml | 46 +++++++++++++++++++++++++++++++++
.github/workflows/scorecard.yml | 39 ++++++++++++++++++++++++++++
CITATION.cff | 24 +++++++++++++++++
README.md | 8 ++++++
llms.txt | 23 +++++++++++++++++
5 files changed, 140 insertions(+)
create mode 100644 .github/workflows/codeql.yml
create mode 100644 .github/workflows/scorecard.yml
create mode 100644 CITATION.cff
create mode 100644 llms.txt
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
new file mode 100644
index 0000000..cdb2335
--- /dev/null
+++ b/.github/workflows/codeql.yml
@@ -0,0 +1,46 @@
+name: CodeQL
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ branches: [main]
+ schedule:
+ - cron: "23 3 * * 1"
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ analyze:
+ name: Analyze ${{ matrix.language }}
+ runs-on: ubuntu-latest
+ timeout-minutes: 30
+ permissions:
+ contents: read
+ security-events: write # Upload CodeQL results for this job only.
+ strategy:
+ fail-fast: false
+ matrix:
+ language: [javascript-typescript, rust, actions]
+ steps:
+ - name: Check out source
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+ with:
+ persist-credentials: false
+
+ - name: Initialise CodeQL
+ uses: github/codeql-action/init@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4
+ with:
+ languages: ${{ matrix.language }}
+ build-mode: none
+
+ - name: Perform CodeQL analysis
+ uses: github/codeql-action/analyze@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4
+ with:
+ category: "/language:${{ matrix.language }}"
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
new file mode 100644
index 0000000..0778a65
--- /dev/null
+++ b/.github/workflows/scorecard.yml
@@ -0,0 +1,39 @@
+name: Scorecard
+
+# No push trigger: the weekly run on main publishes the results, so rescanning
+# after every merge only repeated it.
+on:
+ branch_protection_rule:
+ schedule:
+ - cron: "35 6 * * 1"
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ analysis:
+ name: Scorecard analysis
+ timeout-minutes: 15
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ security-events: write # Upload Scorecard results to code scanning.
+ id-token: write # Publish results for the public Scorecard badge.
+ steps:
+ - name: Check out source
+ uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+ with:
+ persist-credentials: false
+
+ - name: Run Scorecard
+ uses: ossf/scorecard-action@fa7117db83c52d787ae5a89f350999701505d78e # v2.5.0
+ with:
+ results_file: results.sarif
+ results_format: sarif
+ publish_results: true
+
+ - name: Upload results to code scanning
+ uses: github/codeql-action/upload-sarif@6f2ac81f5cd81fe351a197ba0b00d91d03cd2aee # v4.39.0
+ with:
+ sarif_file: results.sarif
diff --git a/CITATION.cff b/CITATION.cff
new file mode 100644
index 0000000..7d30cea
--- /dev/null
+++ b/CITATION.cff
@@ -0,0 +1,24 @@
+cff-version: 1.2.0
+message: "If you use this work, cite it with this metadata and the release tag or commit you used."
+title: "Industrious"
+type: software
+authors:
+ - name: "EquityBot"
+abstract: "Ask ChatGPT, or the OpenAI or Azure OpenAI API, about your source files from a CLI or MCP server, and keep each answer as a durable session. A Rust port of Calvino."
+repository-code: "https://github.com/EquityBot/Industrious"
+license-url: "https://github.com/EquityBot/Industrious/blob/main/LICENSE"
+keywords:
+ - azure-openai
+ - chatgpt
+ - cli
+ - developer-tools
+ - mcp
+ - openai
+ - rust
+references:
+ - type: software
+ title: "Oracle"
+ authors:
+ - family-names: Steinberger
+ given-names: Peter
+ repository-code: "https://github.com/steipete/oracle"
diff --git a/README.md b/README.md
index c16d60c..f4e4343 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,14 @@
+
+
+[](https://github.com/EquityBot/Industrious/actions/workflows/ci.yml) [](https://github.com/EquityBot/Industrious/actions/workflows/codeql.yml)
+[](https://scorecard.dev/viewer/?uri=github.com/EquityBot/Industrious)
+[](https://www.rust-lang.org/) [](LICENSE)
+
+
+
Industrious sends a question and the source files you choose to ChatGPT, or to the OpenAI or Azure OpenAI API, and saves the answer as a durable session. It runs as a CLI (`industrious`) and a stdio MCP server (`industrious-mcp`) on Windows and Linux.
It is a Rust port of Calvino, a maintained fork of [Oracle](https://github.com/steipete/oracle) by Peter Steinberger.
diff --git a/llms.txt b/llms.txt
new file mode 100644
index 0000000..a02cc87
--- /dev/null
+++ b/llms.txt
@@ -0,0 +1,23 @@
+# Industrious
+
+> A CLI and stdio MCP server that sends a question and chosen source files to ChatGPT,
+> or to the OpenAI or Azure OpenAI API, and saves each answer as a durable session.
+> Windows and Linux only; model labels in ChatGPT do not prove which backend model answered.
+
+Version 0.1.0 (unreleased). Needs Rust 1.99 or later; install from a checkout with
+`cargo install --locked --path .`. Browser runs also need Google Chrome.
+
+## Start
+
+- [README](https://github.com/EquityBot/Industrious#readme): install, use, settings and known limitations.
+- [SECURITY.md](https://github.com/EquityBot/Industrious/blob/main/SECURITY.md): what Industrious can reach and how to report a vulnerability.
+
+## Docs
+
+- [CHANGELOG.md](https://github.com/EquityBot/Industrious/blob/main/CHANGELOG.md): changes in each release.
+- [NOTICE](https://github.com/EquityBot/Industrious/blob/main/NOTICE): licence terms and Oracle's retained MIT notice.
+
+## Related
+
+- [EquityBot](https://github.com/EquityBot): other EquityBot tools.
+- [Oracle](https://github.com/steipete/oracle): the upstream project Calvino, and through it Industrious, derives from.