<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Contexte tech</title>
    <description>The latest articles on DEV Community by Contexte tech (@contextetech).</description>
    <link>https://dev.to/contextetech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4145277%2Fd4fede63-a352-4dc7-903b-4547f4691562.png</url>
      <title>DEV Community: Contexte tech</title>
      <link>https://dev.to/contextetech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/contextetech"/>
    <language>en</language>
    <item>
      <title>ContexteTech is now open source: a hub for everything that adapts an AI model</title>
      <dc:creator>Contexte tech</dc:creator>
      <pubDate>Sun, 27 Sep 2026 09:16:43 +0000</pubDate>
      <link>https://dev.to/contextetech/contextetech-is-now-open-source-a-hub-for-everything-that-adapts-an-ai-model-8jb</link>
      <guid>https://dev.to/contextetech/contextetech-is-now-open-source-a-hub-for-everything-that-adapts-an-ai-model-8jb</guid>
      <description>&lt;p&gt;For the past six months, I've spent a good part of my days "adapting" language models to real use cases: a system prompt here, three few-shot examples there, an MCP server so the assistant can read my files, a LoRA config when prompting isn't enough. And every time, the same frustration: these building blocks are scattered everywhere. A prompt in a gist, a dataset on Hugging Face, an MCP server in a README, a Claude Code config buried in some project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ContexteTech&lt;/strong&gt; came out of that: one place for everything that adapts an AI model, organised, tested and ready to copy. The site is live at &lt;a href="https://contextetech.com" rel="noopener noreferrer"&gt;contextetech.com&lt;/a&gt;, and the code of its first version (v1) is now free software.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's in it
&lt;/h2&gt;

&lt;p&gt;Eleven resource types, in three families:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Production&lt;/strong&gt; (use the model without changing it): contexts, prompts, agents, RAG pipelines;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training&lt;/strong&gt; (change the model): fine-tuning datasets, LoRA configs, evaluations;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensions&lt;/strong&gt; (give it tools): MCP servers, skills, harnesses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each page exports straight to the target tool's format: JSONL for a dataset, &lt;code&gt;SKILL.md&lt;/code&gt; for a skill, &lt;code&gt;CLAUDE.md&lt;/code&gt; and &lt;code&gt;settings.json&lt;/code&gt; for a harness, the &lt;code&gt;mcpServers&lt;/code&gt; block for an MCP server.&lt;/p&gt;

&lt;p&gt;Two things mattered to me, because they are missing elsewhere:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"Tested on"&lt;/strong&gt;: every resource can list the models it was tried on, with the result (passed, partial, failed) and a score. A prompt that works on one model and not another is everyday life, so let's write it down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk level for MCP servers and harnesses&lt;/strong&gt;: before installing a server, you want to know whether it reads files, writes them, goes online or runs commands. The page shows it plainly.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  A concrete example
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The need.&lt;/strong&gt; A small company wants an LLM to summarise its support tickets. The catch: tickets contain names, phone numbers and bank details. Sending them as-is to a third-party service is a personal-data leak, and a GDPR problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The answer on ContexteTech.&lt;/strong&gt; Instead of hunting for ten resources in ten places, you follow one chain:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the &lt;strong&gt;context&lt;/strong&gt; &lt;a href="https://contextetech.com/en/contexts/anonymisation-rgpd-pekk5y" rel="noopener noreferrer"&gt;anonymisation-rgpd&lt;/a&gt; replaces personal data with tags before anything is sent:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Input:  Bonjour, je suis Marie Dupont, joignable au 06 12 34 56 78.
Output: Bonjour, je suis [PRENOM_1] [NOM_1], joignable au [TELEPHONE_1].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;the &lt;strong&gt;evaluation&lt;/strong&gt; &lt;a href="https://contextetech.com/en/evals/eval-anonymisation-rgpd-1lx4w2h" rel="noopener noreferrer"&gt;eval-anonymisation-rgpd&lt;/a&gt; checks that nothing leaks, with ready-to-run test cases;&lt;/li&gt;
&lt;li&gt;when prompting is not enough, the &lt;strong&gt;dataset&lt;/strong&gt; &lt;a href="https://contextetech.com/en/datasets/anonymisation-rgpd-fr-1muzget" rel="noopener noreferrer"&gt;anonymisation-rgpd-fr&lt;/a&gt; and the &lt;strong&gt;LoRA config&lt;/strong&gt; &lt;a href="https://contextetech.com/en/lora/mistral7b-anonymisation-qlora-187bztw" rel="noopener noreferrer"&gt;mistral7b-anonymisation-qlora&lt;/a&gt; let you fine-tune a small model that runs locally;&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;agent&lt;/strong&gt; &lt;a href="https://contextetech.com/en/agents/agent-tri-documents-wn0rgt" rel="noopener noreferrer"&gt;agent-tri-documents&lt;/a&gt; and the &lt;strong&gt;MCP server&lt;/strong&gt; &lt;a href="https://contextetech.com/en/mcp-servers/mcp-filesystem-1lkmh25" rel="noopener noreferrer"&gt;mcp-filesystem&lt;/a&gt; automate processing a whole folder.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One need, one chain of linked resources, each exportable in the right format.&lt;/p&gt;

&lt;h2&gt;
  
  
  Under the hood
&lt;/h2&gt;

&lt;p&gt;I wanted a simple, fast, fully self-hostable stack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Site&lt;/strong&gt;: server-rendered &lt;a href="https://astro.build" rel="noopener noreferrer"&gt;Astro&lt;/a&gt;, with a few &lt;a href="https://svelte.dev" rel="noopener noreferrer"&gt;Svelte&lt;/a&gt; islands only where interactivity is needed (publishing form, like button). Everything else is plain HTML; the home page weighs about 16 KB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: &lt;a href="https://fastapi.tiangolo.com" rel="noopener noreferrer"&gt;FastAPI&lt;/a&gt; with async SQLAlchemy, PostgreSQL 17 for data, Redis for caching and rate limits. The cache is invalidated by a single version counter bumped on every write: no fine-grained purging to manage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network&lt;/strong&gt;: Caddy in front (automatic TLS, HTTP/3), then the European CDN Bunny (Slovenia) for static files, cached for a year thanks to hashed file names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Five languages&lt;/strong&gt; (French, English, Spanish, German, Italian). One SEO subtlety: a resource written in French is only indexed in French; its &lt;code&gt;/en/…&lt;/code&gt; versions translate the interface but point to the original as canonical. Otherwise Google sees five copies of the same text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readable, unique URLs&lt;/strong&gt;: &lt;code&gt;/prompts/resume-article-technique-k3j9a2&lt;/code&gt;. The suffix is an FNV-1a hash of the internal id, computed identically in Python and JavaScript, so two authors can pick the same name without collisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No trackers&lt;/strong&gt;: no advertising cookies; traffic is measured with self-hosted Plausible, without cookies or personal data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A sovereign project
&lt;/h2&gt;

&lt;p&gt;ContexteTech is built and hosted in Europe, without depending on the big US cloud providers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Server and database&lt;/strong&gt; at Scaleway, in France (managed PostgreSQL, dedicated server);&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CDN and DNS&lt;/strong&gt; at Bunny, a European company based in Slovenia;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;E-mail&lt;/strong&gt; through Proton, in Switzerland, encrypted and signed (SPF, DKIM, DMARC);&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fonts, scripts and styles&lt;/strong&gt; served from the site itself: no Google Fonts, no third-party CDN; self-hosted, cookieless Plausible statistics;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publisher&lt;/strong&gt;: a French company, bound by the GDPR.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One deliberate exception: the code is mirrored on GitHub and GitLab, because that's where developers are. The working copy lives on our own server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AGPL-3.0
&lt;/h2&gt;

&lt;p&gt;I hesitated with Apache-2.0 (the licence of Hugging Face's libraries). I chose the &lt;strong&gt;AGPL-3.0&lt;/strong&gt;: you can use and modify ContexteTech, as long as you publish your changes if you offer it online. It's the licence used by Mastodon and Plausible, and it keeps an open hub open.&lt;/p&gt;

&lt;p&gt;The resources themselves keep the licence chosen by their author (MIT, CC BY 4.0…).&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the project stands
&lt;/h2&gt;

&lt;p&gt;It's early days, and I'd rather be honest: the catalogue starts with one resource per type, built around one concrete use case (anonymising French text before sending it to a third-party service). What it needs most is your resources, your feedback and your tests.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The site: &lt;a href="https://contextetech.com" rel="noopener noreferrer"&gt;contextetech.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The v1 code: &lt;a href="https://github.com/contexte-tech/contextetech" rel="noopener noreferrer"&gt;github.com/contexte-tech/contextetech&lt;/a&gt; (mirrored on GitLab). The site then keeps evolving in an internally developed v2.&lt;/li&gt;
&lt;li&gt;Contributing: read &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;, or simply publish your first resource.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have a prompt you use every day, an MCP server you love or a well-tuned Claude Code config, this is the place to share it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://contextetech.com/en/articles/contextetech-open-source" rel="noopener noreferrer"&gt;contextetech.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
