Skip to content

Instantly share code, notes, and snippets.

@genki
Created September 28, 2025 22:02
Show Gist options
  • Select an option

  • Save genki/c2f7f021ee5d4e89ef63d4dacf422ca5 to your computer and use it in GitHub Desktop.

Select an option

Save genki/c2f7f021ee5d4e89ef63d4dacf422ca5 to your computer and use it in GitHub Desktop.

CPL(Compact Prompt Language)解説

CPL{S:stmt=cmd(;cmd)*,cmd=op(args?),args=pair(,pair)*,pair=key=val|val,val=atom|[val(,val)*],atom=num|id|path|blobref;O:g,l,i,c,p,+,~,-,r,f,o,d,u,q,m,@;M:g=goal,l=lang,i=in,c=con,p=plan,+=gen,~=mod,-=del,r=run,f=fix,o=out,d=dep,u=unit,q=ask,m=mac,@=cwd;D:lang=[ts,js,py,go,rs,rb,sh,kt,cs],rt=[node,deno,bun,py39,wasm],test=[vi,je,pt,go],goal=[b,fx,rf,dc,bn],form=[s,z,d,p],algo=[dp,gr,bs,bt,df,bf,2p,fft,simd];F:lang=ts,rt=node,fmt=pr,test=vi,o.kind=s,style=S;R:sep=;,sp=*,inh=@|l|c,ref=$N;X:ord=L2R,bind=err>$err|log>$log,safe=[pnpm**,pytest,go_test]}

目的

CPLは、Coding Agentに対して「最小トークン数」で明確な指示を与えるための超簡潔な構成言語です。
人間用の詳細仕様ではなく、Agentにそのままドロップインできる形式を目指しています。


基本構文

  • 文は;で区切る。
  • 空白は使用せず、必要なら_で置換。
  • key=valueの形で属性を与える。順序が一意ならkey=省略可。
  • @で作業ルートを指定。直前の出力は$nで参照。
  • コメントは#で始め行末まで。

例:


@(/ws); l(ts,deno); g(sum_ints); c(strict=1)


演算子(1字オペコード)

記号 意味
g 目的/要件 g(app_ts_api)
l 言語/環境 l(lang=ts,rt=deno)
i 入力仕様 i(spec=$1)
c 制約 c(perf=P95<50ms)
p 方針/アルゴリズム p(algo=dp)
+ 生成 +(src/a.ts,desc=fn_sum)
~ 修正 ~(src/a.ts,fix=types)
- 削除 -(dist/*)
r 実行/テスト r(pnpm_test)
f 修復 f($log)
o 出力形式 o(single,lib.ts)
d 依存関係 d(npm=[kysely,pg])
u 単体テスト例 u(in=[2,3],out=5)
q 質問 q(n=1,ask=ambiguous_api)
m マクロ定義 m(S=strict_types=on)
@ 作業ルート @(/work)

省略・規定値

  • lang=ts, rt=node, test=vi, o.kind=single, style=S が既定。
  • 真偽値は 1/0
  • @, l, c の設定は次のコマンドに継承される。

短縮辞書

  • 言語: ts,js,py,go,rs,rb,sh,kt,cs
  • ランタイム: node,deno,bun,py39,wasm
  • テスト: vi(Vitest),je(Jest),pt(PyTest),go(gotest)
  • 目的: b(build),fx(fix),rf(refactor),dc(doc),bn(bench)
  • 出力形式: s(single),z(zip),d(dir),p(patch)
  • アルゴリズム: dp,gr,bs,bt,df,bf,2p,fft,simd

使用例

1. TypeScriptライブラリの生成とテスト


@(/ws); l(ts,deno); g(sum_ints); c(strict=1);
+(src/sum.ts,desc=fn_sum(a:int,b:int)->int);
u(in=[2,3],out=5); r(pnpm_test); f($1); o(s,sum.ts)

2. Express APIハンドラ


@(/api); l(ts,node); d(npm=[express,zod]);
g(http_add); c(sec=1,perf=P95<30ms);
+(src/handler.ts,desc=POST_/add:zod(a:int,b:int)->{"sum":int},int=je)

3. エラーログからの修復


l(ts,node); ~(src/a.ts,fix=types); r(pnpm_build); f($log)

4. アルゴリズム問題(Py/pytest)


l(py,py39); g(lis); p(dp); c(mem<256MB,time<1s);
+(main.py,desc=solve_LIS_from_stdin,int=pt);
u(in="5\n1 4 2 3 5\n",out="4\n"); r(pytest); f($e); o(s,main.py)


まとめ

CPLは以下の特徴でトークン消費を最小化します。

  1. 1字オペコード
  2. 空白を使わず_で置換
  3. 規定値の徹底利用
  4. 直前参照 $n と設定継承で冗長さ排除

これにより、人間の自然文プロンプトよりも極端にコンパクトにAgentへの指示を符号化できます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment