familiarのローカルLLM開発基盤と観測
familiarの55分のデモで、Django予約システムを生成しました。AIシステム開発とLLM導入に使うローカル基盤、モデル選定、観測・復旧の実装経緯です。
はじめに
2月から3ヶ月かけて、ローカルLLMとデータ基盤をつなぐマルチエージェント開発基盤 familiar を実装しました。名前は家族と使い魔に由来します。内部aliasは、フクロウの grandpa、子猫の frisky、子狐の naughty です。

55分のデモをYouTubeに残しました。
動画リンク: https://www.youtube.com/watch?v=tSAguJzTINs
デモでは、人の介入なしでDjangoの飲食店予約システムを計画、実装、テスト、レビューしました。33コミット、約11Mトークンを使い、13テスト全パス、全レビューアーapprovedまで進みました。
Reactも軽い検証では動きました。Tauri、Flutter、Hugoなど仕事や個人開発で使う構成も用意しています。X-Role Headerには企画(Strategist)、投資(Analyst)、PR(Spokesman)の内部変数を加えました。orchestratorとworkerは役割を追加し、モデルを差し替えられます。
この基盤の開発経緯と、実装で決めたことを記録します。
familiar とは何なのか
familiarは複数のローカルLLMへ作業を分け、実行、再試行、統合まで管理します。観測と学習パイプラインも組み合わせたオンプレミスの基盤です。
人間は最初に要求を渡し、最後に確認します。将来は systemctl start familiar.service だけで開始する形を目指しています。orchestratorは計画、割当て、結果の判断、workerは実装、テスト、レビュー、視覚的デザイン、場合によっては統合を担当します。通信を依頼として扱い、完了報告、確認材料、成果物、レビュー判定を保存します。
開発では、モデルだけに任せず、実行基盤とツールで苦手な処理を補いました。失敗後も作業を続けられることを重視しています。

判断とworkerの結果を同じ時系列で追います。成功、失敗、依存の詰まり、再試行、その再現性を見ることで、指示、実行順序、ツールのどこを直すか決めます。


モデル自体の開発は費用とデータ権利の面で難しいため、ライセンスを確認したOSSを保存しています。grandpaはGLM-5.1、Kimi-K2.5、DeepSeek V4 Flashなどに置換できます。新しいモデルへ替え、蓄積したデータセットで経験を補う考えです。当時はライセンスと安定性から、orchestratorにGLM-5.1、workerにMTP対応が進むQwen3.6やgemma4を置きました。2月〜4月に候補が増えたことも助けになりました。

観測も実装に合わせて増えました。Grafana Familiar folderをバックアップし、54世代のdashboardを同期した記録があります。Orchestrator Decisions、Workflow & Replay、MOLsEV、C&F Latency、Arch Stats、Tool Calls、Guard Calls、LoRA/Prompt ROI、Model/Quant Failure Heatmapなどで確認します。


