Skip to content

Releases

v0.3.6

Choose a tag to compare

@github-actions github-actions released this 04 Nov 17:14
d25025a

lattice-scan 0.3.6

An AI agent in its own sandbox can now run the host scan and recent, and a run with no terminal no longer leaves the list of installed packages in the home folder. This release changes where and how the tool writes its records. What it looks up, what it compares and what leaves the machine are exactly as in 0.3.5.

Highlights

  • No crash without a writable home. With a read-only or missing home folder, the host scan and recent used to end in a Python traceback (exit 1) the first time they wrote a record. Now the run says on one line that the folder cannot be written and keeps that run's records in a temporary folder, deleted when the run ends. If LATTICE_SCAN_DIR names the folder and it cannot be used, the run stops with exit 1 and one line naming LATTICE_SCAN_DIR: a folder you chose is never silently replaced.
  • A run with no terminal leaves nothing behind. An agent or a cron job with no terminal on standard input or error, and no records folder yet, now writes its records to a temporary folder instead of ~/.lattice-scan. --keep (or LATTICE_SCAN_KEEP=1) keeps them in the default folder.
  • Private files. Every file in the records folder is now created mode 0600 (it was 0664), and files from earlier runs are tightened on the next run.
  • The skill tells a sandboxed agent what to set. Section 2 of the Claude skill now says to set LATTICE_SCAN_DIR to a folder the agent owns, and LATTICE_API_KEY if the user gave a key.

What changes for you

  • A folder that already exists (~/.lattice-scan, or the older ~/.host-scan) and any folder named by LATTICE_SCAN_DIR are used exactly as before. Nothing changes for a person at a terminal.
  • If you run the host scan from cron or another job with no terminal and relied on the default folder being created, your findings are no longer remembered from one run to the next. Set LATTICE_SCAN_DIR to a folder you keep, or add --keep.
  • get-key never uses a temporary folder, because the key must outlive the run.
  • recent, enrich and project write no host records, as before.

Known limits

  • A run whose records went to a temporary folder cannot show an earlier run's findings as RECORDED or OPEN; every finding in it is new. That is the point for a sandboxed agent, and a cost for a scheduled job that wants history.
  • The tool still does not detect incidents or decide whether a host is affected. A match is a candidate for a person to read. recent lists what was recently added and matches by product name; an empty or all-unmatch result is not the same as safe.
  • The host check is tested on Debian-family hosts.
  • The package is not listed in OpenAI's directory; submitting it is a separate step that needs OpenAI's review.

Install and verify

  • PyPI: pip install lattice-scan==0.3.6, or uv tool upgrade lattice-scan
  • Claude Code: /plugin install lattice-scan --marketplace namiq-ai/lattice-scan
  • Signed apt repository: https://namiq.io/apt (key fingerprint C473 6154 4115 8A3E 775C 2EC2 7E61 15F4 0A41 061D, also published at https://namiq.io/lattice/docs). The repository serves a new version only after it is published there; until then apt stays on the older one.
  • Assets below: lattice-scan.pyz, lattice-scan_0.3.6_all.deb, the wheel, the OpenAI plugin package and SHA256SUMS. Check with sha256sum -c SHA256SUMS.
  • To see the fix: env -i PATH="$PATH" HOME=/nonexistent python3 lattice-scan.pyz recent --daily -q ends without a traceback.

Guide to the command line, the Claude skill and the MCP server: https://namiq.io/lattice/guides/choose-your-channel

v0.3.5

Choose a tag to compare

@github-actions github-actions released this 04 Nov 15:49
e48d5ff

lattice-scan 0.3.5

The OpenAI plugin package names its real publisher, and the open-list wording no longer claims more than the list knows. This release changes the package built for OpenAI's plugin directory and some wording in the tool's help and manual. What the tool does, the Claude skill's text and what leaves the machine are exactly as in 0.3.4.

Highlights

  • Publisher: Hung Le. OpenAI requires a plugin to come from a verified person or organisation. The identity verified on the OpenAI account is an individual, so the package's listing (developerName) and its author now say Hung Le, where 0.3.4 said NamiQ LLC. The website, support, privacy and terms links are still the project's own pages at namiq.io, and the description says that the tool is open source under Apache-2.0 and that the Lattice service it reads is the one at namiq.io.
  • Wording about the open list. The help for recent --open, the manual and the 0.3.1 release notes described the open list as covering machines that had not yet been patched. The list cannot know anything about a machine: it says that CISA's due date has passed, and now says exactly that. The feed's own note on namiq.io was corrected the same way, and the same words are kept out of every published text by a test.
  • No email in the package. The manifests no longer carry an email address; support is the contact page.
  • A check for it. packaging/check_openai_plugin.py, which the release workflow runs, now refuses a package whose listing publisher differs from its author.

Known limits

  • The package is not listed in OpenAI's directory. Submitting it needs OpenAI's review, and their upload page has returned an error for this account; nothing here says otherwise.
  • The package bundles the lattice-scan script. OpenAI's published rules do not say whether bundled scripts are allowed, so the checker reports a warning for it and only OpenAI's review can answer.
  • recent lists what was recently added, and matches by product name. An empty or all-unmatch result is not the same as safe.
  • The host check is tested on Debian-family hosts.

Install and verify

  • PyPI: pip install lattice-scan==0.3.5, or uv tool upgrade lattice-scan
  • Claude Code: /plugin install lattice-scan --marketplace namiq-ai/lattice-scan
  • Signed apt repository: https://namiq.io/apt (key fingerprint C473 6154 4115 8A3E 775C 2EC2 7E61 15F4 0A41 061D, also published at https://namiq.io/lattice/docs)
  • Assets below: lattice-scan.pyz, lattice-scan_0.3.5_all.deb, the wheel, the OpenAI plugin package and SHA256SUMS. Check with sha256sum -c SHA256SUMS.

Guide to the command line, the Claude skill and the MCP server: https://namiq.io/lattice/guides/choose-your-channel

v0.3.4

Choose a tag to compare

@github-actions github-actions released this 04 Nov 07:38
d4b2753

lattice-scan 0.3.4

The OpenAI plugin package, brought in line with OpenAI's published rules. This release changes only the package built for OpenAI's plugin directory. The command-line tool, the Claude skill and what leaves the machine are exactly as in 0.3.3.

Highlights

  • Both OpenAI manifests. The package now carries the Codex-format manifest, .codex-plugin/plugin.json (skills by path, capabilities, starter prompts and the listing under interface), beside the portable plugin.json. OpenAI's plugin tooling treats the Codex manifest as the required structure.
  • Icon paths begin with ./. In 0.3.3 the icon and logo paths were written assets/icon.png. OpenAI's plugin-creator spec says asset paths are relative and begin with ./, so a package built that way was likely to be refused.
  • A checker, run on every release. packaging/check_openai_plugin.py checks the package against what OpenAI publishes (manifest formats, listing limits, https links, asset paths, image size, skill front matter, no hooks, apps or MCP entries, no credentials). The release workflow runs it and stops on an error. It is not OpenAI's own validator, which only runs inside their portal.

Known limits

  • The package is not listed in OpenAI's directory. Submitting it needs OpenAI's review, and their upload page has returned an error for this account; nothing here says otherwise.
  • The package bundles the lattice-scan script. OpenAI's published rules do not say whether bundled scripts are allowed, so the checker reports a warning for it and only OpenAI's review can answer.
  • recent lists what was recently added, and matches by product name. An empty or all-unmatch result is not the same as safe.
  • The host check is tested on Debian-family hosts.

Install and verify

  • PyPI: pip install lattice-scan==0.3.4, or uv tool upgrade lattice-scan
  • Claude Code: /plugin install lattice-scan --marketplace namiq-ai/lattice-scan
  • Signed apt repository: https://namiq.io/apt (key fingerprint C473 6154 4115 8A3E 775C 2EC2 7E61 15F4 0A41 061D, also published at https://namiq.io/lattice/docs)
  • Assets below: lattice-scan.pyz, lattice-scan_0.3.4_all.deb, the wheel, the OpenAI plugin package and SHA256SUMS. Check with sha256sum -c SHA256SUMS.

Guide to the command line, the Claude skill and the MCP server: https://namiq.io/lattice/guides/choose-your-channel

v0.3.3

Choose a tag to compare

@github-actions github-actions released this 04 Nov 07:09
19ac896

lattice-scan 0.3.3

No arguments runs the daily check, and back-to-back runs stop tripping the keyless limit. This release changes how the tool behaves when you run it with nothing, and how it spaces its calls to Lattice. What leaves the machine is unchanged.

Highlights

  • lattice-scan with no arguments now does lattice-scan recent --daily: it reads the daily list of recent exploited and critical CVEs and checks the likely ones against this host. It used to print "nothing to check". The daily list is the default here because the weekly list is long, and a keyless run that has to look many entries up reaches Lattice's limit. lattice-scan recent on its own is still weekly, and any argument or subcommand does what it names.
  • Separate runs space themselves out. Without a key Lattice allows 5 calls a minute, counted across everything on the machine. The tool used to space calls only inside one run, so an agent that ran it several times in a row hit HTTP 429: Too many keyless requests on the sixth call. It now remembers when it last called, in a small file in your cache folder (~/.cache/lattice-scan/pace.json, times only), and waits when it has to, with a line on stderr.
  • A 429 is waited out. If Lattice still says "retry after N seconds", and N is about a minute or less, the tool waits that long and tries again, twice at most. A longer wait (the hourly or daily limit) still stops the run and lists what was not read, as before.
  • One record per finding. Two runs at the same moment used to write the same new finding twice. They now take a lock and write it once.

Changed

  • Running lattice-scan with nothing used to fail with exit status 2 and a message; it now does the daily check and exits 0 unless Lattice or the list cannot be reached.
  • A run that has to wait for the keyless limit takes longer than before in exchange for not failing. With a key there is no waiting.

Known limits

  • recent lists what was recently added, and matches by product name. An empty or all-unmatch result is not the same as safe.
  • The hourly (20) and daily (60) keyless allowances still end a run; a key lifts them.
  • The host check is tested on Debian-family hosts.

Install and verify

  • PyPI: pip install lattice-scan==0.3.3, or uv tool upgrade lattice-scan
  • Claude Code: /plugin install lattice-scan --marketplace namiq-ai/lattice-scan
  • Signed apt repository: https://namiq.io/apt (key fingerprint C473 6154 4115 8A3E 775C 2EC2 7E61 15F4 0A41 061D, also published at https://namiq.io/lattice/docs)
  • Assets below: lattice-scan.pyz, lattice-scan_0.3.3_all.deb, the wheel, the OpenAI plugin package and SHA256SUMS. Check with sha256sum -c SHA256SUMS.

Guide to the command line, the Claude skill and the MCP server: https://namiq.io/lattice/guides/choose-your-channel

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 04 Nov 06:17
324e368

lattice-scan 0.3.2

The skill reads NamiQ's own notes first. When someone asks Claude or Codex what a CVE means, what to do about it, or whether a fix exists, the skill now points the agent at the notes NamiQ publishes before any outside site. This release changes only the text of the skill. The command-line tool behaves exactly as in 0.3.1, and what leaves the machine is unchanged.

Highlights

  • Where the skill sends the agent. A table in the skill lists NamiQ's pages and how to find each: the note for one CVE (through the sitemap, by the lowercase CVE id in the address), today's exploited-in-the-wild watch and daily highlight, all security notes, the month's highlight, the page for a weakness class (CWE), and the analysis report behind a note. They carry their sources and need no key.
  • Same rules as before. The skill quotes a note's mitigations and never applies them. It says what the tool printed, as candidates for a person to confirm, and never calls a host vulnerable or safe.
  • The OpenAI package attached to this release carries the same skill text, without the key procedure, as before.

Known limits

  • Notes exist for the CVEs NamiQ has written about, not for every CVE. When there is none, the skill says so and goes on to outside sources.
  • recent lists what was recently added, and matches by product name. An empty or all-unmatch result is not the same as safe.
  • The host check is tested on Debian-family hosts.

Install and verify

  • PyPI: pip install lattice-scan==0.3.2, or uv tool upgrade lattice-scan
  • Claude Code: /plugin install lattice-scan --marketplace namiq-ai/lattice-scan
  • Signed apt repository: https://namiq.io/apt (key fingerprint C473 6154 4115 8A3E 775C 2EC2 7E61 15F4 0A41 061D, also published at https://namiq.io/lattice/docs)
  • Assets below: lattice-scan.pyz, lattice-scan_0.3.2_all.deb, the wheel, the OpenAI plugin package and SHA256SUMS. Check with sha256sum -c SHA256SUMS.

Guide to the command line, the Claude skill and the MCP server: https://namiq.io/lattice/guides/choose-your-channel

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 04 Nov 05:56
97d8963

lattice-scan 0.3.1

recent reads the current list again, and gains the open list. If lattice-scan recent stopped with "the recent-CVE list has schema 'lattice-recent/3'; this lattice-scan reads lattice-recent/2", this release is the one to install. Nothing else changes: what leaves the machine, the table, the other commands and the exit codes are as in 0.3.0.

