Skip to main content

Newskit

ci licence MIT version

English | Français

Automated topic monitoring for Claude Code. You name a subject and give a few sources; at regular intervals Newskit collects them, writes one note per item, extracts the concepts and how they relate, and keeps a knowledge graph up to date, within a spending cap. Two things set it apart from a feed reader: every answer drawn from the graph cites its note and its line, and the graph extends itself to new themes and new sources.

For developers who already use Claude Code: every model call goes through claude -p, under your own Claude subscription. Notes, feed and newsletter are written in French; an English translation can be added (traductions: [en]).

governance.news, an AI governance media built on Newskit

governance.news: a newsletter and a knowledge graph on AI governance in business, built on Newskit.

What you get

All of it lives in your media folder, as plain files:

  • Notes: one Markdown file per collected item, under sources/, with its title, author, date and address.
  • The graph: graphe/<name>/graphe.json, its map (carte.md, the main themes and their concepts) and the report of each pass (ROUTINE.md).
  • Answers with their source: newskit query searches the graph without any model call and gives, for each answer, the note and the line that support it.
  • A feed and a newsletter: short posts on the latest items (fil.json) and a newsletter of the graph, sent through your own delivery module (diffusion: in config.yaml).
$ newskit query --graph ai-governance sources "general-purpose AI model"
  Sources attestant « General-purpose AI models »
    sources/ai_compliance/rss/ec_digital/2026-08-02_navigating-ai-act.md L211

Quick start

You need Python 3.12 or later, git, macOS or Linux, and a logged-in Claude Code (claude).

The words used below: the media is your project folder; it holds one or more graphs; each graph follows subjects; a pass collects the graph's sources and writes one note per item.

  1. Install the engine and test it in an empty folder:

    pip install newskit
    mkdir my-media && cd my-media
    newskit test
    

    The test runs one full pass on a sample graph (medieval beekeeping), with model answers replayed from a recording: no paid call, about one minute. It must end with « témoin vert » (test passed).

  2. Open Claude Code in that folder (claude) and install the plugin:

    /plugin marketplace add lfoletti/newskit
    /plugin install newskit@newskit
    
  3. Ask Claude to follow a subject: “start a monitoring graph on urban gardening”. The newskit skill asks its questions, writes config.yaml and sources.yaml, suggests themes drawn from the sources you give, creates the graph and runs a first pass in front of you.

  4. Read the result: graphe/<name>/ROUTINE.md for the report, newskit query --graph <name> search "…" for the graph.

  5. Schedule the next passes. newskit new-graph has written the graph's task under taches/ and printed the two sudo lines that install it in launchd (macOS). On Linux, add a cron line at each time of passages that runs newskit test then newskit run --graph <name> --scheduled; on a day outside the interval, the scheduled run stops by itself.

Sources

Sources are declared in sources.yaml, next to config.yaml, one block per source, each tied to a graph. Supported: RSS feeds, sitemaps and listing pages (for sites without a feed), Substack, Medium, LinkedIn newsletters, arXiv, journals by ISSN, OpenAlex, GitHub and Hugging Face searches, an e-mail inbox, and local folders of Markdown or PDF files.

version: 1
sources:
  - cle: city_farmer
    plateforme: Flux RSS
    nom: City Farmer News
    dossier: potagers/rss
    abonnement: gratuit
    graphe: potagers-urbains
    flux: https://cityfarmer.info/feed/
  - cle: soil_papers
    plateforme: OpenAlex
    nom: OpenAlex, urban soil
    dossier: potagers/openalex
    abonnement: gratuit
    graphe: potagers-urbains
    requetes: ["urban allotment soil contamination"]

The skill writes this file for you from the addresses you give; a source the engine cannot read is refused with its reason.

How the graph grows

The graph does not stay within the subjects you declared at the start: it expands.

  • New themes. After each pass, the engine looks for clusters of concepts that none of the declared subjects covers. A candidate that comes back three passes in a row joins the subjects; the sources and searches follow it.
  • Auto-completion. A question the graph could not answer becomes a search for the next pass. A web scout searches the declared subjects; a question agent probes the graph the way a practitioner would; what a language model considers essential and the graph lacks becomes a shopping list of sources to find.
  • The source list. The engine assesses a candidate domain before it is declared, and keeps track of every source a user drops in (a link sent from the browser). A source that keeps failing is audited and, when a route exists, repaired on its own (see accesspath below).
  • Clean concepts. The same concept found under several labels (a translation, an acronym, a variant) is merged after a model confirms it is exactly the same concept; refusals are kept and never asked again.

The media folder

The media is a folder that holds a config.yaml. The engine attaches to it: the NEWSKIT_DONNEES variable first, otherwise the current folder. The code stays in the installed package; the data (notes, graph, cost ledger) live in the media folder.

version: 1
media:
  nom: potagers               # name: lowercase, digits and hyphens
  langue: fr                  # language of the prompts and of the publication
  traductions: [en]           # translated feed and newsletter; none by default
  passages: {tous_les: 1, heures: ["05:30"]}   # every N days, at these times
  # service_maj: kg-maj       # the server service started over ssh after a pass; none by default
  # cerveau_du_site: media-site    # the Thalamus brain of the site graph; "<media>/<graph>" by default
  # cerveau_lacunes: media-lacunes # the Thalamus brain of reported gaps; "lacunes-signalees" by default
modeles:                      # one model per role; a missing role keeps its default
  extraction: claude-opus-5-5
  redaction: claude-sonnet-5-5
sources: sources.yaml         # the source list, kept apart
# registre_des_graphes: graphes.json   # labels and declared subjects, kept by the engine (default)
graphes:
  potagers-urbains:
    libelle: Potagers urbains   # label
    domaine: "urban gardening: allotments, soil, seed exchange"   # the domain, in English, for extraction

newskit media shows what was read; an unknown field is refused and named. The roles: extraction (reading a note and drawing its concepts), analyse (judging a whole graph), redaction (summaries and newsletter), lecture (deciding whether two labels are the same concept), traduction (translation), questions (training questions for the local encoder).

Cost

Every model call goes through your subscription and counts against its usage limits; the cost ledger records each one at its API-equivalent price, so you can see where the usage goes (newskit costs --by graph). Concept extraction is the main item: measured on governance.news, about $0.25 per note with the default model (Opus), so about $10 per pass at the default cap of 40 notes. The cap is set per graph (--cap of newskit new-graph).

Commands

Command What it does
newskit the commands, one line each
newskit media the media as read: language, translations, passages, model per role
newskit new-graph <name> creates a graph, or says what it lacks (--check)
newskit run --graph <name> one pass: collection, notes, concept extraction within the cap, graph
newskit query --graph <name> search "…" queries the graph, no model call; each answer carries its provenance
newskit costs --by graph spending over the last seven days
newskit test tries the engine on a sample graph, at no cost; a real pass starts only after a successful test the same day

Safeguards

  • The test. Before the real pass, the engine runs newskit test on the sample graph with recorded answers. The real pass starts only if a test passed the same day with the same engine version. An engine update therefore cannot break a pass unnoticed: it stops before spending anything.
  • The caps. Each step has its own cap on notes and on spending; every model call is written to the cost ledger, under a step and a graph.
  • The usage limit. After three usage limits in a row, the engine sets a marker that lasts three hours. The plugin's hook then refuses any model call started from Claude Code.

Works with

Newskit relies on:

  • graphify, installed with the package. Reads the structure of the documents, validates each extraction against the schema, builds the graph and splits it into communities.
  • trafilatura, installed with the package. Main text extraction from web pages.
  • pytest, installed with the package: newskit test runs on it.

The following tools extend its features when they are installed:

  • accesspath (sap). Website access audit. When a source keeps failing, Newskit asks sap which route still reaches it (RSS feed, API, sitemap, plain HTML, browser) and repairs the source.
  • cortexdb. AI memory and knowledge graph in one SQLite file. A graph can be loaded into a cortexdb brain, each relation tied to the passage that supports it, and queried from any MCP client.
  • thalamus. A governance layer over cortexdb for an organisation's shared knowledge. Questions left unanswered by its clients return to the engine as searches.

Limits of version 0.1

  • The prompts to the models are written in French; the only translation is English.
  • macOS and Linux. Scheduled passes run through launchd on macOS; on Linux, through a cron line.
  • newskit new-graph writes the graph's scheduled task under taches/, ready to install in /Library/LaunchDaemons.

Contributing

See CONTRIBUTING.md. Report a vulnerability privately: SECURITY.md.

Licence

MIT.

Metadata

Release files for newskit 0.1.15

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for newskit 0.1.15
File Size Uploaded Provenance Actions
newskit-0.1.15.tar.gz 1.8 MB With provenance Details for newskit-0.1.15.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for newskit 0.1.15
File Interpreter ABI Platform Actions
newskit-0.1.15-py3-none-any.whl Python 3 none any Details for newskit-0.1.15-py3-none-any.whl

Total release size: 3.5 MB

Release files / newskit-0.1.15.tar.gz

Download URL newskit-0.1.15.tar.gz
Size 1.8 MB
Tags Source
SHA-256 checksum
How to use checksums
1a7f295c911194dbb547f882afacde4f6f1a37c490cf036501a356f17d347afb
BLAKE2b-256 checksum
How to use checksums
ea8c52ca06e2bdfb8ffc5bed05e92907f69936c74c31625e7d71deeea3be650c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

Release files / newskit-0.1.15-py3-none-any.whl

Download URL newskit-0.1.15-py3-none-any.whl
Size 1.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
43a85b495c215d88dac0c8c4167f31e0092e6c32ec56df75447fb84c07ea340a
BLAKE2b-256 checksum
How to use checksums
9a6d19141c033bd4508977e391525d0826ba62a95aadcbac7786a1670cc3a43f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

Security for newskit 0.1.15

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for newskit-0.1.15.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page