promptとモデル選択に加え、OSSの観測・検索・実行ツールが必要でした。
発端は Qwen Next だった
きっかけは去年7月頃のQwen Nextでした。
MoE、長いcontext、複数モデルを使うには、GPUだけでなくCPU、メモリ帯域、L3 cache、ストレージ、ネットワークを合わせて設計する必要があると感じました。CPU推論の比重が増すと考えたためです。
半導体不足も気になり、8月頃にマシン構成を検討しました。
自作PCは趣味ですが、今回は費用とリスクが大きく、希望するHPC構成を発注して3ヶ月待ちました。EPYC 9175Fは16C/16T、L3 512MBです。CPU推論を重視して選びました。
compute、storage、desktop、edgeに分けました。
- compute.home.arpa:EPYC 9175F、大容量DDR5、NVIDIA GPU 2枚の推論ノードです。
- storage.home.arpa:PostgreSQL、NATS JetStream、MinIO、Gitea、OCI Registry、Prometheus、Loki、Vector、Caddyを置きます。Mac mini Late 2018(x86)をLinuxに替え、24/7で運用しています。中古約3万円で、Arm対応の手間がなく、メルカリでスペアも集めています。
- desktop.home.arpa:日常作業、UI、外部ネットワークとの接点です。
- edge.home.arpa:RouterOS、Step-CA、Caddyで内部TLSとネットワーク境界を扱います。
法人ではありますが、実態はフリーランスエンジニアなので、大きな投資でした。
ノウハウが少なく何度も実験するため、手元の機材に合わせて設計しました。プロトタイプを作った今なら、中古3万程度のx86 Mac miniとクラウドGPUでもできると思いますが、事前には判断できませんでした。
使う時間も必要なので、長く担当した案件を減らし、12月から集中する計画を立てました。案件を離れる準備も進めました。
12月に長い取引先の技術者が大病を患い、時間を空けられなくなりました。2月に落ち着いてから、細かな作業を進めています。
先にネットワーク、サービス配置、推論、永続化、観測、開発環境を分けました。長く動かし、故障を追えるインフラを用意してからエージェントへ進みました。
最初は LLM 利用を観測するための proxy だった
最初は、LLM利用を観測する軽いbackendでした。
Rust + axumのAPIでLLMへproxyし、Knowledge.Gateでprompt、response、tool call、失敗を集めました。Dagster、MLflow、NATS、Prometheus、Grafanaも置きました。
クラウドAPIでもローカルでも、出力だけでは改善点が分かりません。履歴、失敗、token消費、モデルの癖を残すことが目的でした。
実装を進めると、判断と復旧も同じ基盤で扱いたくなりました。
観測する対象、自律させる範囲、判断の置き場所、失敗後の戻り方、学習へ使うログを整理しました。
Rust + axumの実装をGoへ替えました。goroutineとchannelで並列実行、状態、scheduling、subscriptionを扱いやすかったためです。外部MCPやPythonツールへの依存を減らし、単一binaryに近い常駐基盤を目指しています。
動画の最後ではsessionを止めますが、外部pub/subから依頼を受けられます。所定directoryのtaskを取り出し、KVをevictしながら success | fail | loop へ進む仕組みも設計しました。待機と再開のコストが低いGoが合いました。
短いタスクでモデルを選ぶ
1月頃からモデルを選び始めました。
大きな機能を作る時間がなかったため、モデルを取得して短いtaskを渡しました。promptの崩れ、tool call、長文、空出力、XML、toolの閉じ忘れ、CPU offloadの待ち時間、量子化の限界を観察しています。
当時のHugging Face archiveは、この試行の記録です。
ksh3@storage-server:~$ ls -ltr /srv/archive/cold/hf/hub/
total 0
drwxr-xr-x 5 ksh3 ksh3 64 Jan 4 19:44 models--Qwen--Qwen3-VL-32B-Instruct
drwxr-xr-x 5 ksh3 ksh3 64 Jan 4 20:21 models--AaryanK--IQuest-Coder-V1-40B-Instruct-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Jan 4 23:30 models--NousResearch--Hermes-4.3-36B
drwxr-xr-x 5 ksh3 ksh3 64 Jan 5 00:11 models--unsloth--gpt-oss-120b-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Jan 5 01:56 models--NousResearch--Hermes-4-70B-FP8
drwxr-xr-x 5 ksh3 ksh3 64 Jan 5 08:23 models--lmstudio-community--Llama-4-Scout-17B-16E-Instruct-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Jan 9 10:23 models--nvidia--Llama-3.3-70B-Instruct-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Jan 9 11:33 models--nvidia--Llama-4-Scout-17B-16E-Instruct-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Jan 9 11:46 models--Firworks--command-a-reasoning-08-2025-nvfp4
drwxr-xr-x 5 ksh3 ksh3 64 Jan 9 19:59 models--Elias-Schwegler--IQuest-Coder-V1-40B-Loop-Instruct-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Jan 9 21:51 models--miromind-ai--MiroThinker-v1.5-30B
drwxr-xr-x 5 ksh3 ksh3 64 Jan 9 22:37 models--IQuestLab--IQuest-Coder-V1-40B-Loop-Instruct
drwxr-xr-x 5 ksh3 ksh3 64 Jan 9 22:37 models--IQuestLab--IQuest-Coder-V1-40B-Instruct
drwxr-xr-x 6 ksh3 ksh3 85 Jan 11 01:03 models--unsloth--Llama-4-Maverick-17B-128E-Instruct-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Jan 11 01:47 models--pfnet--plamo-2-translate
drwxr-xr-x 5 ksh3 ksh3 64 Jan 11 02:15 models--google--functiongemma-270m-it
drwxr-xr-x 5 ksh3 ksh3 64 Jan 11 02:17 models--Firworks--gemma-3-270m-it-nvfp4
drwxr-xr-x 5 ksh3 ksh3 64 Jan 11 05:44 models--BCCard--gemma-3-27b-it-NVFP4A16
drwxr-xr-x 5 ksh3 ksh3 64 Jan 11 07:01 models--openai--gpt-oss-20b
drwxr-xr-x 5 ksh3 ksh3 64 Jan 11 07:27 models--google--gemma-3-27b-it
drwxr-xr-x 5 ksh3 ksh3 64 Jan 11 10:46 models--GAlex535--Qwen3-Coder-30B-A3B-Instruct-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Jan 11 13:17 models--openai--gpt-oss-120b
drwxr-xr-x 5 ksh3 ksh3 64 Jan 11 15:20 models--mratsim--Monstral-123B-v2-NVFP4
drwxr-xr-x 6 ksh3 ksh3 85 Jan 11 15:37 models--Lightricks--LTX-2
drwxr-xr-x 5 ksh3 ksh3 64 Jan 12 01:04 models--ChristianAzinn--mixtral-8x22b-v0.1-imatrix
drwxr-xr-x 5 ksh3 ksh3 64 Jan 20 08:57 models--Firworks--NVIDIA-Nemotron-3-Nano-30B-A3B-nvfp4
drwxr-xr-x 5 ksh3 ksh3 64 Jan 20 10:13 models--Qwen--Qwen3-Coder-30B-A3B-Instruct-FP8
drwxr-xr-x 5 ksh3 ksh3 64 Jan 22 04:07 models--zai-org--GLM-4.7-Flash
drwxr-xr-x 5 ksh3 ksh3 64 Feb 5 15:11 models--nvidia--NVIDIA-Nemotron-3-Nano-30B-A3B-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Feb 13 22:57 models--unsloth--Qwen3-Next-80B-A3B-Thinking-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 14 00:46 models--AesSedai--Step-3.5-Flash-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 15 06:15 models--unsloth--GLM-5-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 15 11:44 models--ubergarm--GLM-4.7-Flash-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 15 18:10 models--DavidAU--GLM-4.7-Flash-Uncensored-Heretic-NEO-CODE-Imatrix-MAX-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 15 19:11 models--bartowski--Qwen_Qwen3-Coder-Next-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 16 00:52 models--ubergarm--DeepSeek-V3.2-Speciale-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 16 03:44 models--DavidAU--Openai_gpt-oss-120b-NEO-Imatrix-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 17 08:49 models--ubergarm--MiniMax-M2.5-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 17 19:40 models--GadflyII--Qwen3-Coder-Next-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Feb 18 15:12 models--ACE-Step--Ace-Step1.5
drwxr-xr-x 5 ksh3 ksh3 64 Feb 18 15:41 models--mistralai--Voxtral-Mini-4B-Realtime-2602
drwxr-xr-x 5 ksh3 ksh3 64 Feb 18 17:18 models--black-forest-labs--FLUX.2-klein-9B
drwxr-xr-x 5 ksh3 ksh3 64 Feb 18 23:14 models--LiquidAI--LFM2-8B-A1B
drwxr-xr-x 5 ksh3 ksh3 64 Feb 19 00:09 models--LiquidAI--LFM2-8B-A1B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 19 05:58 models--LiquidAI--LFM2.5-1.2B-Thinking
drwxr-xr-x 5 ksh3 ksh3 64 Feb 19 06:03 models--LiquidAI--LFM2.5-VL-1.6B
drwxr-xr-x 5 ksh3 ksh3 64 Feb 19 06:07 models--LiquidAI--LFM2.5-1.2B-Instruct
drwxr-xr-x 5 ksh3 ksh3 64 Feb 19 19:49 models--ubergarm--Devstral-2-123B-Instruct-2512-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 23 20:30 models--AesSedai--MiniMax-M2.5-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 24 06:41 models--nvidia--Qwen3-Next-80B-A3B-Instruct-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Feb 24 06:47 models--nvidia--Qwen3-Next-80B-A3B-Thinking-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Feb 25 01:54 models--AesSedai--Qwen3.5-35B-A3B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 25 03:16 models--AesSedai--Qwen3.5-122B-A10B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Feb 25 16:57 models--Sehyo--Qwen3.5-122B-A10B-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Feb 25 19:39 models--Qwen--Qwen3.5-27B
drwxr-xr-x 5 ksh3 ksh3 64 Mar 2 04:18 models--mmnga-o--NVIDIA-Nemotron-Nano-9B-v2-Japanese-gguf
drwxr-xr-x 5 ksh3 ksh3 64 Mar 2 06:23 models--nvidia--NVIDIA-Nemotron-Nano-9B-v2-Japanese
drwxr-xr-x 5 ksh3 ksh3 64 Mar 3 02:56 models--bartowski--Qwen_Qwen3.5-27B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Mar 3 03:53 models--ubergarm--Qwen3.5-27B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Mar 6 05:21 models--perplexity-ai--pplx-embed-context-v1-0.6b
drwxr-xr-x 5 ksh3 ksh3 64 Mar 6 05:24 models--perplexity-ai--pplx-embed-v1-0.6b
drwxr-xr-x 5 ksh3 ksh3 64 Mar 6 08:22 models--perplexity-ai--pplx-embed-context-v1-4b
drwxr-xr-x 5 ksh3 ksh3 64 Mar 6 08:23 models--perplexity-ai--pplx-embed-v1-4b
drwxr-xr-x 5 ksh3 ksh3 64 Mar 14 00:30 models--AesSedai--NVIDIA-Nemotron-3-Super-120B-A12B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Mar 14 11:03 models--nvidia--NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Mar 17 23:30 models--fishaudio--s2-pro
drwxr-xr-x 5 ksh3 ksh3 64 Mar 17 23:36 models--mradermacher--Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-i1-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Mar 18 00:00 models--bartowski--Qwen_Qwen3.5-4B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Mar 18 16:24 models--AesSedai--Mistral-Small-4-119B-2603-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Mar 23 04:31 models--AesSedai--Nemotron-Cascade-2-30B-A3B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Mar 27 03:02 models--mconcat--Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Mar 27 03:37 models--Qwen--Qwen3.5-9B
drwxr-xr-x 5 ksh3 ksh3 64 Mar 27 04:54 models--chankhavu--Nemotron-Cascade-2-30B-A3B-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Mar 27 21:50 models--Jackrong--Qwen3.5-27B-Claude-4.6-Opus-Reasoning-Distilled
drwxr-xr-x 5 ksh3 ksh3 64 Mar 27 21:57 datasets--OpenMOSS-Team--OmniAction
drwxr-xr-x 5 ksh3 ksh3 64 Mar 27 21:59 datasets--Roman1111111--claude-opus-4.6-10000x
drwxr-xr-x 5 ksh3 ksh3 64 Mar 27 22:11 datasets--nvidia--Nemotron-Terminal-Corpus
drwxr-xr-x 5 ksh3 ksh3 64 Mar 28 05:43 models--nvidia--Nemotron-Cascade-2-30B-A3B
drwxr-xr-x 5 ksh3 ksh3 64 Mar 28 09:17 datasets--nvidia--Nemotron-Terminal-Synthetic-Tasks
drwxr-xr-x 6 ksh3 ksh3 85 Mar 29 14:33 models--HauhauCS--Qwen3.5-35B-A3B-Uncensored-HauhauCS-Aggressive
drwxr-xr-x 5 ksh3 ksh3 64 Mar 29 17:33 models--Qwen--Qwen3.5-4B-Base
drwxr-xr-x 5 ksh3 ksh3 64 Mar 29 18:47 models--Qwen--Qwen3.5-35B-A3B-Base
drwxr-xr-x 5 ksh3 ksh3 64 Mar 29 18:55 models--mistralai--Mistral-Small-4-119B-2603-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Mar 30 08:24 models--Qwen--Qwen3.5-9B-Base
drwxr-xr-x 5 ksh3 ksh3 64 Mar 30 08:24 models--zed-industries--zeta-2
drwxr-xr-x 5 ksh3 ksh3 64 Mar 30 11:24 models--nvidia--MiniMax-M2.5-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 Mar 30 12:59 models--sentence-transformers--all-MiniLM-L6-v2
drwxr-xr-x 5 ksh3 ksh3 64 Mar 30 13:02 models--datalab-to--chandra-ocr-2
drwxr-xr-x 5 ksh3 ksh3 64 Apr 2 14:29 datasets--ianncity--KIMI-K2.5-450000x
drwxr-xr-x 5 ksh3 ksh3 64 Apr 2 14:42 datasets--open-index--hacker-news
drwxr-xr-x 5 ksh3 ksh3 64 Apr 3 00:49 models--bartowski--google_gemma-4-26B-A4B-it-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Apr 3 02:31 models--lightonai--LateOn-Code-edge
drwxr-xr-x 5 ksh3 ksh3 64 Apr 3 02:32 models--mixedbread-ai--mxbai-edge-colbert-v0-17m
drwxr-xr-x 5 ksh3 ksh3 64 Apr 3 11:33 models--google--gemma-4-26B-A4B-it
drwxr-xr-x 5 ksh3 ksh3 64 Apr 3 17:15 models--ubergarm--Step-3.5-Flash-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Apr 6 07:00 models--bartowski--Qwen_Qwen3.5-9B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Apr 8 15:31 datasets--nohurry--Opus-4.6-Reasoning-3000x-filtered
drwxr-xr-x 5 ksh3 ksh3 64 Apr 8 16:17 datasets--ianncity--KIMI-K2.5-1000000x
drwxr-xr-x 6 ksh3 ksh3 85 Apr 8 16:38 models--ubergarm--Qwen3-Coder-Next-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Apr 11 05:57 models--google--translategemma-4b-it
drwxr-xr-x 5 ksh3 ksh3 64 Apr 11 06:20 models--llm-jp--llm-jp-4-32b-a3b-base
drwxr-xr-x 5 ksh3 ksh3 64 Apr 12 18:35 models--MiniMaxAI--MiniMax-M2.7
drwxr-xr-x 6 ksh3 ksh3 85 Apr 13 02:52 models--ubergarm--MiniMax-M2.7-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Apr 14 09:24 models--llm-jp--llm-jp-4-32b-a3b-thinking
drwxr-xr-x 5 ksh3 ksh3 64 Apr 16 09:22 models--AesSedai--Qwen3.5-397B-A17B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Apr 17 08:51 models--AesSedai--Qwen3.6-35B-A3B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Apr 20 09:02 models--cyberagent--CAT-Translate-7b
drwxr-xr-x 5 ksh3 ksh3 64 Apr 20 14:25 datasets--Jackrong--GLM-5.1-Reasoning-1M-Cleaned
drwxr-xr-x 5 ksh3 ksh3 64 Apr 23 00:11 models--openai--privacy-filter
drwxr-xr-x 5 ksh3 ksh3 64 Apr 23 15:41 models--Qwen--Qwen3.6-27B
drwxr-xr-x 5 ksh3 ksh3 64 Apr 23 16:36 models--Qwen--Qwen3.6-27B-FP8
drwxr-xr-x 5 ksh3 ksh3 64 Apr 24 00:41 models--huihui-ai--Huihui-GLM-5.1-abliterated-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Apr 24 11:19 models--deepseek-ai--DeepSeek-V4-Flash
drwxr-xr-x 5 ksh3 ksh3 64 Apr 24 15:24 datasets--Modotte--CodeX-2M-Thinking
drwxr-xr-x 5 ksh3 ksh3 64 Apr 27 01:44 models--nsparks--DeepSeek-V4-Flash-FP4-FP8-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Apr 27 16:02 models--zai-org--GLM-5.1
drwxr-xr-x 5 ksh3 ksh3 64 Apr 29 16:51 models--Qwen--Qwen3.6-35B-A3B-FP8
drwxr-xr-x 5 ksh3 ksh3 64 Apr 29 17:22 models--Qwen--Qwen3.6-35B-A3B
drwxr-xr-x 5 ksh3 ksh3 64 Apr 29 17:43 models--AesSedai--Kimi-K2.6-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 Apr 30 18:40 models--RedHatAI--DeepSeek-V4-Flash-NVFP4-FP8
drwxr-xr-x 5 ksh3 ksh3 64 May 1 16:03 datasets--AlicanKiraz0--Cybersecurity-Dataset-Fenrir-v2.1
drwxr-xr-x 5 ksh3 ksh3 64 May 1 22:50 models--ubergarm--GLM-5.1-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 May 2 09:46 models--mistralai--Mistral-Medium-3.5-128B
drwxr-xr-x 5 ksh3 ksh3 64 May 2 09:55 models--mistralai--Mistral-Medium-3.5-128B-EAGLE
drwxr-xr-x 5 ksh3 ksh3 64 May 2 14:43 models--RedHatAI--Qwen3.6-35B-A3B-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 May 3 14:55 models--ubergarm--Qwen3.6-27B-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 May 4 03:57 models--sakamakismile--Qwen3.6-27B-Text-NVFP4-MTP
drwxr-xr-x 5 ksh3 ksh3 64 May 4 15:06 datasets--Kassadin88--GLM-5.1-OpenThoughts3-Distill
drwxr-xr-x 5 ksh3 ksh3 64 May 7 14:01 models--LilaRest--gemma-4-31B-it-NVFP4-turbo
drwxr-xr-x 5 ksh3 ksh3 64 May 7 14:04 models--nvidia--Gemma-4-31B-IT-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 May 7 14:05 models--google--gemma-4-31B-it-assistant
drwxr-xr-x 5 ksh3 ksh3 64 May 9 01:20 models--RecViking--Mistral-Medium-3.5-128B-NVFP4
drwxr-xr-x 5 ksh3 ksh3 64 May 10 02:52 models--ubergarm--Kimi-K2.6-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 May 10 07:18 models--google--gemma-4-31B-it
drwxr-xr-x 5 ksh3 ksh3 64 May 10 10:25 models--Zyphra--ZAYA1-74B-preview
drwxr-xr-x 5 ksh3 ksh3 64 May 12 16:37 models--AesSedai--MiMo-V2.5-Pro-GGUF
drwxr-xr-x 5 ksh3 ksh3 64 May 12 17:21 models--antirez--deepseek-v4-gguf
ksh3@storage-server:~$
uncensored、ストーリーテラー、画像・動画生成、security、coding、OCRなどを試しました。役割、量子化、挙動の違いを探るためです。
Claudeを開発へ取り入れる
コードを書くのが好きです。
AI支援はinline autocompleteだけにしていました。Copilotは便利でも、書く作業は自分で続けたかったためです。
今年2月、戦争利用への反対表明を見てClaudeを使いました。使ってみると、もっと早く始めればよかったと感じました。
肩こりと腱鞘炎が続き、数年で引退するかとも考えていました。Claudeは開発を続ける助けになり、自分の癖、ノウハウ、設計方針、捨てる基準を補う仕組みを作りたいと思いました。
3月頃からClaudeを開発へ使いました。claude -p やCodexへ小さな依存としてpromptを渡し、orchestrator候補と同じ仕事を観察します。その知見を、CPUでも動く100B超のローカルモデルへ移す計画でした。
4月に外部モデル連携を削除する
4月のAnthropicの方針転換で、計画を変えました。
subprocessから claude -p を自律的に呼ぶ方法に不安があり、RedditでもBANの投稿を見ました。そこでClaude / Codex連携の実装を削除しました。これは当時の私の判断です。
動いた実装を捨てるのは惜しかったものの、必要なのはorchestrationの知見だと整理しました。
taskの粒度、workerへ渡す情報、再試行で戻る失敗、設計変更が必要な失敗、reviewの時点、並列変更の統合を、自分の基盤で観測して蓄積する方針です。
Vector、Tempo、Alloy、PostgreSQLの観測テーブルへ集中しました。
同じcorrelationでplan、dispatch、worker result、tool call、token usage、task failure、review verdict、recoveryを追えるようにしました。
Grafanaでrole、task、tool call、latencyごとに表示を切り替え、処理の経緯を読むようになりました。


GrafanaとPostgreSQLで失敗sessionを読み、散歩中に考えた仮説を実装へ戻して再実行しました。
外部モデル連携を外したことで、実行の流れを理解し、繰り返す実験の手順を作れました。
苦手な処理をツールで補う
3月頃から、観察で見つけた苦手な処理をツールで補いました。
長いcontextの記憶、曖昧なファイル検索、実行結果の解釈、失敗の状態、次turnへ渡す情報は、モデルだけに任せると崩れやすい部分でした。
共通する問題にツールを作る方針にしました。
MCP、管理、debugを約15個作りました。作業の体感はfamiliar本体2割、ツール8割です。観測、検索、構造化、検証、復旧を補う開発でした。
モデルの内部状態は見えず、同じ入力でもcontext、temperature、直前の失敗、tool利用で結果が変わります。複数モデルの連鎖では、その違いも追う必要があります。
成功か失敗かだけでなく、toolを呼んだ理由、負荷になった情報、再試行と恒久修正の境界を確認しました。
曖昧な処理をruntime側の一定した関数へ分ける考えは、MCPツールにも使いました。
この作業で、普段の書き方も見直しました。
私は説明よりsymbol名とoutlineを重視し、テスト名からも意図が読めるコードを好みます。
名前と構成を何度も直し、読む量を減らすことを心がけています。
一方、familiarを実装するLLMにはコメントと検索用labelが必要でした。使う側に合わせてコードを整える方針です。
LLMへ渡すcontextでは、型で構造を固定することが常に有効とは限りませんでした。
繰り返す型がノイズになる場合は、動的な形で不要な情報を隠します。普段は避ける形でも、この用途では関心を分けられました。




学習と世代管理は今後の作業です。数ヶ月の開発を一区切りとして記録しました。ローカルLLMを使うAIシステム開発の基盤として、引き続き整備する予定です。