Highlights

  • recent reads the list again. namiq.io's list moved from version 2 to version 3, and 0.3.0 accepted only version 2. The tool now reads version 2 and later versions that only add fields. It checks that the period it needs is in the list, so a list that grows does not stop every installed tool. Version 1, or something that is not the list, is still refused, with a request to upgrade.
  • recent --open. The new open list holds exploited CVEs CISA added before the weekly window but within the last 30 days, overdue first. CISA's due date has passed for most of them, which says nothing about any machine. They are checked against the host in the same way as the daily and weekly lists: only the ones that may match are looked up on Lattice. --period open is the same. Weekly is still the default.

Known limits

  • recent lists what was recently added, and matches by product name. An empty or all-unmatch result is not the same as safe. For a CVE you know of, use --cve.
  • The open list needs the list's version 3; on an older list recent --open says there is no open list.
  • The host check is tested on Debian-family hosts.

Install and verify

  • PyPI: pip install lattice-scan==0.3.1, or uv tool upgrade lattice-scan
  • Signed apt repository: https://namiq.io/apt (key fingerprint C473 6154 4115 8A3E 775C 2EC2 7E61 15F4 0A41 061D, also published at https://namiq.io/lattice/docs)
  • Assets below: lattice-scan.pyz, lattice-scan_0.3.1_all.deb, the wheel, the OpenAI plugin package and SHA256SUMS. Check with sha256sum -c SHA256SUMS.

Guide to the command line, the Claude skill and the MCP server: https://namiq.io/lattice/guides/choose-your-channel

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 04 Nov 05:14
3e62d63

lattice-scan 0.3.0

A way in when you have no CVE id. Until now the tool and its Claude skill needed a CVE id to start, and an agent asked "is this server exposed?" had none. This release adds three commands and changes the skill to match. It does not change what leaves the machine: package names, versions and the inventory are still never sent.

Highlights

  • lattice-scan recent. Reads namiq.io's daily or weekly list of recent exploited and critical CVEs (--daily for the last day or two, --weekly for seven days; weekly is the default). It rules out locally every exploited entry this host cannot have, reads only the likely matches from Lattice by exact id, and lists the rest as unmatch. A critical entry that may match is WATCH (not known to be exploited, so Lattice is not asked). With no match it sends nothing to Lattice and says that this is not the same as safe.

  • lattice-scan enrich. Give it text that holds CVE ids (a npm audit or pip-audit report, an advisory, a ticket) on standard input, with --file or with --cve. Each id is read once and the table says: exploited by CISA's list, since when, patch due, CVSS, ransomware. It does not compare with the host and writes nothing.

  • lattice-scan get-key. Requests a Lattice key for a real person who gave their name, position, company and a mailbox they read, and agreed to the beta terms. Nothing is sent without --accept-terms. The key goes to a private file (mode 0600), is never printed, and later runs use it by themselves. The person gets a confirmation email; "not me" withdraws the key.

  • Retries. A Lattice request that times out (for example The handshake operation timed out) or gets 502, 503 or 504 is tried up to three times before the run stops.

  • The Claude skill starts with a "which command" table. No id: recent. Ids in pasted text: enrich. A named id: --cve. A project folder: project. It also says how to ask a person for a key, and that it never asks for one alone.

  • For OpenAI. The same skill now runs in OpenAI Codex: it is found in a clone (.agents/skills/lattice-scan), carries agents/openai.yaml, and each release attaches lattice-scan-openai-plugin-0.3.0.zip, the package for OpenAI's plugin directory. Its copy of the skill leaves out the key procedure. The package is not listed in the directory until NamiQ submits it for OpenAI's review.

What leaves the machine

  • recent downloads a public list from namiq.io. That request carries no CVE id and nothing about the host.
  • Ids that may match are sent to Lattice one at a time, as before.
  • get-key sends the name, position, company, email address and purpose you give it, to the key service, and only after --accept-terms.

Changed

  • The skill's old rule "do not request a key" is replaced by the procedure in SKILL.md section 5: ask the person, show the terms, get a clear yes, then run get-key.
  • Exit status 3 now also means enrich stopped at the limit or read fewer ids than it found.

