Show HN: Margarita – Markdown風構文を使ったエージェント向けプログラミング言語
Margarita は、Markdown を拡張してエージェントのワークフローをプログラム可能にする決定論的スクリプト言語です。変数宣言、インクルード、ループなどの構造により、開発者はコンテキストとコストを制御しながら予測可能な LLM アプリケーションを構築できます。
Margarita は、LLM エージェントの構築を Markdown を書くのと同じくらい簡単にする新しいプログラミング言語です。Markdown に決定論的なスクリプト拡張を追加することで、プロンプトを何度も調整しなくてもエージェントの動作を予測可能にします。
コア構文は Markdown をベースに、@state、@effect、[[ include ]] などのディレクティブを追加しています。開発者は変数を宣言し、実行ステップを定義し、ローカル関数を呼び出し、他の .mg ファイルをインクルードしてモジュール化できます。例えば、シンプルなエージェントはユーザー入力を読み取り、プロンプトコンテキストに注入し、複数回実行して段階的にタスクを完了します。
Margarita は「必要な場所で決定性を利用する」ことを重視しています。構文は Markdown の極小拡張であり、毎回同じように動作するため、LLM がたまにステップをスキップする問題が発生しません。同時に、開発者はコンテキストを完全に制御でき、不要なデータを削除し、必要なツールだけを追加し、ツール呼び出しにトークンを消費する代わりにローカルで Python 関数を実行することで、コンテキストを集中させコストを低く抑えられます。
さらに、Margarita は React ライクなコンポーネント合成をサポートしています。[[ snippets/role.mg is_admin=True permission="view" ]] のような構文で、パラメータを渡し、条件付きでレンダリングし、ループでフラグメントを出力できます。Markdown に長らく欠けていたプログラミング機能を実現します。
公式ドキュメントでは、複数のユースケースが紹介されています。メールの要約(Apple Mail の受信箱を読み込み、分類された要約とアクションアイテムを取得)、カスタムエージェントループ(入力をタスクに分解し、反復実行)、LLM 駆動のゲーム(プレイヤーのアクションに応じてゲーム状態を更新)などです。それぞれの例は、決定性を保ちながら LLM の動的能力を活用する方法を示しています。
Margarita は状態管理、ファイル読み書き、メモリの永続化もサポートします。@memory var で永続ストレージから変数を読み込み、@effect func でローカルの Python 関数を実行できます。条件分岐やループにより、ワークフローをより堅牢にします。ファイル拡張子は .mg または .mgx で、margarita run コマンドで実行します。
現在 Margarita はオープンソースとして公開されており、コマンドラインツールと豊富なサンプルファイルが提供されています。再現可能なスクリプトを求めつつ LLM の動的特性も取り入れたい開発者にとって、制御と柔軟性を両立する新しい選択肢です。