{"id":198,"date":"2026-10-27T05:23:19","date_gmt":"2026-10-27T01:23:19","guid":{"rendered":"https:\/\/demensdeum.com\/blog\/2026\/10\/27\/freellmapi-opencode\/"},"modified":"2026-10-27T05:26:21","modified_gmt":"2026-10-27T01:26:21","slug":"freellmapi-opencode","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/fr\/2026\/10\/27\/freellmapi-opencode\/","title":{"rendered":"Mod\u00e8les gratuits pour OpenCode via FreeLLMAPI"},"content":{"rendered":"<p>OpenCode est un agent de programmation ouvert qui fonctionne dans le terminal\u00a0: lit les fichiers de projet, \u00e9dite le code, ex\u00e9cute des commandes et des tests, recherche dans le r\u00e9f\u00e9rentiel et fonctionne avec git. Il n&#8217;est pas li\u00e9 \u00e0 un seul fournisseur de mod\u00e8les, donc presque tous les services compatibles OpenAI peuvent y \u00eatre connect\u00e9s.<\/p>\n<p>FreeLLMAPI est un routeur ouvert auto-h\u00e9berg\u00e9 qui collecte les plans gratuits de dizaines de fournisseurs d&#8217;IA sous une seule adresse \/v1 compatible OpenAI. Au lieu de trente cl\u00e9s, trente limites et trente endroits o\u00f9 une requ\u00eate peut \u00e9chouer, vous disposez d&#8217;une passerelle locale et d&#8217;une cl\u00e9 unifi\u00e9e. Le routeur s\u00e9lectionne lui-m\u00eame un mod\u00e8le disponible, passe au suivant lorsque l&#8217;erreur 429 ou 5xx se produit et s&#8217;assure que les demandes ne d\u00e9passent pas les quotas des tarifs gratuits.<\/p>\n<p>Dans cet article, je d\u00e9crirai l&#8217;installation de FreeLLMAPI, l&#8217;ajout de fournisseurs et la connexion de la passerelle \u00e0 OpenCode.<\/p>\n<h2>Ce dont vous avez besoin<\/h2>\n<p>Pour travailler, vous avez besoin de quatre choses :<\/p>\n<ul>\n<li><b>OpenCode install\u00e9.<\/b> Si l&#8217;agent n&#8217;est pas encore install\u00e9, j&#8217;ai discut\u00e9 de la proc\u00e9dure d&#8217;installation dans une note s\u00e9par\u00e9e sur OpenCode et DeepSeek.<\/li>\n<li><b>FreeLLMAPI en cours d&#8217;ex\u00e9cution.<\/b> Le moyen le plus simple consiste \u00e0 installer une application de bureau ou un conteneur Docker.<\/li>\n<li><b>Node.js 20.18 ou version ult\u00e9rieure.<\/b> Ceci est n\u00e9cessaire pour le g\u00e9n\u00e9rateur CLI qui configure OpenCode. OpenCode lui-m\u00eame peut \u00eatre install\u00e9 sans Node.<\/li>\n<li><b>Cl\u00e9s d&#8217;au moins un fournisseur.<\/b> Les forfaits gratuits de Google AI Studio, Groq, Cerebras, Mistral, OpenRouter, NVIDIA, HuggingFace et d&#8217;autres services du catalogue conviennent.<\/li>\n<\/ul>\n<h2>Installation de FreeLLMAPI<\/h2>\n<p>Le projet comporte plusieurs chemins d&#8217;installation. Choisissez celui qui convient le mieux \u00e0 votre syst\u00e8me.<\/p>\n<h3>Application de bureau<\/h3>\n<p>L&#8217;option la plus simple pour Windows et macOS est le programme d&#8217;installation pr\u00eat \u00e0 l&#8217;emploi de la page des versions. Sous Windows, il s&#8217;agit de .exe, sur macOS, il s&#8217;agit de .dmg pour Apple Silicon ou Intel. L&#8217;application r\u00e9side dans le bac et \u00e9l\u00e8ve localement le routeur ainsi que le panneau de commande.<\/p>\n<p>Aucun mot de passe n&#8217;est n\u00e9cessaire pour la version de bureau : le panneau se connecte tout seul via un compte local masqu\u00e9. Les seules informations d&#8217;identification dont vous aurez besoin sont la cl\u00e9 unifi\u00e9e de la fen\u00eatre contextuelle de la barre d&#8217;\u00e9tat syst\u00e8me ou de l&#8217;en-t\u00eate de la page Cl\u00e9s.<\/p>\n<p>Les donn\u00e9es de l&#8217;application se trouvent dans un r\u00e9pertoire\u00a0:<\/p>\n<ul>\n<li><b>Windows<\/b> \u2014 %APPDATA%\\FreeLLMAPI\\<\/li>\n<li><b>macOS<\/b> \u2014 ~\/Library\/Application Support\/FreeLLMAPI\/<\/li>\n<li><b>Linux<\/b> \u2014 ~\/.config\/FreeLLMAPI\/<\/li>\n<\/ul>\n<h3>Docker<\/h3>\n<p>Si Docker est d\u00e9j\u00e0 install\u00e9, le serveur est lanc\u00e9 avec une seule commande. Le script cr\u00e9e le r\u00e9pertoire ~\/freellmapi, g\u00e9n\u00e8re une cl\u00e9 de chiffrement, t\u00e9l\u00e9charge l&#8217;image et d\u00e9marre le conteneur\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>curl -fsSL https:\/\/freellmapi.co\/install.sh | bash\n<\/code><\/pre>\n<\/div>\n<p>La r\u00e9ex\u00e9cution du script est s\u00e9curis\u00e9e\u00a0: le fichier .env et la cl\u00e9 de chiffrement sont enregistr\u00e9s et le conteneur est mis \u00e0 jour vers la derni\u00e8re version. Sous Windows, cette m\u00e9thode fonctionne dans WSL ou dans n&#8217;importe quel environnement bash.<\/p>\n<p>Apr\u00e8s le lancement, le panneau s&#8217;ouvre \u00e0\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>http:\/\/localhost:3001\n<\/code><\/pre>\n<\/div>\n<p>Pour l&#8217;installation du serveur, vous devez cr\u00e9er un compte avec un email et un mot de passe. En cas d&#8217;oubli du mot de passe, le code de r\u00e9initialisation est imprim\u00e9 dans le journal du conteneur\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>docker compose logs -f freellmapi\n<\/code><\/pre>\n<\/div>\n<h3>Docker Compose<\/h3>\n<p>Si vous souhaitez conserver la configuration dans git et g\u00e9rer le lancement manuellement, Compose standard fera l&#8217;affaire. Sous macOS et Linux\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>git clone https:\/\/github.com\/tashfeenahmed\/freellmapi.git\ncd freellmapi\nENCRYPTION_KEY=\"$(openssl rand -hex 32)\"\nprintf \"ENCRYPTION_KEY=%s\\nPORT=3001\\n\" \"$ENCRYPTION_KEY\" > .env\ndocker compose up -d\n<\/code><\/pre>\n<\/div>\n<p>Sous Windows PowerShell\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>git clone https:\/\/github.com\/tashfeenahmed\/freellmapi.git\ncd freellmapi\n$Bytes = New-Object Byte[] 32\n[Security.Cryptography.RandomNumberGenerator]::Create().GetBytes($Bytes)\n$ENCRYPTION_KEY = -join ($Bytes | ForEach-Object { \"{0:x2}\" -f $_ })\n\"ENCRYPTION_KEY=$ENCRYPTION_KEY`nPORT=3001\" | Out-File -Encoding utf8 .env\ndocker compose up -d\n<\/code><\/pre>\n<\/div>\n<p>La cl\u00e9 ENCRYPTION_KEY est obligatoire : elle permet de chiffrer les cl\u00e9s du fournisseur dans la base de donn\u00e9es SQLite. Vous ne pouvez pas le modifier \u00e0 la vol\u00e9e &#8211; les anciens secrets ne seront plus d\u00e9chiffr\u00e9s. Pour la rotation, le projet dispose d&#8217;une commande s\u00e9par\u00e9e rotate-encryption-key.<\/p>\n<h3>Ex\u00e9cuter \u00e0 partir des sources<\/h3>\n<p>Pour le d\u00e9veloppement ou le d\u00e9bogage, vous pouvez ex\u00e9cuter le projet via Node.js\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>git clone https:\/\/github.com\/tashfeenahmed\/freellmapi.git\ncd freellmapi\nnpm install\nENCRYPTION_KEY=\"$(node -e 'console.log(require(\"crypto\").randomBytes(32).toString(\"hex\"))')\"\nprintf \"ENCRYPTION_KEY=%s\\nPORT=3001\\n\" \"$ENCRYPTION_KEY\" > .env\nnpm run dev\n<\/code><\/pre>\n<\/div>\n<p>Dans ce mode, l&#8217;API et le panneau sont activ\u00e9s sur le port 3001 et l&#8217;interface Vite est activ\u00e9e sur le port 5173.<\/p>\n<h2>Premier lancement et cl\u00e9s du fournisseur<\/h2>\n<p>Ouvrez le panneau, acc\u00e9dez \u00e0 la page <b>Cl\u00e9s<\/b> et ajoutez les cl\u00e9s des services que nous utilisons. Pour chaque fournisseur, l&#8217;interface propose un lien vers l&#8217;inscription et une indication o\u00f9 obtenir la cl\u00e9. Il suffit de commencer par un ou deux : par exemple, Google AI Studio et Groq.<\/p>\n<p>Une fois ajout\u00e9e, la cl\u00e9 subit un bilan de sant\u00e9. Si le fournisseur a r\u00e9pondu par une erreur, la cl\u00e9 restera dans la liste, mais sera marqu\u00e9e comme non saine &#8211; elle peut \u00eatre v\u00e9rifi\u00e9e \u00e0 nouveau ou supprim\u00e9e.<\/p>\n<p>Ensuite, vous devez acc\u00e9der \u00e0 la page <b>Mod\u00e8les<\/b> et voir quels mod\u00e8les sont disponibles. L\u00e0, vous pouvez \u00e9galement configurer la strat\u00e9gie de routage et l&#8217;ordre de la <b>Cha\u00eene de secours<\/b> &#8211; la cha\u00eene le long de laquelle le routeur parcourt en cas d&#8217;erreurs et de limites. Le mod\u00e8le <b>auto<\/b> signifie que le choix est fait par le routeur lui-m\u00eame. En plus de cela, des options telles que <b>auto:fast<\/b>, <b>auto:smart<\/b> et des profils nomm\u00e9s pour des t\u00e2ches sp\u00e9cifiques sont disponibles.<\/p>\n<p>Il convient \u00e9galement de v\u00e9rifier qu\u2019il existe des mod\u00e8les dans la cha\u00eene prenant en charge les outils. OpenCode utilise activement les appels d&#8217;outils, et un mod\u00e8le sans cette fonctionnalit\u00e9 ne pourra pas lire les fichiers ou ex\u00e9cuter des commandes normalement.<\/p>\n<p>La cl\u00e9 unifi\u00e9e se trouve l\u00e0, sur la page <b>Cl\u00e9s<\/b> ou dans la barre d&#8217;\u00e9tat de l&#8217;application de bureau. Cela ressemble \u00e0 une cha\u00eene avec un pr\u00e9fixe\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>freellmapi-...\n<\/code><\/pre>\n<\/div>\n<p>C&#8217;est cette cl\u00e9, et non les cl\u00e9s des fournisseurs individuels, qui est indiqu\u00e9e dans OpenCode.<\/p>\n<h2>Connectez-vous \u00e0 OpenCode<\/h2>\n<p>FreeLLMAPI dispose d&#8217;un g\u00e9n\u00e9rateur de configuration qui lit lui-m\u00eame le r\u00e9pertoire mod\u00e8le de la passerelle en cours d&#8217;ex\u00e9cution, cr\u00e9e une copie de sauvegarde de la configuration existante et y ajoute soigneusement le fournisseur.<\/p>\n<p>Tout d\u2019abord, d\u00e9finissons la cl\u00e9 unifi\u00e9e sur la variable d\u2019environnement. Le g\u00e9n\u00e9rateur le lit au lieu d&#8217;un indicateur s\u00e9par\u00e9, de sorte que le secret ne se retrouvera pas dans l&#8217;historique des commandes.<\/p>\n<p>Sous macOS et Linux\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>export FREELLMAPI_API_KEY=freellmapi-YOUR_KEY\n<\/code><\/pre>\n<\/div>\n<p>Sous Windows PowerShell\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>$env:FREELLMAPI_API_KEY=\"freellmapi-YOUR_KEY\"\n<\/code><\/pre>\n<\/div>\n<p>Voyons maintenant ce qui sera exactement enregistr\u00e9\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>npx freellmapi setup-opencode --url http:\/\/localhost:3001 --dry-run\n<\/code><\/pre>\n<\/div>\n<p>Si diff est satisfaisant, r\u00e9p\u00e9tez la commande sans le flag\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>npx freellmapi setup-opencode --url http:\/\/localhost:3001\n<\/code><\/pre>\n<\/div>\n<p>Le g\u00e9n\u00e9rateur \u00e9crit la configuration globale OpenCode\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>~\/.config\/opencode\/opencode.json\n<\/code><\/pre>\n<\/div>\n<p>Le fournisseur freellmapi y appara\u00eet avec le package @ai-sdk\/openai-compatible, l&#8217;adresse de base http:\/\/localhost:3001\/v1 et une carte des mod\u00e8les du catalogue live. Le mod\u00e8le par d\u00e9faut devient freellmapi\/auto.<\/p>\n<p>La cl\u00e9 elle-m\u00eame ne finit pas dans le fichier : la config contient la substitution {env:FREELLMAPI_API_KEY}. Par cons\u00e9quent, la variable doit rester d\u00e9finie au d\u00e9marrage de l&#8217;agent\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>opencode\n<\/code><\/pre>\n<\/div>\n<p>Cette m\u00e9thode est \u00e9galement pratique car le secret ne se retrouve pas dans la configuration et ne se retrouvera pas dans git. Pour les ex\u00e9cutions CI et uniques, c&#8217;est plus correct que de stocker la cl\u00e9 dans un fichier.<\/p>\n<h2>R\u00e9glage manuel<\/h2>\n<p>Si vous ne souhaitez pas ex\u00e9cuter le g\u00e9n\u00e9rateur, vous pouvez d\u00e9crire manuellement le fournisseur dans opencode.json. L&#8217;option minimale ressemble \u00e0 ceci\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>{\n  \"$schema\": \"https:\/\/opencode.ai\/config.json\",\n  \"model\": \"freellmapi\/auto\",\n  \"provider\": {\n    \"freellmapi\": {\n      \"npm\": \"@ai-sdk\/openai-compatible\",\n      \"name\": \"FreeLLMAPI\",\n      \"options\": {\n        \"baseURL\": \"http:\/\/localhost:3001\/v1\",\n        \"apiKey\": \"{env:FREELLMAPI_API_KEY}\"\n      },\n      \"models\": {\n        \"auto\": {\n          \"name\": \"FreeLLMAPI Auto Router\",\n          \"limit\": { \"context\": 1048576, \"output\": 65536 }\n        }\n      }\n    }\n  }\n}\n<\/code><\/pre>\n<\/div>\n<p>Le champ mod\u00e8le au niveau sup\u00e9rieur est important : sans lui, OpenCode peut continuer \u00e0 utiliser le mod\u00e8le pr\u00e9c\u00e9dent ou ne rien s\u00e9lectionner sur une nouvelle installation. Il est pr\u00e9f\u00e9rable de prendre le contexte et les limites de sortie de la r\u00e9ponse de la passerelle, plut\u00f4t que de les inventer\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>curl http:\/\/localhost:3001\/v1\/models\n<\/code><\/pre>\n<\/div>\n<p>Vous pouvez ajouter des identifiants sp\u00e9cifiques \u00e0 la liste des mod\u00e8les si vous devez y acc\u00e9der manuellement. Mais pour le travail quotidien, l&#8217;auto suffit : le routeur lui-m\u00eame s\u00e9lectionnera un mod\u00e8le vivant et commutera lorsque la limite sera atteinte.<\/p>\n<h2>Comment l&#8217;utiliser<\/h2>\n<p>Apr\u00e8s avoir lanc\u00e9 opencode, la liste des mod\u00e8les s&#8217;ouvre avec une commande famili\u00e8re\u00a0:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>\/models\n<\/code><\/pre>\n<\/div>\n<p>Il aura un fournisseur FreeLLMAPI et un mod\u00e8le automatique. Ensuite, le travail se d\u00e9roule comme d&#8217;habitude\u00a0: nous d\u00e9crivons la t\u00e2che, sp\u00e9cifions les fichiers via @, changeons de mode de planification avec la touche Tab, annulons les modifications avec la commande \/undo. Pour un nouveau projet, il est utile d&#8217;ex\u00e9cuter \/init pour que l&#8217;agent cr\u00e9e AGENTS.md.<\/p>\n<p>Quelques conseils pratiques :<\/p>\n<ul>\n<li><b>Routage.<\/b> Pour la routine, laissez-le sur automatique. Si vous avez besoin de rapidit\u00e9, essayez auto:fast, si la qualit\u00e9 est auto:smart ou un mod\u00e8le puissant sp\u00e9cifique du catalogue.<\/li>\n<li><b>Diagnostics<\/b> Chaque r\u00e9ponse de passerelle contient un en-t\u00eate X-Routed-Via avec le nom du fournisseur et le mod\u00e8le qui a r\u00e9ellement servi la requ\u00eate. Il montre o\u00f9 le routeur a envoy\u00e9 la t\u00e2che.<\/li>\n<li><b>Analytics.<\/b> Sur la page Analytics, le panneau affiche le volume de demandes, le succ\u00e8s, les retards p50\/p95 et la consommation de jetons par fournisseur.<\/li>\n<li><b>Continuit\u00e9 du dialogue.<\/b> Lors du changement de mod\u00e8le au milieu d&#8217;une conversation, la passerelle peut ajouter une courte note sur le transfert de contexte. Activ\u00e9 par la variable FREELLMAPI_CONTEXT_HANDOFF=on_model_switch.<\/li>\n<\/ul>\n<p>Si OpenCode s&#8217;ex\u00e9cute dans un conteneur et que FreeLLMAPI s&#8217;ex\u00e9cute sur un h\u00f4te, localhost pointera vers le conteneur lui-m\u00eame. Dans ce cas, vous devez utiliser host.docker.internal ou une autre adresse accessible depuis le conteneur dans la baseURL.<\/p>\n<h2>\u00c0 quoi faire attention<\/h2>\n<p>FreeLLMAPI ne remplace pas les mod\u00e8les payants et n&#8217;est pas un service avec un SLA. C&#8217;est un moyen de regrouper les forfaits gratuits en une seule passerelle soign\u00e9e. Il y a donc plusieurs restrictions :<\/p>\n<ul>\n<li><b>La qualit\u00e9 fluctue.<\/b> Les tarifs gratuits prennent fin et, tard dans la soir\u00e9e, \u00e0 l&#8217;approche de l&#8217;\u00e9puisement des quotas quotidiens, le routeur peut passer \u00e0 des mod\u00e8les plus faibles. Les quotas sont g\u00e9n\u00e9ralement r\u00e9initialis\u00e9s \u00e0 minuit UTC.<\/li>\n<li><b>Les latences sont variables.<\/b> Diff\u00e9rents fournisseurs r\u00e9agissent diff\u00e9remment et lors du passage \u00e0 un mod\u00e8le de sauvegarde, la demande peut prendre sensiblement plus de temps.<\/li>\n<li><b>Il n&#8217;existe pas de mod\u00e8les phares.<\/b> De bons mod\u00e8les, mais pas haut de gamme, sont disponibles dans les forfaits gratuits. Pour les architectures complexes, cela vaut la peine d&#8217;\u00eatre pris en compte.<\/li>\n<li><b>La passerelle doit \u00eatre en cours d&#8217;ex\u00e9cution.<\/b> Si l&#8217;application ou le conteneur est arr\u00eat\u00e9, OpenCode ne recevra pas de r\u00e9ponse. Le d\u00e9marrage automatique de l&#8217;application dans la barre d&#8217;\u00e9tat ou le red\u00e9marrage de la strat\u00e9gie du conteneur r\u00e9sout ce probl\u00e8me.<\/li>\n<li><b>Le projet est con\u00e7u pour un seul utilisateur.<\/b> Les cl\u00e9s du fournisseur sont stock\u00e9es localement et crypt\u00e9es, mais un panneau partag\u00e9 pour plusieurs personnes n&#8217;est pas le sc\u00e9nario pour cet outil. La cl\u00e9 unifi\u00e9e et .env doivent \u00eatre prot\u00e9g\u00e9s de la m\u00eame mani\u00e8re qu&#8217;un secret ordinaire.<\/li>\n<\/ul>\n<p>Et encore une nuance : le catalogue de mod\u00e8les se met \u00e0 jour tout seul, mais l&#8217;installation gratuite re\u00e7oit un instantan\u00e9 du catalogue avec un d\u00e9lai d&#8217;une trentaine de jours. Le forfait payant Premium acc\u00e9l\u00e8re la mise \u00e0 jour, mais il n&#8217;est pas n\u00e9cessaire de se familiariser avec le projet &#8211; le routeur lui-m\u00eame reste gratuit et ouvert.<\/p>\n<h2>Liens<\/h2>\n<p><a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi<\/a><br \/>\n<a href=\"https:\/\/freellmapi.co\/\" rel=\"noopener\" target=\"_blank\">https:\/\/freellmapi.co\/<\/a><br \/>\n<a href=\"https:\/\/freellmapi.co\/models\" rel=\"noopener\" target=\"_blank\">https:\/\/freellmapi.co\/models<\/a><br \/>\n<a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\/releases\/latest\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi\/releases\/latest<\/a><br \/>\n<a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/docs\/en\/install\/01-install.md\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/docs\/en\/install\/01-install.md<\/a><br \/>\n<a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/docs\/en\/clients\/01-agent-clients.md\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/docs\/en\/clients\/01-agent-clients.md<\/a><br \/>\n<a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/cli\/README.md\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/cli\/README.md<\/a><br \/>\n<a href=\"https:\/\/opencode.ai\/\" rel=\"noopener\" target=\"_blank\">https:\/\/opencode.ai\/<\/a><br \/>\n<a href=\"https:\/\/opencode.ai\/docs\/\" rel=\"noopener\" target=\"_blank\">https:\/\/opencode.ai\/docs\/<\/a><br \/>\n<a href=\"https:\/\/opencode.ai\/docs\/providers\/\" rel=\"noopener\" target=\"_blank\">https:\/\/opencode.ai\/docs\/providers\/<\/a><\/p>\n<h2>Sources<\/h2>\n<p><a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi<\/a><br \/>\n<a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/README.ru.md\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/README.ru.md<\/a><br \/>\n<a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/docs\/en\/install\/01-install.md\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/docs\/en\/install\/01-install.md<\/a><br \/>\n<a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/docs\/en\/clients\/01-agent-clients.md\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/docs\/en\/clients\/01-agent-clients.md<\/a><br \/>\n<a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/docs\/en\/clients\/02-supported-agents.md\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/docs\/en\/clients\/02-supported-agents.md<\/a><br \/>\n<a href=\"https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/cli\/README.md\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/tashfeenahmed\/freellmapi\/blob\/main\/cli\/README.md<\/a><br \/>\n<a href=\"https:\/\/opencode.ai\/docs\/providers\/\" rel=\"noopener\" target=\"_blank\">https:\/\/opencode.ai\/docs\/providers\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenCode est un agent de programmation ouvert qui fonctionne dans le terminal\u00a0: lit les fichiers de projet, \u00e9dite le code, ex\u00e9cute des commandes et des tests, recherche dans le r\u00e9f\u00e9rentiel et fonctionne avec git. Il n&#8217;est pas li\u00e9 \u00e0 un seul fournisseur de mod\u00e8les, donc presque tous les services compatibles OpenAI peuvent y \u00eatre connect\u00e9s. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-198","post","type-post","status-publish","format-standard","hentry","category-notes"],"translation":{"provider":"WPGlobus","version":"3.0.6","language":"fr","enabled_languages":["en","ru","zh","de","ja","fr","es","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"es":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":true,"content":true,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/comments?post=198"}],"version-history":[{"count":1,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/198\/revisions"}],"predecessor-version":[{"id":199,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/posts\/198\/revisions\/199"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/media?parent=198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/categories?post=198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/fr\/wp-json\/wp\/v2\/tags?post=198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}