Known limits

  • recent lists what was recently added or published. An empty or all-unmatch result does not mean the host is safe, and a CVE older than the lists is not in them: use --cve for a CVE you know of.
  • The local comparison is by product name, as in the host check. It can miss a product installed under an unrelated name, and a match is a candidate for a person to read, not a finding.
  • Without a key Lattice allows about 20 reads an hour and 60 a day. recent stays well under that; a long enrich list does not, and says which ids it did not read.
  • recent needs namiq.io's list, schema lattice-recent/2; an older tool cannot read it and an older list cannot be read by this one (the message says to upgrade).
  • The host check is tested on Debian-family hosts.

Install and verify

  • PyPI: pip install lattice-scan==0.3.0, or uv tool upgrade lattice-scan
  • Signed apt repository: https://namiq.io/apt (key fingerprint C473 6154 4115 8A3E 775C 2EC2 7E61 15F4 0A41 061D, also published at https://namiq.io/lattice/docs)
  • Assets below: lattice-scan.pyz, lattice-scan_0.3.0_all.deb, the wheel and SHA256SUMS. Check with sha256sum -c SHA256SUMS.

Guide to the command line, the Claude skill and the MCP server: https://namiq.io/lattice/guides/choose-your-channel

v0.2.3

Choose a tag to compare

@github-actions github-actions released this 04 Nov 03:49
6966151

lattice-scan 0.2.3

A narrower result table, so the part that says what matched is not cut off. This release changes only what the host check prints, and the Claude skill's instructions. It does not change which ids are sent to Lattice, what a key can do, or the records on disk.

Highlights

  • Shorter table. The header is EXPLOIT and RANSOM; results read CANDIDATE, RECORDED, unmatch, unlisted, skipped and OPEN; columns are two spaces apart; PATCH DUE is the date only; the no-match text is no package, snap, image or kernel matches. An open finding from an earlier run leads with why it matched, then when it was recorded.
  • RANSOM is known or -. - means CISA has not recorded ransomware use. It does not mean ransomware does not use the CVE.
  • Narrow terminals keep the match column. If MATCHED / COMPARED would get under 45 characters, LISTED, PRODUCT and CVSS are hidden in turn and a note under the table says so. Piped or redirected output always has every column and never cuts a cell.
  • The Claude skill explains the table. SKILL.md now describes each column, the progress lines and --quiet, and how to word RANSOM - and unlisted (never "no ransomware", never "safe").

Changed

  • A script that parsed the 0.2.2 table (EXPLOITED, RANSOMWARE, no match, not listed, OPEN (open), (in 19d) after the due date) must be updated. --json, --csv and exit codes are unchanged.
  • The progress lines and the project report's own table keep their wording.

Known limits

  • CANDIDATE is a product-name match for a person to read against the installed version. It is not a finding that the host is vulnerable; a distribution can fix a CVE under an unchanged version number.
  • unlisted means only that the CVE is not in the graph's CISA snapshot.
  • The CVE's own publication date is not shown: Lattice does not return it. PRODUCT is - for an open finding from an earlier run.
  • The host check is tested on Debian-family hosts.

Install and verify

  • PyPI: pip install lattice-scan==0.2.3, or uv tool upgrade lattice-scan
  • Signed apt repository: https://namiq.io/apt (key fingerprint C473 6154 4115 8A3E 775C 2EC2 7E61 15F4 0A41 061D, also published at https://namiq.io/lattice/docs)
  • Assets below: lattice-scan.pyz, lattice-scan_0.2.3_all.deb, the wheel and SHA256SUMS. Check with sha256sum -c SHA256SUMS.

Guide to the command line, the Claude skill and the MCP server: https://namiq.io/lattice/guides/choose-your-channel

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 04 Nov 03:17
66c6452

lattice-scan 0.2.2

One result table, with the facts you decide on. This release changes only what the host check prints. It does not change which ids are sent to Lattice, what a key can do, or the records on disk (two fields are added to new findings).

Highlights

  • One table. RESULT BY CVE now includes any open finding recorded by an earlier run, shown as OPEN with the date and reason it was recorded. The separate "N finding(s) not yet fixed" line is removed, because the table says it.
  • More columns: EXPLOITED (CISA lists the CVE as exploited in the wild), CVSS (NVD score), LISTED (date CISA added it), PATCH DUE (CISA's due date, with days left or days late) and RANSOMWARE (known, not recorded or -).
  • Console-style layout, as in docker ps and kubectl get: upper-case header, no dashed rule, one line per row, cells never wrap. Piped or redirected output keeps the whole text so grep and awk work; on a terminal the last column is cut with an ellipsis. A project report with --width still holds that width.

Changed

  • A script that parsed the old table header (CISA list, dashed rule, wrapped cells) or the "not yet fixed" line must be updated. --json, --csv and exit codes are unchanged.
  • New findings store ransomware and cvss. Older findings show - in those columns until the CVE is read again.

Known limits

  • RANSOMWARE: not recorded means CISA has not recorded ransomware use. It does not mean ransomware does not use the CVE. EXPLOITED: no means only that the CVE is not in the graph's CISA snapshot.
  • The CVE's own publication date is not shown: Lattice does not return it.
  • PRODUCT is - for an open finding from an earlier run.
  • A match is a candidate for a person to read, not a finding. The host check is tested on Debian-family hosts.

Install and verify

  • PyPI: pip install lattice-scan==0.2.2, or uv tool upgrade lattice-scan
  • Signed apt repository: https://namiq.io/apt (key fingerprint C473 6154 4115 8A3E 775C 2EC2 7E61 15F4 0A41 061D, also published at https://namiq.io/lattice/docs)
  • Assets below: lattice-scan.pyz, lattice-scan_0.2.2_all.deb, the wheel and SHA256SUMS. Check with sha256sum -c SHA256SUMS.

Guide to the command line, the Claude skill and the MCP server: https://namiq.io/lattice/guides/choose-your-channel

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 03 Nov 20:01
76452c6

lattice-scan 0.2.1

See what the scan is doing, read the result as a table, and know where the detail is. This release changes what lattice-scan prints and how it judges a package that only looks like the product. It does not change which ids are sent to Lattice or what a key can do.

Highlights

  • Progress, on by default. On stderr, one line per step: each part of the host as it is collected (packages and which package manager, snaps, running container image names, kernel) with counts; each project file read with its kind (Python requirements, JavaScript lockfile, Java Maven file, Docker image file and so on) and its component count; then for each CVE [n/N], "asking Lattice (only this id is sent)", what CISA lists, what it was compared with, and whether anything matched. Package names and versions are never printed. --quiet (-q) or LATTICE_SCAN_PROGRESS=0 turns it off.
  • A result table. The host check and the console project report print RESULT BY CVE: the CVE, whether CISA lists it, the product, the result (CANDIDATE, no match, not listed, skipped, or the project verdict) and what matched or was compared. --json output carries the same rows as a checked list per project.
  • The detail files are named. A DETAILED RESULT FILES section says where the full detail is: for the host, the private records folder and what each file holds (findings.jsonl, scan.log, inventory.json, runs.jsonl), with the list, impact and resolve commands; for a project, the --csv and --json files you asked for, or how to ask for one.
  • A new verdict, lead. A package that only shares a scope or name with the product (@vitejs/plugin-react for Vite), or is its client library (the PyPI minio for the MinIO server), is a lead. Its version is never compared with the product's ranges, it has its own summary column, and it ranks below every real comparison, so it no longer inflates the in-range or undetermined counts.

Changed

  • stderr now carries progress lines by default. Standard output keeps its form, with the result table and the detail-files section added to the host check and the console report. --format csv, --format json, exit codes and the records on disk are unchanged. A script or CI job that expects an empty stderr should pass --quiet.
  • A JSON result gains checked per project, and a finding may carry "verdict": "lead". Code that reads the JSON should accept both.

Known limits

  • A match is a candidate for a person to read, not a finding. A distribution can fix a CVE under an unchanged version number, and a lockfile may not be what runs.
  • The progress and tables describe what lattice-scan did. They do not mean a host is safe: a CVE that is not listed is only not listed in the graph's snapshot.
  • The host check is tested on Debian-family hosts. On rpm and apk hosts the inventory is collected but matching is not tested.
  • The project check does not read composer.json.

Install and verify

  • PyPI: pip install lattice-scan==0.2.1, or uv tool upgrade lattice-scan
  • Signed apt repository: https://namiq.io/apt (key fingerprint C473 6154 4115 8A3E 775C 2EC2 7E61 15F4 0A41 061D, also published at https://namiq.io/lattice/docs)
  • Assets below: lattice-scan.pyz, lattice-scan_0.2.1_all.deb, the wheel and SHA256SUMS. Check with sha256sum -c SHA256SUMS.

Guide to the command line, the Claude skill and the MCP server: https://namiq.io/lattice/guides/choose-your-channel