梅澤 真史 https://github.com/mumez/pharo-agentic-browser
各AIとのセッションを トピック として管理:
@ClassName
AI コーディングエージェント専用の GUI ツールが標準に:
CUIに比べ、AI エージェントとやり取りする際の敷居が下がった 最初は単純なコード補完やチャットだったが...
ツールは日々進化している もはや「エディタ + チャット」ではなく、UI は セッションのオーケストレーション へと向かっている
Pharo 開発者も同じパラダイムを享受すべき:
@Class>>method
Pharo 12以上 のイメージで Playground を開き、以下を評価:
Metacello new baseline: 'AgenticBrowser'; repository: 'github://mumez/pharo-agentic-browser:main/src'; load: 'all'.
AgenticBrowserを開く:
AgenticBrowser open.
ACP 対応であれば、どのエージェントでも利用可能:
npm install -g @agentclientprotocol/claude-agent-acp
npm install -g @agentclientprotocol/codex-acp
gemini --acp
copilot --acp --stdio
agent acp
OpenCode、Kilo Code、Kiro CLI などにも対応
注意: Smalltalkコードの質を上げるため 、エージェントには smalltalk-dev-plugin をインストールしておく
/st-buddy
各トピックの状態はステートマシン(SState)で明確に管理:
?
●
✓
AI が承認を要求すると:
ボタンをクリックして応答すると、AI が再開
チャット内で Pharo のクラスやメソッドを直接参照できる:
@QueryClass @DBAdapter>>connect please refactor this
AgenticBrowser は各 @mention をTonelのソースとして解決し、ACP のテキストリソースにして添付 — コピペ不要。
@mention
@ClassName>>methodName
[ ] ボタンをクリックしてスクリーンショットを添付:
[ ]
@sc-20260528-001.png
+ ボタンをクリックしてディスク上の任意のファイルを添付:
[filename]
maxAttachmentSize
トピックを右クリック → Set Goal... で完了条件を入力:
all tests pass
AgenticBrowser は AI にゴール用のプロンプトを送信。 結果報告ファイル(result-<topic-id>.md) が作成されると、トピックは ✓(#goalAchieved)に遷移。
result-<topic-id>.md
#goalAchieved
ゴール達成時にはアナウンサーやコールバックブロックのフック(whenGoalAchieved)も発火するので、独自の自動化ワークフローに統合可能。
トピックに関連するパッケージへの編集をイメージ内で監視:
トピックは Pharo の Fuel シリアライザを使って ab-topics.fuel に自動保存 イメージ再起動後も利用可能
ab-topics.fuel
AbTopicManager save. AbTopicManager load.
新規トピック作成時に、作業ディレクトリを指定しない場合、ディレクトリは、<agenticBrowserRoot>/topic-template をもとに生成される:
<agenticBrowserRoot>/topic-template
smalltalk-dev-plugin
CLAUDE.md
AGENTS.md
.claude
.opencode
mcp.json
smalltalk-interop
smalltalk-validator
useDefaultMcpServers: false
ab-settings.json
AbSettings default codingAgents: (AbSettings default codingAgents copyWith: {'name' -> 'my-agent'. 'command' -> #('my-agent' '--acp')} asDictionary). AbSettings save.
useDefaultMcpServers
true
aiPermissionWaitTimeoutSeconds
1800
aiPermissionTimeoutOption
#reject_once
allow_once
allow_always
reject_once
設定は右クリック → Edit Settings... からトピックごとにも設定可能
ユースケース: 外出先からのスマートフォンでの確認 ディスプレイのないヘッドレス環境からの利用
→ 詳細は Web UI スライド を参照
seq:
para:
topicBy:
agentBy:
st-eval
ab-scripting-feature-dev
ユースケース: 定型的な AI ワークフローの実行、 CIへの組み込み、複雑なマルチエージェント連携
→ 詳細は Scripting API スライド を参照
逐次実行ステップ(seq:) — 各トピックの結果は次のトピックのプロンプトに引き継がれる:
AgenticBrowser runBy: [ :builder | builder seq: { builder topicBy: [ :t | t prompt: 'List 3 Pharo Smalltalk features in one sentence each.' ]. builder topicBy: [ :t | t prompt: 'Summarize the feature list from the previous step in one sentence.' ] } agentBy: [ :a | a claude ] ].
並行実行ステップ (para:) — トピックは並列実行され、結果は次のステップのためにまとめられる:
AgenticBrowser runBy: [ :builder | builder para: { builder topicBy: [ :t | t prompt: 'List 3 Pharo Smalltalk language features.' ]. builder topicBy: [ :t | t prompt: 'List 3 Pharo Smalltalk development tools.' ] } agentBy: [ :a | a claude ] ].
seq: と para: は自由に組み合わせ可能 Arenaパターン: 複数のモデルで並行開発 → 結果をまとめて優れたほうを採用
実践例1: To-Do アプリ作成スクリプト 実践例2: RediStickのTimeSeries対応用スクリプト
pharo-agentic-browser は、コーディングエージェントへの委譲というパラダイムを Pharo にもたらす:
https://github.com/mumez/pharo-agentic-browser