<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet title="XSL_formatting" type="text/xsl" href="https://developer.salesforce.com/blogs/wp-content/themes/dfctheme/includes/feed_styles.xsl" ?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:podcast="https://podcastindex.org/namespace/1.0"
xmlns:rawvoice="https://blubrry.com/developer/rawvoice-rss/"
xmlns:media="http://search.yahoo.com/mrss/"
	xmlns:dscblog="https://developer.salesforce.com/blog/dscblog/"
>


<channel>
	<title>Salesforce Developers Blog</title>
	<atom:link href="https://developer.salesforce.com/blogs/feed" rel="self" type="application/rss+xml" />
	<link>https://developer.salesforce.com/blogs</link>
	<description>Elevating developer skills and connecting with the Salesforce Developers community</description>
	<lastBuildDate>Thu, 02 Apr 2026 01:58:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<atom:link rel="hub" href="https://pubsubhubbub.appspot.com/" />
	<itunes:author>Salesforce Developers Blog</itunes:author>
	<itunes:explicit>false</itunes:explicit>
	<itunes:image href="https://developer.salesforce.com/blogs/wp-content/plugins/powerpress/itunes_default.jpg" />
	<itunes:owner>
		<itunes:name>Salesforce Developers Blog</itunes:name>
	</itunes:owner>
	<podcast:medium>podcast</podcast:medium>
	<image>
		<title>Salesforce Developers Blog</title>
		<url>https://developer.salesforce.com/blogs/wp-content/plugins/powerpress/rss_default.jpg</url>
		<link>https://developer.salesforce.com/blogs</link>
	</image>
	<podcast:podping usesPodping="true" />
<site xmlns="com-wordpress:feed-additions:1">244780846</site>	<item>
		<title>Agent Script徹底解説 &#8211; Agent Scriptのデバッグの仕方</title>
		<link>https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-how-to-debug-agent-script-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-how-to-debug-agent-script-jp#respond</comments>
		<pubDate>Wed, 01 Apr 2026 00:20:27 +0000</pubDate>
		<dc:creator><![CDATA[Mohith Shrivastava]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Agent Script]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205915</guid>
		<description><![CDATA[<p>Agentforce Builder&#12289;DX&#25313;&#24373;&#27231;&#33021;&#12289;&#12362;&#12424;&#12403;Agentforce Vibes&#12434;&#20351;&#29992;&#12375;&#12383;&#12456;&#12540;&#12472;&#12455;&#12531;&#12488;&#12473;&#12463;&#12522;&#12503;&#12488;&#12398;&#12487;&#12496;&#12483;&#12464;&#25163;&#27861;&#12434;&#32722;&#24471;&#12375;&#12414;&#12375;&#12423;&#12358;&#12290;&#12523;&#12540;&#12486;&#12451;&#12531;&#12464;&#12289;&#22793;&#25968;&#12289;&#25512;&#35542;&#12523;&#12540;&#12503;&#12434;&#12488;&#12524;&#12540;&#12473;&#12377;&#12427;&#12371;&#12392;&#12391;&#12289;&#21839;&#38988;&#12434;&#36805;&#36895;&#12395;&#35299;&#27770;&#12391;&#12365;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-how-to-debug-agent-script-jp">Agent Script徹底解説 &#8211; Agent Scriptのデバッグの仕方</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<blockquote><p>※本記事は2026年3月3日に米国で公開された <a href="https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-how-to-debug-agent-script">Agent Script Decoded: How to Debug Agent Script</a>の抄訳です。本記事の正式言語は英語であり、その内容および解釈については英語が優先されます。</p></blockquote>
<p><span style="font-weight: 400"></span><a href="https://developer.salesforce.com/blogs/2026/02/agent-script-decoded-intro-to-agent-script-language-fundamentals"><span style="font-weight: 400">Agent Script</span></a><span style="font-weight: 400">でAIエージェントを構築したものの、テストをしてみると、思ったように動作しない、ということもあるでしょう。AIエージェントが誤ったトピックに振り分けられているのか、実行すべきアクションをスキップしているのか、あるいは指示とは異なる形で応答しているのかもしれません。</span></p>
<p><span style="font-weight: 400">そんなときには、会話の各ターンで生成されるトレースが役立ちます。トレースを見れば、確実な根拠にもとづいてデバッグできます。選択されたトピック、実行可能だったアクションや実行されたアクション、変更された変数、推論ループが時間を費やした箇所がわかるのです。</span></p>
<p><span style="font-weight: 400">この記事では、まずAgent Scriptの実行フローについて説明します。次に、</span><a href="https://www.salesforce.com/agentforce/agent-builder/"><span style="font-weight: 400">Agentforce Builder</span></a><span style="font-weight: 400">と</span><a href="https://developer.salesforce.com/docs/ai/agentforce/guide/agent-dx.html"><span style="font-weight: 400">Agentforce DX</span></a><span style="font-weight: 400">（英語）を使ってAgent Scriptをデバッグする方法を見ていきます。最後に、</span><a href="https://developer.salesforce.com/blogs/2025/10/unleash-your-innovation-with-agentforce-vibes-vibe-coding-for-the-enterprise"><span style="font-weight: 400">Agentforce Vibes</span></a><span style="font-weight: 400">を使ったバイブデバッグのワークフローを紹介します。バイブデバッグでは、JSON形式の実行トレースをAgentforce Vibesに貼り付けて、期待していた結果と実際の結果を言葉で説明し、Agentforceの提案を利用してAgent Scriptを改善します。</span></p>
<h2><b>Agent Scriptの実行フロー</b></h2>
<p><span style="font-weight: 400">Agent Scriptで構築したAIエージェントを効果的にデバッグするには、まず、実行の流れを理解しておく必要があります。以下に、実行フローがわかる図を用意しました。Agent Scriptのデバッグは、スクリプトを上から下へと直線的にチェックするというよりも、決定論的な命令の実行と非決定論的な推論という</span><b>異なる2つの実行モードからなるループ</b><span style="font-weight: 400">をたどっていくイメージです。</span><b></b><span style="font-weight: 400"></span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205916" >
			    <img fetchpriority="high" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260331181312/Agent-Script-execution-flowchart-e1772498456141_J.png?w=669" class="postimages" width="669" height="1000" alt="" />
			  </span>
			</p>
<p><span style="font-weight: 400">では、この実行フローをステップごとに見ていきましょう。</span></p>
<p><b>ステップ1 – すべての会話ターンは、必ず</b><a href="https://developer.salesforce.com/docs/ai/agentforce/guide/ascript-blocks.html#start-agent-block"><b>start_agent</b></a><b>（英語）が起点になります。ユーザーが何を発言したか、前のターンがどこで終了したかにかかわらず、AIエージェントのエントリーポイントとして最初に実行されます。このエントリーポイントで、現在の会話の状態が評価され、AIエージェントが適切なトピックに振り分けられます。</b><span style="font-weight: 400"> </span></p>
<p><span style="font-weight: 400">デバッグでまず確認すべき点は、「想定したトピックにAIエージェントが振り分けられたかどうか」です。答えが「ノー」なら、問題の原因はトピックの説明か会話の状態にあります。</span><i><span style="font-weight: 400"></span></i><span style="font-weight: 400"></span></p>
<p><b>ステップ2 – トピックに入ると、</b><a href="https://developer.salesforce.com/docs/ai/agentforce/guide/ascript-ref-instructions.html"><b>reasoning.instructions</b></a><b>（英語）は上から順番に、決定論的に実行されます。</b><span style="font-weight: 400">ここは通常のコードのように動作する部分です。すべての</span><span style="font-weight: 400">if</span><span style="font-weight: 400">条件が評価され、</span><span style="font-weight: 400">run</span><span style="font-weight: 400">ブロックが実行され、想定どおりに変数が代入されます。一方、プロンプトテキストの行（</span><span style="font-weight: 400">|</span><span style="font-weight: 400">で始まる行）は実行されず、プロンプトバッファーに</span><i><span style="font-weight: 400">蓄積</span></i><span style="font-weight: 400">されていきます。ここが重要な違いです。ロジックは直ちに実行されますが、プロンプトテキストは蓄積されるだけです。instructionsでは、一般的な命令型プログラムでステップ実行を進めるようにバグをトレースできます。</span></p>
<p><b>ステップ3 – 組み立てられたプロンプトと利用可能なツールが、Einstein Trust Layerによって保護された大規模言語モデル（LLM）に渡されます。</b><span style="font-weight: 400">ここで、決定論的な処理から非決定論的な推論に実行が切り替わります。</span><a href="https://help.salesforce.com/s/articleView?id=ai.generative_ai_trust_arch.htm&amp;type=5"><span style="font-weight: 400">Einstein Trust Layer</span></a><span style="font-weight: 400">によって保護されたLLMは、instructionsフェーズで蓄積されたプロンプトテキスト、会話履歴、</span><a href="https://developer.salesforce.com/docs/ai/agentforce/guide/ascript-ref-tools.html"><span style="font-weight: 400">reasoning.actions</span></a><span style="font-weight: 400">（英語）のツール一覧を受け取り、その情報をもとに推論を行います。LLMは直接応答することもあれば、ツールを呼び出すこともあります。このフェーズを確実に予測することはできませんが、入力された情報（組み立てられたプロンプト）を確認することで、LLMがなぜそう推論したかを理解</span><i><span style="font-weight: 400">できます</span></i><span style="font-weight: 400">。ツールが実行されるたびに、システムはステップ2に戻ってプロンプトを再評価します。LLMがツールを使わずに直接応答するまで、このサイクルが繰り返されます。</span></p>
<p><b>ステップ4 – </b><a href="https://developer.salesforce.com/docs/ai/agentforce/guide/ascript-ref-before-after-reasoning.html"><b>after_reasoning</b></a><b>（英語）（定義されている場合）が実行され、ユーザーに応答が返されます。</b><span style="font-weight: 400">後処理のロジックが実行され、AIエージェントが応答を返し、待機します。サイクルは一時停止しているだけで、終了したわけではありません。</span></p>
<p><b>ステップ5 – ユーザーが別のメッセージを送り、ステップ1からループが再開されます。</b><span style="font-weight: 400">各ターンの切れ目で、</span><i><span style="font-weight: 400">どの変数が変わったのか、会話の状態はどう変化したのか、</span></i><i><span style="font-weight: 400">start_agent</span></i><i><span style="font-weight: 400">の振り分け先が変わっていないかを確認してください。</span></i><span style="font-weight: 400">複数のターンにまたがるバグは、ほとんどがこのような遷移に潜んでいます。更新されていない変数や、トピックの振り分け条件が当てはまらなくなっている箇所があれば、それがバグの原因かもしれません。AIエージェントの変数はグローバルな状態として扱われ、ターンをまたいで保持されることに注意しましょう。</span></p>
<h2><b>Agentforce Builderを使ったAgent Scriptのデバッグ</b></h2>
<p><span style="font-weight: 400">新しい</span><a href="https://www.salesforce.com/agentforce/agent-builder/"><span style="font-weight: 400">Agentforce Builder</span></a><span style="font-weight: 400">を使うと、AIエージェントの実行フローをデバッグし、トレースできます。Agentforce Builderでは、実際のデータに変更を加えずにテストできる</span><a href="https://help.salesforce.com/s/articleView?id=ai.agent_simulate_and_live_modes.htm&amp;type=5"><span style="font-weight: 400">シミュレーションモード</span></a><span style="font-weight: 400">と、</span><span style="font-weight: 400">実際のアクション</span><span style="font-weight: 400">をテストできるライブテストモードを利用できます。どちらにも［Interaction Summary（インタラクション概要）］パネルが用意されており、AIエージェントの会話ロジック、トピックの遷移、トリガーされたアクションを追跡できます。 </span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205736" >
			    <img decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260302174006/Screenshot-of-Interaction-Summary-panel-inside-Agentforce-Builder-e1772498492258.png?w=1000" class="postimages" width="1000" height="627" alt="Agentforce BuilderのTraceタブのスクリーンショット" />
			  </span>
			</p>
<p><span style="font-weight: 400">［Interaction Summary（インタラクション概要）］パネルには、入力、推論、トピックの遷移、アクション、出力の評価という各ステップが、視覚的なわかりやすいタイムラインで表示されます。このパネルは、会話の流れを把握するのにとても便利で、問題が発生している箇所の特定にも役立ちます。</span></p>
<p><span style="font-weight: 400">もっと詳しく確認したい場合は、Agentforce Builderの下部にある［</span><b>Trace（トレース）</b><span style="font-weight: 400">］タブ（以下のスクリーンショットを参照）を展開します。このタブでは、ミリ秒単位でインタラクションの内訳が表示され、時間がかかっている箇所をタイミングバーで確認できます。各インタラクションをクリックすると、動的に生成されてLLMに送信されたプロンプトなどの詳細を確認できます。</span></p>
<p><span style="font-weight: 400">変数を調べたい場合は、［</span><b>Variables（変数）</b><span style="font-weight: 400">］サブタブに切り替えると、各ステップの変数の値を確認できます。</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205737" >
			    <img decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260302174009/Screenshot-of-Trace-within-Agentforce-Builder-e1772498520667.png?w=1000" class="postimages" width="1000" height="625" alt="Agentforce BuilderのTraceタブのスクリーンショット" />
			  </span>
			</p>
<h2><b>Agentforce DXを使ったAgent Scriptのデバッグ</b></h2>
<p><span style="font-weight: 400">Visual Studio CodeのようなIDEで作業したい場合は、</span><b>Agentforce DX拡張機能</b><span style="font-weight: 400">を使って、エディターの［</span><b>Agent Tracer（エージェントトレーサー）</b><span style="font-weight: 400">］タブ（下図を参照）で同じトレース機能を利用できます。</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205735" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260302174003/Agent-Tracer-within-Visual-Studio-Code-powered-by-Agentforce-DX-extension--e1772498673500.png?w=1000" class="postimages" width="1000" height="647" alt="Agentforce DX拡張機能で利用可能なVisual Studio CodeのAgent Tracerタブ" />
			  </span>
			</p>
<p><span style="font-weight: 400">左側のパネルでは、ユーザーの入力、選択されたトピック、変数の更新、有効化されたツール、推論ステップ、トピックの遷移など、実行プランの全体を確認できます。 </span></p>
<p><span style="font-weight: 400">任意のテスト会話をクリックし、</span><span style="font-weight: 400">ファイルを開くアイコン</span>（赤線で囲んだ部分）をクリックすると、会話ターンについてプランの生の応答を確認できます。このJSONファイルが、判断基準となる情報です。このファイルには、内部のAgent Script変数を含む、実行中の各時点におけるすべての状態変数の値が記載されているため、見つけにくいロジックの問題を調べるうえで非常に役立ちます。</p>
<h2><b>Agent Scriptのバイブデバッグ</b></h2>
<p><span style="font-weight: 400"></span><b>Agentforce Builder</b><span style="font-weight: 400">と</span><b>Agentforce DX</b><span style="font-weight: 400">の拡張機能では、きわめて詳細な実行トレースが可能です。しかし、こうしたツールでステップごとにデータを調べるのは、根気のいる作業です。そうした手間を解消する新しいワークフローが、バイブデバッグです。</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205738" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260302174012/Vibe-debugging-Agent-Script-with-Agentforce-Vibes-e1772498701710.png?w=1000" class="postimages" width="1000" height="647" alt="Agentforce Vibesを使ったAgent Scriptのバイブデバッグ" />
			  </span>
			</p>
<p><span style="font-weight: 400">ビルダーのUIを操作して問題を調べるのではなく、</span><a href="https://www.salesforce.com/agentforce/developers/vibe-coding/"><b>Agentforce Vibes</b></a><span style="font-weight: 400">をペアプログラミングの相棒として活用すれば、トレースを任せることができます。やり方は簡単です。Visual Studio Codeで会話のターンをシミュレーションし、［</span><b>Agent Tracer（エージェントトレーサー）</b><span style="font-weight: 400">］タブからJSON形式の実行トレースをコピーしてAgentforce Vibesに貼り付け、期待していた応答をプロンプトで伝えるだけです。Agentforce Vibesは、意図していなかったトピックの振り分け、上書きされた変数、LLMが本来の流れから外れるきっかけになったプロンプトをすぐに見つけ出し、具体的なAgent Scriptの修正コードを提案します。</span></p>
<p><span style="font-weight: 400">AIを活用したこのワークフローを活用するには、コンテキストが何より重要です。Agent Scriptの構文と推論ループを理解できるように、Agentforce Vibesに正確な構成図を与える必要があります。そのために、リポジトリに2つの軽量なファイルを追加します。1つは</span><a href="https://github.com/trailheadapps/agent-script-recipes/blob/main/.airules/AGENT_SCRIPT.md"><span style="font-weight: 400">.airules/AGENT_SCRIPT.md</span></a><span style="font-weight: 400">などのルールファイル、もう1つはルートに配置するインデックスファイル、</span><a href="https://github.com/trailheadapps/agent-script-recipes/blob/main/AGENTS.md"><span style="font-weight: 400">AGENTS.md</span></a><span style="font-weight: 400">です。すぐに設定できるように、</span><a href="https://github.com/trailheadapps/agent-script-recipes/"><span style="font-weight: 400">agent-script-recipes</span></a><span style="font-weight: 400">レポジトリに、そのまま使えるサンプルが用意されています。</span></p>
<p><span style="font-weight: 400">ルールファイルを用意すれば、孤独で地道な作業だったデバッグが、会話しながら進められるワークフローに進化します。Agentforce Vibesで仮説をすばやく検証して、Agent Scriptをレビューしながら繰り返し改善できます。普遍的なコンテキスト基盤を利用したアプローチなので、このワークフローは</span><b>Claude Code</b><span style="font-weight: 400">や</span><b>Cursor</b><span style="font-weight: 400">といったAIコーディングエージェントやその他のツールにも適用できます。これで、Agent Scriptのデバッグや改善を自由自在に進められるようになります。</span></p>
<h2><span style="font-weight: 400">まとめ</span></h2>
<p><span style="font-weight: 400">Agent Scriptのデバッグは、ときにブラックボックスとの闘いのように思えるかもしれません。しかし、</span><b>Agentforce Builder</b><span style="font-weight: 400">と</span><b>Agentforce DX</b><span style="font-weight: 400">の拡張機能で実行トレースを活用すれば、勘に頼ることなく原因を突き止められます。</span></p>
<p><span style="font-weight: 400">AIエージェントの開発をマスターするうえで重要なのは、直感ではなく、データを信じることです。常に、実行ループの流れを念頭に置いておきましょう。最初に必ず</span><span style="font-weight: 400">start_agent</span><span style="font-weight: 400">がAIエージェントをトピックに振り分けること、ステップごとに実行されるコードとプロンプトテキストはまったく別のものであることを忘れないでください。厳密なロジックとプロンプトを切り分け、LLMに渡される正確なコンテキストを検証することで、問題をすばやく解決できます。手作業で変数値のずれをたどる場合でも、複雑なJSON形式のトレースを</span><b>Agentforce Vibes</b><span style="font-weight: 400">で解読する場合でも、信頼できるインテリジェントなAIエージェントを構築できるツールが一式そろっています。次にAIエージェントが想定どおりに動かなくなったときは、トレースログを掘り下げ、データを追ってみてください。</span></p>
<h2><span style="font-weight: 400">関連情報</span></h2>
<ul>
<li><a href="https://github.com/trailheadapps/agent-script-recipes"><span style="font-weight: 400">Agent Script Recipesサンプルアプリ（英語）</span></a></li>
<li><a href="https://youtube.com/playlist?list=PLgIMQe2PKPSJNLEQTPkr06gKhjnHgI1Jb&amp;si=2RRnfuL0hlypqLpQ"><span style="font-weight: 400">Agent Script Decoded動画シリーズ（英語）</span></a></li>
<li><a href="https://developer.salesforce.com/docs/ai/agentforce/guide/agent-script.html"><span style="font-weight: 400">Agent Scriptガイド（英語）</span></a></li>
<li><a href="https://www.salesforce.com/agentforce/levels-of-determinism/"><span style="font-weight: 400">Agentforceガイド</span></a></li>
</ul>
<h2><span style="font-weight: 400">執筆者について</span></h2>
<p><b>Mohith Shrivastava</b><span style="font-weight: 400">はSalesforceのプリンシパルデベロッパーアドボケイトです。15年にわたってAgentforce 360 Platform（旧Salesforce Platform）でエンタープライズ規模の製品を開発してきました。Salesforce開発者が質問し合い、知識を共有できる開発者向けフォーラムのSalesforce Stack Exchangeでも積極的に活動しています。</span><a href="https://www.linkedin.com/in/mohith-shrivastava-9a36464a/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">のプロフィールはこちら。</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-how-to-debug-agent-script-jp">Agent Script徹底解説 &#8211; Agent Scriptのデバッグの仕方</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-how-to-debug-agent-script-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205915</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260302175013/How-to-Debug-Agent-Script-e1772499027546.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260302175013/How-to-Debug-Agent-Script-e1772499027546.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Set Up Cross-System Observability with Correlation IDs</title>
		<link>https://developer.salesforce.com/blogs/2026/03/set-up-cross-system-observability-with-correlation-ids</link>
		<comments>https://developer.salesforce.com/blogs/2026/03/set-up-cross-system-observability-with-correlation-ids#respond</comments>
		<pubDate>Tue, 31 Mar 2026 14:00:23 +0000</pubDate>
		<dc:creator><![CDATA[Philippe Ozil]]></dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[APIs and Integrations]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Correlation ID]]></category>
		<category><![CDATA[Distributed Tracing]]></category>
		<category><![CDATA[Event monitoring]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[Integrations]]></category>
		<category><![CDATA[Observability]]></category>
		<category><![CDATA[Platform Events]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205895</guid>
		<description><![CDATA[<p>Learn how to use Correlation IDs to track transactions across Salesforce, Apex, and Flows.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/set-up-cross-system-observability-with-correlation-ids">Set Up Cross-System Observability with Correlation IDs</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">Business applications rarely operate as standalone systems; they rely on integrations. In such distributed architectures, a single user click can trigger a cascade of events. For example, in a Salesforce app, a user interaction can go through Apex, external APIs, and asynchronous jobs. When something breaks, identifying the root cause is like searching for a needle in a haystack. The solution for this is to work with </span><b>correlation IDs,</b><span style="font-weight: 400"> also referred to as request IDs. These are unique fingerprints that follow transactions across system boundaries.</span></p>
<p><span style="font-weight: 400">This post covers how to set up </span><b>observability</b><span style="font-weight: 400"> for operations across systems and how to architect a traceable system using Salesforce native identifiers and propagation patterns. It then explores a variety of integration scenarios demonstrating how to set up observability.</span></p>
<h2><span style="font-weight: 400">Tracking operations across systems</span></h2>
<p><span style="font-weight: 400">When multiple operations are chained together across systems, it becomes harder to diagnose issues and to measure performance. To compensate for this, developers use two techniques: logging and telemetry.</span></p>
<p><b>Logging</b><span style="font-weight: 400"> is the first level of traceability. It provides a historical journal of activities within a given application. This information is generally stored in text-based log files or a database. Logs are easy to set up and great for debugging or compliance. However, because they are specific to each system, they don’t give a full picture of the user experience.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205907" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260330115926/diagram-showing-multiple-systems-with-siloed-logs-e1774893683116.png?w=1000" class="postimages" width="1000" height="452" alt="diagram showing multiple systems with siloed logs." />
			  </span>
			</p>
<p><b>Telemetry</b><span style="font-weight: 400"> focuses on real-time analytics and is based on event-driven data streams captured from multiple sources. It enables tracking a given user operation as it travels through different systems. The key that links the events across these systems is a shared correlation ID.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205908" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260330115928/diagram-showing-multiple-systems-with-telemetry-collecting-events-in-a-unified-data-stream-e1774893696155.png?w=1000" class="postimages" width="1000" height="482" alt="diagram showing multiple systems with telemetry collecting events in a unified data stream." />
			  </span>
			</p>
<h2><span style="font-weight: 400">Correlating Salesforce Platform requests</span></h2>
<h3><span style="font-weight: 400">The core concept: How to correlate</span></h3>
<p>Every transaction in Salesforce is assigned a unique ID that is logged in the <a href="https://help.salesforce.com/s/articleView?id=xcloud.real_time_em_elf_browser.htm&amp;type=5"><u>Event Monitoring logs</u></a>. For example, this ID is represented by the <code>REQUEST_ID</code> field in <code>EventLogFile</code> logs. Using this native ID, you can seamlessly join your custom application logs with standard <a href="https://help.salesforce.com/s/articleView?id=platform.code_debug_log.htm&amp;type=5"><u>Salesforce logs</u></a>.</p>
<p><span style="font-weight: 400">As per the </span><a href="https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_eventlogfile.htm"><span style="font-weight: 400">EventLogFile documentation</span></a><span style="font-weight: 400">, the request ID value is either a 32-character </span><a href="https://opentelemetry.io/docs/specs/otel/overview/"><span style="font-weight: 400">OpenTelemetry</span></a><span style="font-weight: 400"> (OTel) and </span><a href="https://www.w3.org/TR/trace-context/#trace-id"><span style="font-weight: 400">W3C compatible Trace-Id</span></a><span style="font-weight: 400"> or a 22-character alphanumeric ID. This ID serves as the &#8220;parent&#8221; span for all subsequent operations (logs, callout, queueable, platform event, and so on).</span></p>
<h3><span style="font-weight: 400">Working with Apex</span></h3>
<p><span style="font-weight: 400">If you want to correlate some of your debug logs, you can prepend your lines with the request ID yourself:</span></p>
<pre language="apex">// Retrieve the native Salesforce Request ID
String correlationId = Request.getCurrent().getRequestId();
System.debug(correlationId +' &lt;- Transaction Correlation ID');
</pre>
<p><span style="font-weight: 400">Or, you can let a third-party logger like </span><a href="https://github.com/jongpie/NebulaLogger"><span style="font-weight: 400">Nebula Logger</span></a><span style="font-weight: 400"> handle it for you.</span></p>
<h3><span style="font-weight: 400">Passing a request ID when calling the Salesforce Platform APIs</span></h3>
<p><span style="font-weight: 400">When calling </span><a href="https://developer.salesforce.com/docs/apis#browse"><span style="font-weight: 400">Salesforce Platform APIs</span></a><span style="font-weight: 400">, the correlation ID must travel with the request so that the receiving systems (Salesforce and possibly other systems) can log it. This enables &#8220;distributed tracing&#8221;, allowing you to see the full lifecycle of a request as it crosses system boundaries.</span></p>
<p>To set a request ID with the <a href="https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_rest.htm"><u>Salesforce REST API</u></a>, set the <code>X-SFDC-REQUEST-ID</code> HTTP header with your unique correlation ID value. While it isn’t required for correlation, we also recommend that you set a client name using the <a href="https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/headers_calloptions.htm"><u><code>Sforce-Call-Options</code><span> header</span></u></a><span> as a best practice. Just like for the request ID, the supplied client name will be reported in the </span><code>CLIENT</code> column of <code>EventLogFile</code>.</p>
<p><span style="font-weight: 400">Here’s an example of how to configure a request for a custom </span><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest.htm"><span style="font-weight: 400">Apex REST web service</span></a><span style="font-weight: 400"> with such headers using the </span><a href="https://www.postman.com/salesforce-developers/salesforce-developers/collection/b32utmu/salesforce-platform-apis"><span style="font-weight: 400">Salesforce Platform APIs collection for Postman</span></a><span style="font-weight: 400">:</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205909" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260330115929/screenshot-of-Postman-showing-a-Salesforce-Platform-API-request-with-the-request-ID-and-client-name-passed-as-headers.png?w=770" class="postimages" width="770" height="435" alt="screenshot of Postman showing a Salesforce Platform API request with the request ID and client name passed as headers" />
			  </span>
			</p>
<p><span style="font-weight: 400">Although this is beyond the scope of this blog post, note that other Salesforce products let you achieve this. For example, MuleSoft lets you </span><a href="https://help.salesforce.com/s/articleView?id=001116575&amp;type=1"><span style="font-weight: 400">set custom correlation IDs for Flows with HTTP endpoints</span></a><span style="font-weight: 400"> and Salesforce Commerce APIs (SCAPI) let you </span><a href="https://engineering.salesforce.com/investigate-issues-with-ease-by-adding-a-correlation-id-to-your-api-7a689413ff44/"><span style="font-weight: 400">pass correlation IDs as part of your requests</span></a><span style="font-weight: 400">.</span></p>
<h3><span style="font-weight: 400">Propagating correlation IDs in Apex HTTP Callouts</span></h3>
<p><span style="font-weight: 400">When calling a third-party API with </span><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_callouts.htm"><span style="font-weight: 400">Apex HTTP callouts</span></a><span style="font-weight: 400">, use a custom header in your request to propagate the current transaction’s unique request ID (correlation ID).</span></p>
<pre language="apex">HttpRequest req = new HttpRequest();
req.setEndpoint('callout:My_External_Service');
req.setMethod('POST');

// Pass the correlation ID as a header
String requestId = Request.getCurrent().getRequestId();
req.setHeader('', requestId);

Http http = new Http();
HttpResponse res = http.send(req);
</pre>
<p>Note: If your downstream systems support the <a href="https://www.w3.org/TR/trace-context/"><u>Trace Context</u></a> W3C standard, you can map your request ID to a <a href="https://www.w3.org/TR/trace-context/#traceparent-header"><code>traceparent</code><u><span> header</span></u></a><span>. This allows you to simplify the correlation configuration and unify the event representation across logs.</span></p>
<h3><span style="font-weight: 400">Propagating correlation IDs in Platform Events</span></h3>
<p><a href="https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_intro.htm"><span style="font-weight: 400">Platform event</span></a><span style="font-weight: 400"> publishing is asynchronous. This means that the following three elements that control the life cycle of an event are transactionally separate and do not natively share the same request ID:</span></p>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">the Apex code or client that enqueues the event for publication</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">the event bus process that publishes the event</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">the Apex trigger or client that subscribes to the event.</span></li>
</ul>
<p>While Salesforce provides a system <code>EventUuid</code> to <a href="https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_event_uuid.htm"><u>identify event messages</u></a>, this UUID is generated after publish and does not identify the originating transaction. In order to pass correlation information in a platform event, you must create a custom field (e.g., <code>SourceRequestId__c</code>) on your platform event object to carry the context.</p>
<p><span style="font-weight: 400">Here’s an example of how you can do this when publishing an event with Apex:</span></p>
<pre language="apex">// Create the event
Order_Event__e event = new Order_Event__e();
event.Order_Number__c = '12345';

// Manually propagate the correlation ID
event.SourceRequestId__c = Request.getCurrent().getRequestId();

// Publish
EventBus.publish(event);
</pre>
<p>When the subscriber (e.g., an external app or an after insert Apex trigger) receives the event, it reads the <code>SourceRequestId__c</code> value to retrieve the correlation ID and continue the logging trace.</p>
<h3><span style="font-weight: 400">Propagating correlation IDs when working with asynchronous Apex</span></h3>
<p><span style="font-weight: 400">Asynchronous jobs like </span><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_queueing_jobs.htm"><span style="font-weight: 400">Queueable</span></a><span style="font-weight: 400">, </span><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_batch.htm"><span style="font-weight: 400">Batch</span></a><span style="font-weight: 400">, </span><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_scheduler.htm"><span style="font-weight: 400">Schedulable</span></a><span style="font-weight: 400">, and </span><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_invoking_future_methods.htm"><span style="font-weight: 400">future methods</span></a><span style="font-weight: 400"> run in fresh transaction contexts with brand new request IDs. To trace the parent transactions that enqueued the jobs, you must pass the parent request ID through the constructor.</span></p>
<p><span style="font-weight: 400">Here’s an example of how you can store the parent transaction’s correlation ID as a state variable within a Queueable class:</span></p>
<pre language="apex">public class AsyncProcessor implements Queueable {
    private final String parentCorrelationId;

    // Constructor captures the ID from the calling transaction
    // Same logic applies to batch
    public AsyncProcessor() {
        this.parentCorrelationId = Request.getCurrent().getRequestId();
    }

    public void execute(QueueableContext context) {
        // Log using the parent ID to maintain continuity
        System.debug('Processing Queueable linked to: ' + this.parentCorrelationId);
        
        // If making further callouts, pass the parent request ID, not the current request ID
	 Assert.areNotEqual(
this.parentCorrelationId,
Request.getCurrent().getRequestId(),
'The two request IDs are different because of the asynchronicity'
);
    }
}
</pre>
<p>Use a similar approach for <code>Batchable</code> and <code>Schedulable</code>.</p>
<p>Use a String parameter to pass the ID in <code>@future</code> methods.</p>
<h3><span style="font-weight: 400">Propagating correlation IDs in Flow</span></h3>
<p><span style="font-weight: 400">When working with Flow, you can call third-party APIs declaratively with an </span><a href="https://help.salesforce.com/s/articleView?id=platform.flow_http_callout_configure.htm&amp;type=5"><span style="font-weight: 400">HTTP callout action</span></a><span style="font-weight: 400"> or with an </span><a href="https://help.salesforce.com/s/articleView?id=platform.enhanced_external_services_example_create_flow.htm&amp;type=5"><span style="font-weight: 400">external service action</span></a><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">Regardless of the action type that you use, you first need to obtain the request ID. Flow does not have a native &#8220;Get Request ID&#8221; action so you must build your own. To do so, you can write and call a simple invocable Apex class to expose the current request ID to the flow:</span></p>
<pre language="apex">public class FlowCorrelationHelper {
    @InvocableMethod(
        label='Get Correlation ID'
        description='Returns the current Request ID'
    )
    public static List&lt;String&gt; getCorrelationId() {
        return new List&lt;String&gt;{
            Request.getCurrent().getRequestId()
        };
    }
}
</pre>
<p><span style="font-weight: 400">At this point, if you use an HTTP callout action, you can pass the correlation ID as a custom header.</span></p>
<p><span style="font-weight: 400">However, if you use an external service action, you might need to modify your service’s definition manually to add the proper header for passing the correlation ID in your operations. At run time, you won’t be able to create headers that are not part of the service definition.</span></p>
<h2><span style="font-weight: 400">Sample integration scenarios</span></h2>
<p><span style="font-weight: 400">Now that we’ve covered the theory, let’s take a look at four integration scenarios that mix the different techniques for passing request IDs across systems.</span></p>
<h3><span style="font-weight: 400">Scenario 1: Inbound request with custom Apex execution</span></h3>
<p>In this scenario, a third-party system sends a REST API request to the platform with a correlation ID passed in the <code>X-SFDC-REQUEST-ID</code> HTTP header. Upon receiving the request, the correlation ID is automatically retrieved and saved as the current request ID natively by the platform. Some custom Apex code (either a trigger or a custom Apex REST web service) is then executed. As part of the Apex execution, the correlation ID can be retrieved via <code>Request.getCurrent().getRequestId()</code>. Request IDs are saved in the event log file.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205903" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260330115917/Diagram-illustrating-the-first-scenario-e1774893626694.png?w=1000" class="postimages" width="1000" height="338" alt="Diagram illustrating the first scenario." />
			  </span>
			</p>
<h3><span style="font-weight: 400">Scenario 2: Inbound platform event with custom Apex execution</span></h3>
<p>In this second scenario, a third-party system publishes a custom platform event thanks to a REST API call. The request holds a correlation ID in the <code>X-SFDC-REQUEST-ID</code> HTTP header and the custom event holds the same correlation ID in a custom <code>SourceRequestId__c</code> field.</p>
<p><span style="font-weight: 400">Upon receiving the request, the correlation ID is automatically retrieved and saved in the event log file and the platform event is published. The platform event is captured by the platform as part of an after insert Apex trigger.</span></p>
<p>Due to the asynchronous nature of triggers, the code runs in a separate transaction and cannot reuse the original request ID. Instead, the correlation ID is retrieved from the <code>SourceRequestId__c</code> event field and can be propagated further or logged.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205905" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260330115922/Diagram-illustrating-the-second-scenario-e1774893656932.png?w=1000" class="postimages" width="1000" height="424" alt="Diagram illustrating the second scenario." />
			  </span>
			</p>
<h3><span style="font-weight: 400">Scenario 3: REST exchange with asynchronous processing</span></h3>
<p><span style="font-weight: 400">In this third scenario, a third-party system sends a request to the platform. This triggers some asynchronous processing. Once the process completes, the platform sends a request to a third-party system (either the one that triggered the scenario or a different one). The same correlation ID is shared across systems during the entire sequence.</span></p>
<p><span style="font-weight: 400">As in previous scenarios, the correlation ID is passed to the platform via a header. The API request triggers the execution of custom Apex code. The code creates and enqueues a job for some long-running processing.</span></p>
<p><span style="font-weight: 400">Since the queueable job runs asynchronously, a distinct request ID is generated in this context. In order to propagate the original correlation ID, we retrieve the Apex caller’s request ID and pass it to the job via the Queueable constructor.</span></p>
<p><span style="font-weight: 400">Once the job is completed, it runs an Apex callout that sends a request back to the third-party system with the correlation ID passed in the request body or in a header.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205906" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260330115924/Diagram-illustrating-the-third-scenario-with-an-asynchronous-queueable-job-e1774893671125.png?w=1000" class="postimages" width="1000" height="401" alt="Diagram illustrating the third scenario with an asynchronous queueable job." />
			  </span>
			</p>
<p>A variation of this scenario may include a platform event being sent back to the third-party system. This variant still includes asynchronous processing as the event bus assigns its own <code>EventUuid</code> after publish and doesn’t carry the original request ID. Hence, a custom <code>SourceRequestId__c</code> field is required to propagate the correlation ID.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205902" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260330115914/Diagram-illustrating-a-variant-of-the-third-scenario-with-a-platform-event-e1774893608349.png?w=1000" class="postimages" width="1000" height="404" alt="Diagram illustrating a variant of the third scenario with a platform event." />
			  </span>
			</p>
<h3><span style="font-weight: 400">Scenario 4: Flow with an HTTP callout</span></h3>
<p><span style="font-weight: 400">In this scenario, a screen or record flow processes some data, which then makes a callout to a third-party system. Since flows do not have a native &#8220;Get Request ID&#8221; action, an Apex class with an </span><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_annotation_InvocableMethod.htm"><span style="font-weight: 400">invocable method</span></a><span style="font-weight: 400"> is required to expose the current Request ID to the Flow. Once retrieved, the request ID can be sent as part of the outbound request either in the body or as a header.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205904" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260330115920/Diagram-illustrating-the-fourth-scenario-with-a-flow-and-an-HTTP-callout-e1774893640894.png?w=1000" class="postimages" width="1000" height="327" alt="Diagram illustrating the fourth scenario with a flow and an HTTP callout." />
			  </span>
			</p>
<p><span style="font-weight: 400">If you are using HTTP Callouts via Flow, you cannot dynamically set headers in Flow Builder. You may need to configure </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.nc_named_creds_and_ext_creds.htm&amp;type=5"><span style="font-weight: 400">external credentials</span></a><span style="font-weight: 400"> with custom headers to manage how metadata is passed, though dynamic injection often requires an Apex invocable action.</span></p>
<p><span style="font-weight: 400">As with the previous scenario, a variation of this scenario may include a platform event being sent back to the third-party system. In this case, the request ID is propagated to the third-party system using a custom event field.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205901" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260330115910/Diagram-illustrating-a-variant-of-the-fourth-scenario-with-a-flow-and-a-platform-event-e1774893593701.png?w=1000" class="postimages" width="1000" height="353" alt="Diagram illustrating a variant of the fourth scenario with a flow and a platform event." />
			  </span>
			</p>
<h2><span style="font-weight: 400">Conclusion</span></h2>
<p><span style="font-weight: 400">The techniques and patterns covered in this post provide a framework for implementing observability across the Salesforce Platform and third-party systems. The platform&#8217;s native request IDs serve as the foundation for end-to-end distributed tracing, and the key to success is consistent propagation across every boundary.</span></p>
<p><span style="font-weight: 400">Once this transmission chain is correctly assembled, you can move beyond siloed logs to gain immediate and deep insights into cross-system interactions. This unified view is critical for efficiently troubleshooting issues and investigating performance bottlenecks, allowing teams to focus on a shared trace rather than wasting time cross-referencing multiple logs by date and time. Implementing these correlation patterns is essential for building and maintaining highly performant and resilient distributed applications.</span></p>
<h2><span style="font-weight: 400">Resources</span></h2>
<ul>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_eventlogfile.htm"><span style="font-weight: 400">EventLogFile documentation</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_class_System_Request.htm"><span style="font-weight: 400">Request Apex class documentation</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apievent.htm"><span style="font-weight: 400">ApiEvent documentation</span></a></li>
</ul>
<h1><span style="font-weight: 400">About the authors</span></h1>
<p><b>Sébastien Colladon</b><span style="font-weight: 400"> is a Salesforce Certified Technical Architect (CTA). He loves contributing to the Salesforce ecosystem. He is passionate about his craft. Follow him on </span><a href="http://www.linkedin.com/in/sebastien-colladon"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400"> and check out his </span><a href="https://github.com/scolladon"><span style="font-weight: 400">GitHub projects</span></a><span style="font-weight: 400">.</span></p>
<p><b>Philippe Ozil </b><span style="font-weight: 400">is a Principal Developer Advocate at Salesforce, where he focuses on the Salesforce Platform. He writes technical content and speaks frequently at conferences. He is a full-stack developer and enjoys working with APIs, DevOps, robotics, and VR projects. Follow him on</span><a href="https://x.com/PhilippeOzil"> <span style="font-weight: 400">X</span></a><span style="font-weight: 400">, </span><a href="https://www.linkedin.com/in/philippeozil/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">, and </span><a href="https://bsky.app/profile/pozil.bsky.social"><span style="font-weight: 400">Bluesky</span></a><span style="font-weight: 400">, and check out his</span><a href="https://github.com/pozil"> <span style="font-weight: 400">GitHub projects</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/set-up-cross-system-observability-with-correlation-ids">Set Up Cross-System Observability with Correlation IDs</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/03/set-up-cross-system-observability-with-correlation-ids/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205895</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260331002013/DoubleHeadshot-1-e1774938031745.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260331002013/DoubleHeadshot-1-e1774938031745.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Expose Your Composable Storefront in Page Designer Without ISML</title>
		<link>https://developer.salesforce.com/blogs/2026/03/expose-your-composable-storefront-in-page-designer-without-isml</link>
		<comments>https://developer.salesforce.com/blogs/2026/03/expose-your-composable-storefront-in-page-designer-without-isml#respond</comments>
		<pubDate>Thu, 26 Mar 2026 14:00:15 +0000</pubDate>
		<dc:creator><![CDATA[Katia Hage]]></dc:creator>
				<category><![CDATA[APIs and Integrations]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[New Developments]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Composable Storefront]]></category>
		<category><![CDATA[Dynamic Component Loading]]></category>
		<category><![CDATA[Headless Commerce]]></category>
		<category><![CDATA[ISML to React Migration]]></category>
		<category><![CDATA[Metadata Cartridge]]></category>
		<category><![CDATA[Page Designer]]></category>
		<category><![CDATA[PWA Kit]]></category>
		<category><![CDATA[React Components]]></category>
		<category><![CDATA[Salesforce B2C Commerce]]></category>
		<category><![CDATA[Storefront Performance]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205876</guid>
		<description><![CDATA[<p>Eliminate duplicate work by building Page Designer components once in React to streamline your workflow and boost storefront performance.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/expose-your-composable-storefront-in-page-designer-without-isml">Expose Your Composable Storefront in Page Designer Without ISML</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">If you&#8217;ve built </span><a href="https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-dev-for-page-designer.html"><span style="font-weight: 400">Page Designer</span></a><span style="font-weight: 400"> components in B2C Commerce for a composable storefront in the past, you had to maintain two implementations, one in </span><a href="https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-isml.html"><span style="font-weight: 400">ISML</span></a><span style="font-weight: 400"> for Page Designer and another in React for your storefront. With </span><a href="https://developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/pwa-framework.html"><span style="font-weight: 400">PWA Kit </span></a><span style="font-weight: 400">v3.17, that duplication is no longer necessary.</span></p>
<p><span style="font-weight: 400"></span><span style="font-weight: 400">You can now expose React-based composable storefront components directly in Page Designer, without maintaining ISML versions. Also, Page Designer now uses dynamic component loading, which loads only components that are in use. The new Page Designer streamlines your workflow and reduces maintenance, saving you development time while boosting storefront performance through dynamic component loading! In fact, the seamless integration of Page Designer with composable storefronts can save significant development time as reported by some early adopters. </span></p>
<p><span style="font-weight: 400">In this post, we explain how the new headless Page Designer architecture works and how to use it in your storefront.</span></p>
<h2><span style="font-weight: 400">Comparing new and old Page Designer approaches</span></h2>
<p><span style="font-weight: 400">The diagram below shows a side-by-side comparison of the data flow in the old approach and the new approach. It illustrates the shift from a legacy ISML-dependent architecture to a direct Page Designer integration with the PWA-Kit based Composable Storefront. The new architecture removes the ISML rendering layer. Page Designer now injects your composable storefront directly, where React components render the page. The </span><i><span style="font-weight: 400">metadata cartridge</span></i><span style="font-weight: 400"> contains reusable pages and components and defines component structure. In the new approach, Page Designer doesn&#8217;t execute server-side JavaScript from the metadata cartridge. Instead, all logic is implemented in the React storefront components.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205882" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260325134746/image1-e1774468079969.png?w=1000" class="postimages" width="1000" height="496" alt="Diagram comparing the old approach (left) vs the new integrated Page Designer approach (right)" />
			  </span>
			</p>
<p><span style="font-weight: 400">Check out the differences between the new headless approach and the old approach of building reusable pages and components in Page Designer. </span></p>
<table>
<tbody>
<tr>
<td><b>Aspect</b></td>
<td><b>Old Approach with ISML</b></td>
<td><b>New Approach</b></td>
</tr>
<tr>
<td><span style="font-weight: 400">Component Definition</span></td>
<td><span style="font-weight: 400">ISML and React components required</span></td>
<td><span style="font-weight: 400">React components only</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Metadata</span></td>
<td><span style="font-weight: 400">Component metadata in JSON</span></td>
<td><span>Component metadata in JSON with </span><code>arch_type: "headless"</code></td>
</tr>
<tr>
<td><span style="font-weight: 400">Maintenance</span></td>
<td><span style="font-weight: 400">Two implementations (ISML and React)</span></td>
<td><span style="font-weight: 400">Single React implementation</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Component Registry and Bundle Impact</span></td>
<td><span style="font-weight: 400">Uses a mapping object that you configure manually to register components. All components loaded. No lazy loading.</span></td>
<td><span style="font-weight: 400">Uses a dynamic registry to lazy load components. Only the used components are loaded (code splitting). Loading of non-critical components or resources is deferred until they are needed.</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Dependencies</span></td>
<td>Requires<code> @salesforce/commerce-sdk-react</code></td>
<td><span>Requires </span><code>@salesforce/storefront-next-runtime </code>in PWA Kit v3.17 or later, in addition to <code>@salesforce/commerce-sdk-react</code></td>
</tr>
<tr>
<td><span style="font-weight: 400">Page Designer React Primitives</span></td>
<td><span style="font-weight: 400">Static regions and components with limited behavior</span></td>
<td><span style="font-weight: 400">Design-mode-aware regions and components rendered by the storefront</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Server-Side Custom JavaScript</span></td>
<td><span style="font-weight: 400">Executed at run time </span></td>
<td><span style="font-weight: 400">Metadata JavaScript files aren&#8217;t executed. All component logic runs in the React storefront.</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Preview</span></td>
<td><span style="font-weight: 400">Preview in Page Designer shows only ISML pages. </span><a href="https://developer.salesforce.com/docs/commerce/commerce-solutions/guide/storefront-preview.html"><span style="font-weight: 400">Storefront Preview</span></a><span style="font-weight: 400"> needed for PWA live preview.</span></td>
<td><span style="font-weight: 400">Page Designer can preview PWA Kit storefront.</span></td>
</tr>
</tbody>
</table>
<h2><span style="font-weight: 400">Page Designer new metadata attributes for PWA Kit</span></h2>
<p><span style="font-weight: 400">Page Designer uses a hierarchical architecture with three main concepts: pages, regions, and components. (To learn more, see </span><a href="https://developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/page-designer.html"><span style="font-weight: 400">Integrate Page Designer with PWA Kit</span></a><span style="font-weight: 400"> in the </span><i><span style="font-weight: 400">Composable Storefront Developer Guide</span></i><span style="font-weight: 400">.) Page Designer components are defined using metadata files in the metadata cartridge. When the new headless mode is enabled, the storefront is responsible for rendering the components.</span></p>
<p>To enable headless rendering, two metadata attributes are required: <code>arch_type</code> and <code>route</code>. With the <code>arch_type</code> attribute, Page Designer recognizes your storefront as headless, and doesn&#8217;t render ISML components. The <code>route</code> attribute specifies a page&#8217;s location in the storefront. The route attribute enables Page Designer to open the correct storefront route when rendering the page in edit and preview mode.</p>
<h3><span style="font-weight: 400">The arch_type field in Page Designer metadata files</span></h3>
<p>Add <code>"arch_type": "headless"</code> to Page Designer metadata files such as pages, components, and aspect types.<br />
When <code>arch_type</code> is set to <code>"headless"</code>, preexisting custom JavaScript in Page Designer metadata isn&#8217;t executed—all logic must be in your React components.</p>
<h3><span style="font-weight: 400">The route field in pages</span></h3>
<p>Add the <code>route</code> field to specify a page&#8217;s location in the storefront. For example, <code>"/"</code> for homepage or <code>"/about"</code> for the About page. Also, you can set dynamic routes with parameters. For example, <code>"/product/:productId"</code> or<code> "/category/:categoryId"</code>. Route parameters must match the attribute IDs defined in the page&#8217;s aspect type.</p>
<p><span style="font-weight: 400">To learn more about routes, see </span><a href="https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/page-designer.html#understanding-page-designer-components"><span style="font-weight: 400">Understanding Page Designer Components</span></a><span style="font-weight: 400"> in the </span><i><span style="font-weight: 400">Composable Storefront Guide</span></i><span style="font-weight: 400">.</span></p>
<h3><span style="font-weight: 400">Example page</span></h3>
<p>In this example, we show how to use the <code>headless</code> attribute with the home route of <code>/</code>.</p>
<pre language="json">{
    "name": "Home Page",
    "description": "Main landing page",
    "arch_type": "headless",
    "route": "/",
    "region_definitions": [...]
}
</pre>
<h3><span style="font-weight: 400">Example: Card component metadata</span></h3>
<p><span style="font-weight: 400">In this example, we </span><span style="font-weight: 400">show metadata for a card component with </span><span style="font-weight: 400">the <code>headless</code></span><span style="font-weight: 400"> attribute.</span></p>
<pre language="json">{
    "name": "Content Card",
    "description": "Flexible card component",
    "group": "commerce_assets",
    "arch_type": "headless",
    "region_definitions": [],
    "attribute_definition_groups": [...]

}
</pre>
<p><span style="font-weight: 400">To learn more about Page Designer best practices and permissions, see </span><a href="https://developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/b2c-dev-for-page-designer.html"><span style="font-weight: 400">Page Designer</span></a><span style="font-weight: 400"> in the </span><i><span style="font-weight: 400">B2C Commerce Guide</span></i><span style="font-weight: 400">.</span></p>
<h2><span style="font-weight: 400">Migration Checklist: ISML to Headless</span></h2>
<p><span style="font-weight: 400">To migrate your app to the new headless architecture, follow this sequence of steps.</span></p>
<ol>
<li style="font-weight: 400">Install the required dependency, the <code>@salesforce/storefront-next-runtime</code><span> package.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Update component metadata to headless.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Update page metadata with routes.</span></li>
<li style="font-weight: 400">Update the aspect type metadata for the product detail page (PDP), the product list page (PLP), and search, by adding the <code>arch_type</code> field.</li>
<li style="font-weight: 400"><span style="font-weight: 400">Migrate from manual mapping to the dynamic registry lazy loading.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Set up PageDesignerProvider in the App component.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Create a PageDesignerInit component.</span></li>
<li style="font-weight: 400">Create the <code>useGlobalAnchorBlock</code> Hook.</li>
<li style="font-weight: 400"><span style="font-weight: 400">Add PageDesignerInit to the App.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Deploy and test the storefront.</span></li>
</ol>
<p><span style="font-weight: 400">For details, see </span><a href="https://developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/page-designer.html#migration-steps"><span style="font-weight: 400">Migration Steps</span></a><span style="font-weight: 400"> in the </span><i><span style="font-weight: 400">Composable Storefront Developer Guide</span></i><span style="font-weight: 400">. </span></p>
<h2><span style="font-weight: 400">Conclusion</span></h2>
<p><span style="font-weight: 400">The new headless Page Designer architecture removes one of the biggest pain points when building composable storefronts: maintaining duplicate ISML implementations. Developers can now build Page Designer components once in React, while merchants continue to use the familiar Page Designer UI to compose pages. This approach reduces maintenance, simplifies development workflows, and improves performance through dynamic component loading.</span></p>
<h2><span style="font-weight: 400">Resources</span></h2>
<ul>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-dev-for-page-designer.html"><span style="font-weight: 400">B2C Commerce Guide: Page Designer</span></a><span style="font-weight: 400"> </span></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/commerce/pwa-kit-managed-runtime/guide/page-designer.html"><span style="font-weight: 400">Composable Storefront Developer Guide: Integrate Page Designer with PWA Kit</span></a></li>
</ul>
<h2><span style="font-weight: 400">About the Authors</span></h2>
<p><b>Maria Juraschik</b><span style="font-weight: 400"> is a Lead Software Engineer at Salesforce, working on Page Designer and Content Management.</span></p>
<p><b>Katia Hage</b><span style="font-weight: 400"> is a Lead Technical Writer at Salesforce. Katia writes documentation for storefront solutions for Commerce Cloud. Previously, Katia also covered documentation and Trailhead for the Salesforce Platform and Data 360.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/expose-your-composable-storefront-in-page-designer-without-isml">Expose Your Composable Storefront in Page Designer Without ISML</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/03/expose-your-composable-storefront-in-page-designer-without-isml/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205876</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260325134454/Expose-Your-Composable-Storefront-in-Page-Designer-e1774467925262.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260325134454/Expose-Your-Composable-Storefront-in-Page-Designer-e1774467925262.png?w=1000" medium="image" />
	</item>
		<item>
		<title>The Salesforce Developer’s Guide to TDX 2026</title>
		<link>https://developer.salesforce.com/blogs/2026/03/the-salesforce-developers-guide-to-tdx-2026</link>
		<comments>https://developer.salesforce.com/blogs/2026/03/the-salesforce-developers-guide-to-tdx-2026#respond</comments>
		<pubDate>Tue, 24 Mar 2026 15:01:20 +0000</pubDate>
		<dc:creator><![CDATA[Sarah Welker]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Agentforce Vibes]]></category>
		<category><![CDATA[APIs and Integrations]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Salesforce Events]]></category>
		<category><![CDATA[Salesforce Releases]]></category>
		<category><![CDATA[Agentforce 360]]></category>
		<category><![CDATA[Agentic Enterprise]]></category>
		<category><![CDATA[developer community]]></category>
		<category><![CDATA[lwc]]></category>
		<category><![CDATA[Real-Time Search API]]></category>
		<category><![CDATA[salesforce flow]]></category>
		<category><![CDATA[Slack]]></category>
		<category><![CDATA[TDX26]]></category>
		<category><![CDATA[Vibe Coding]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205846</guid>
		<description><![CDATA[<p>Build the Agentic Enterprise. Join us at TDX 2026, April 15-16, in San Francisco or on Salesforce+.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/the-salesforce-developers-guide-to-tdx-2026">The Salesforce Developer’s Guide to TDX 2026</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">Calling all Salesforce Developers: it’s time to build the Agentic Enterprise. At </span><a href="https://www.salesforce.com/tdx/register/?&amp;utm_source=blog&amp;utm_medium=organic_social&amp;utm_campaign=TDX26_Dev_Blog_RegLaunch_IP&amp;d=701ed00000zwR6SAAU"><span style="font-weight: 400">TDX</span></a><span style="font-weight: 400"> on April 15-16, 2026, you’ll experience the future of software and learn how to build it with two immersive days of 400+ deep technical sessions, hands-on training, 100+ live product demos, and direct access to Salesforce engineers and product experts shaping what’s next. </span></p>
<p><span style="font-weight: 400">Be at the forefront of the largest technological shift in decades and get hands-on with the latest tools, features, and best practices to build the next generation of apps and agents. Whether you’re attending in person or tuning in virtually on </span><a href="https://www.salesforce.com/plus/experience/tdx_2026?&amp;utm_source=blog&amp;utm_medium=organic_social&amp;utm_campaign=TDX26_Devs_Blog_RegLaunch_SF+&amp;d=701ed000011mNZAAA2"><span style="font-weight: 400">Salesforce+</span></a><span style="font-weight: 400">, we’ve curated our top recommendations to help you jumpstart your agentic AI journey while maximizing your time at TDX 2026. </span></p>
<p><span style="font-weight: 400">With </span><a href="https://reg.salesforce.com/flow/plus/tdx26/agendabuilder/page/agendabuilder?&amp;utm_source=blog&amp;utm_medium=organic_social&amp;utm_campaign=TDX_Blog_Devs_AgendaBuilder_IP&amp;d=701ed000016U8ltAAC"><span style="font-weight: 400">Agenda Builder</span></a><span style="font-weight: 400"> live, now’s the time to start bookmarking your must-attend sessions to plan your perfect two days</span><span style="font-weight: 400">.</span></p>
<h2><b>Experience the big moments and must-see keynotes</b></h2>
<p><span style="font-weight: 400">Get started by bookmarking the event’s can&#8217;t-miss sessions, including a visionary keynote, Hackathon Showdown, and an exciting product roadmap discussion. Add these sessions to your agenda if you’re attending in person, and follow the livestream on </span><a href="https://www.salesforce.com/plus/experience/tdx_2026?&amp;utm_source=blog&amp;utm_medium=organic_social&amp;utm_campaign=TDX26_Devs_Blog_RegLaunch_SF+&amp;d=701ed000011mNZAAA2"><span style="font-weight: 400">Salesforce+</span></a><span style="font-weight: 400"> if you’re joining remotely.</span></p>
<h3>TDX Main Keynote</h3>
<p><span style="font-weight: 400">Discover how to build your Agentic Enterprise with Salesforce and unlock the power of humans and agents driving customer success together.<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1767708938892001U7SC">Add to your agenda</a><br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bb.png" alt="💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://www.salesforce.com/plus/experience/tdx_2026/tdx-2026-main-keynote">Watch on Salesforce+</a></span></p>
<h3>True to the Core</h3>
<p><span style="font-weight: 400">Join Co-Founder Parker Harris and Salesforce product leaders to hear the latest Agentforce 360 roadmap highlights, followed by a live Q&amp;A. This is a unique opportunity to ask your questions and get answers directly from the experts.<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1768431561711001kqY8">Add to your agenda</a><br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bb.png" alt="💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://www.salesforce.com/plus/experience/tdx_2026/true-to-the-core-tdx-2026">Watch on Salesforce+</a></span></p>
<h3>TDX Hackathon Showdown</h3>
<p><span style="font-weight: 400">Watch finalists pitch Agentforce solutions to esteemed judges for a $50,000 prize. Discover how these innovators are building the future of the Agentic Enterprise.<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1768431587636001ktA1">Add to your agenda</a><br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bb.png" alt="💻" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://www.salesforce.com/plus/experience/tdx_2026/tdx-hackathon-showdown">Watch on Salesforce+</a></span></p>
<h2><b>Learn how to build the Agentic Enterprise in the Campground</b></h2>
<p><span style="font-weight: 400">Once you’ve secured your badge, head to the Campground to see the Agentic Enterprise in action. This is where apps, agents, data, and Slack come to life through immersive demos, hands-on experiences, and customer stories highlighting what’s possible with Agentic AI. </span></p>
<h3>Get hands-on with Agentforce Vibes</h3>
<p><span style="font-weight: 400">The Agentforce Vibes area is an immersive, hands-on space designed to help you unlock the power of enterprise vibe coding and experience Agentforce Vibes in action. Participate in a guided, 15-minute hands-on project and build a React app with Agentforce Vibes to earn an exclusive t-shirt. </span></p>
<h3>Dive deeper with product demos at Platform Park</h3>
<p><span style="font-weight: 400">Platform Park features 18 expert-led demos designed to take technical audiences beyond the keynote stage and theater sessions, and into the “how” of building, scaling, and customizing next-generation solutions. Whether you’re looking to deepen what you’ve learned so far at TDX26 or explore specific innovations, you&#8217;ll gain practical insights through guided product demonstrations that sharpen your technical expertise.</span></p>
<h3>Attend introductory sessions at Basecamp Theater</h3>
<p><span style="font-weight: 400">Located in the heart of Platform Park, Basecamp Theater features six repeating sessions that break down the fundamentals of Agentforce, Data 360, and more. Whether you’re a seasoned pro or new to the Salesforce ecosystem, these introductory sessions provide the essential grounding you need to tackle more advanced demos and workshops. Sessions include:</span></p>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">Introduction to Agentforce</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Introduction to Data 360</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Introduction to Slackbot: Your Personal Agent for Work</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Introduction to Agentforce in Slack</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Introduction to Platform</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Introduction to Enterprise Vibe Coding with Agentforce Vibes</span></li>
</ul>
<p><span style="font-weight: 400">To find these theater sessions in the </span><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog?&amp;utm_source=blog&amp;utm_medium=organic_social&amp;utm_campaign=TDX26_Dev_Blog_Sessions_IP&amp;d=701ed00000zxlHVAAY"><span style="font-weight: 400">TDX session catalog</span></a><span style="font-weight: 400">, select &#8220;Session Type&#8221; in the left navigation and then select &#8220;Activity&#8221;.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205869" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260324021513/Screenshot-2026-03-24-at-1.14.43-AM-e1774340134538.png?w=1000" class="postimages" width="1000" height="662" alt="TDX 2026 session catalog with the session type &quot;Activity&quot; checked." />
			  </span>
			</p>
<h3>Test your skills at Camp Mini Hack</h3>
<p><span style="font-weight: 400">Visit Camp Mini Hack to get hands-on with Agentforce and earn exclusive prizes. Designed for all skill levels, these 30-minute challenges focus on building intelligent agents, automating complex workflows, and integrating data across the Agentforce 360 Platform.</span></p>
<h3>Explore The Agentic Enterprise</h3>
<p><span style="font-weight: 400">Visit The Agentic Enterprise to see how global leaders are building the future through immersive stories that showcase real-world enterprise success in Agentforce City. This is your destination to get &#8220;under the hood&#8221; with technical specifications and implementation details from teams already managing agents at scale. From autonomous service to complex workflow chaining, you’ll find the practical insights needed to construct your own agentic future.</span></p>
<h3>Scale faster with Agentforce Consultations</h3>
<p><span style="font-weight: 400">Agentforce Consultations</span> <span style="font-weight: 400">connect you with technical experts to translate product capability into a practical, validated build plan. This is your opportunity to solve technical blockers and walk away with the specific technical specifications needed to maintain momentum the minute you’re back to work.</span></p>
<h3>Build your Agentic Enterprise at the Agentforce Zone</h3>
<p><span style="font-weight: 400">Explore the full lifecycle of trusted, autonomous AI agents at the Agentforce Zone</span><b>, </b><span style="font-weight: 400">featuring six specialized booths and one featured Mega Demo. This is the space to move beyond theory and see how data, human judgment, and autonomous AI agents come together in production. Whether you’re looking to master Agentforce Studio, explore workflow chaining, or dive into Agentforce Observability, you’ll find the technical immersion needed to build and govern real-world enterprise systems. </span></p>
<h3>Unify your Agentic Enterprise with Slack</h3>
<p><span style="font-weight: 400">Experience Slack as the front door to Salesforce, apps, and agents. This interactive journey transforms traditional demos into a hands-on adventure where you’ll see how Slack and the Real-Time Search API turn isolated tools into collaborative teammates. Chat with Slackbot using your unique context, build with Agentforce agents, and explore native automations with Salesforce Flow and Workflow Builder. Complete the journey to earn an exclusive TDX26 Slackbot plushy.</span></p>
<h2><b>Skill up with developer sessions</b></h2>
<p><span style="font-weight: 400">Developer sessions are your opportunity to learn directly from product experts, Salesforce Developer Advocates, and peers building the Agentic Enterprise. These sessions cover technical deep dives, real-world implementations, and innovative solutions across the Agentforce 360 Platform. Join us to sharpen your skills and deliver production-ready solutions at scale. </span></p>
<p><span style="font-weight: 400">To find developer-focused sessions in the </span><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog?&amp;utm_source=blog&amp;utm_medium=organic_social&amp;utm_campaign=TDX26_Dev_Blog_Sessions_IP&amp;d=701ed00000zxlHVAAY"><span style="font-weight: 400">TDX session catalog</span></a><span style="font-weight: 400">, select “Role” in the left navigation and then select “Developer”.<br />

			  <span class="postimagessection_specify alignnone size-medium wp-image-205871" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260324021724/Screenshot-2026-03-24-at-1.16.45-AM-e1774340262672.png?w=1000" class="postimages" width="1000" height="651" alt="TDX 2026 session catalog with Developer role box checked." />
			  </span>
			<br />
</span></p>
<h3>Agentforce and AI integration sessions</h3>
<p><span style="font-weight: 400">Master Agentforce Vibes and vibe coding with these essential sessions to architect secure, production-ready agents and LWC apps.<br />
</span><b></b></p>
<h4><b>Create High Quality Apps with Agentforce Vibes</b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> Master the creation of high-quality applications using Agentforce Vibes for instant generation and validation. This session will deliver practical workflows for integrating Code Analyzer and ApexGuru to ensure your LWC and Apex code is resilient, secure, and production-ready.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> John Belo, Mayuresh Verma, and Jeff Douglas<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1767709938347001tn37">Add this session to your agenda</a></span></p>
<h4><b>Design Rich Inputs and Outputs for Agents<br />
</b></h4>
<p><b></b><b>What to expect:</b><span style="font-weight: 400"> Move from building basic, text-heavy chatbots to delivering high-quality, streamlined conversational experiences. Master Lightning Type Overrides to eliminate frustrating back-and-forth dialogue and harness LWC-driven interactions that drive successful Agentforce adoption.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Charles Watkins<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1769711014854001oumV">Add this session to your agenda</a></span></p>
<h4><b>Build Enterprise-Ready Apps with Grounded Vibe Coding<br />
</b></h4>
<p><b></b><b>What to expect:</b><span style="font-weight: 400"> ​​Bridge the &#8220;Context Gap&#8221; by integrating the Salesforce API Context, Metadata Experts, and Unified Catalog into your development lifecycle. Master the technical engine that transforms AI-generated output into trusted, production-grade metadata through real-world architectural patterns.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Gonzalo Gambino and Sally El Ghoul<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1768776743306001RnSk">Add this session to your agenda</a></span></p>
<h3>Agentforce 360 Platform sessions</h3>
<p><span style="font-weight: 400">Scale the Agentic Enterprise with these essential sessions to master core platform innovations, advanced Apex patterns, and modern API security.</span></p>
<h4><b>Enhancing API Security with SOAP API Login Retirement<br />
</b><b></b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> Modernize your integration strategy by migrating from legacy SOAP login methods to secure, modern authentication standards. This session provides the architectural blueprint required to audit existing integrations, implement robust authentication flows, and ensure your APIs remain secure as support for legacy login ends.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Jeremy Westerman<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1770769387920001lClx">Add this session to your agenda</a></span></p>
<h4><b>Deep Dive into Apex Best Practices for Apps and Agents</b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> ​​Master advanced Apex patterns designed for enterprise-scale agents and applications. You will learn to architect for concurrency, implement robust exception logging, and optimize trigger performance to ensure your code remains resilient and efficient as agent interactions scale.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Daniel Ballinger, Markus Neubrand, Mitch Spano, and Peter Churchill<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1770777032201001i2zG">Add this session to your agenda</a></span></p>
<h4><b>Platform Integration Championship Live<br />
</b><b></b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> Put your integration skills to the test in a fast-paced, live game show format. Compete against your peers to showcase your expertise in APIs, external services, and event-driven architectures, with a prize for the champion who demonstrates the sharpest technical knowledge.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Tyson Read, Raj Advani, and Jeremy Westerman<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1768598582666001Cp4i">Add this session to your agenda</a></span></p>
<h3>Roadmap sessions</h3>
<p><span style="font-weight: 400">Align your long-term strategy with these essential sessions to get an exclusive look at the future of Data 360, LWC, and Agentforce.</span></p>
<h4><b>Salesforce Developer Tools Roadmap: Vibe Coding, MCP and ALM</b></h4>
<p><b>What to expect: </b><span style="font-weight: 400">Get an exclusive look at the future of our developer tooling, covering the latest advancements in Vibe Coding, MCP, and ALM. This session will provide the roadmap for the technologies you need to build, test, and deploy resilient agents and apps at scale.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Dan Fernandez and Karishma Lalwani<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1770702511000001XggD">Add this session to your agenda</a></span></p>
<h4><b>Apex Roadmap: What’s New and What’s Coming</b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> This must-see roadmap session offers an exclusive look at the future of Apex, including upcoming enhancements engineered for agents. You will gain critical updates on security models and asynchronous limits, equipping you to build efficient, scalable code on the Agentforce 360 Platform.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Daniel Ballinger and Markus Neubrand<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1770065594397001P4G7">Add this session to your agenda</a></span></p>
<h4><b>Explore the Agentforce Roadmap</b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> Review the strategic trajectory of the Agentforce 360 Platform. This session outlines upcoming innovations in autonomous agent capabilities, governance frameworks, and data integration patterns, providing the architectural foresight needed for your enterprise deployments.<br />
</span><span style="font-weight: 400"><strong>Featured speakers: </strong>Austin Javellana, Will Matteson, Deepak Mukunthu, and Shiv Ramanna<br />
</span><span style="font-weight: 400"><strong></strong></span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1770418593999001UUk4">Add this session to your agenda</a></span></p>
<h4><b>Explore the Data 360 Roadmap for Developers</b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> Gain technical insight into the evolution of Data 360, the foundational data layer of the Agentforce 360 Platform. Get a peek at upcoming enhancements in data ingestion pipelines, as well as learn about identity resolution and semantic modeling, so you can build scalable data foundations that ground your agents in trusted, real-time context.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Pradeep Krishna, Jitin Mehndiratta, and William Yeh<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1771006992458001gliK">Add this session to your agenda</a></span></p>
<h4><b>LWC Roadmap: What&#8217;s New and What&#8217;s Coming</b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> Explore the LWC roadmap and future of front-end development. Discover how Micro Frontends, Lightning Out 2.0, and new base components simplify building scalable enterprise applications.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Clay Martin, Shalini Jain, and Ben Sklar<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1770688737762001ZDuk">Add this session to your agenda</a></span></p>
<h3>More product sessions</h3>
<p><span style="font-weight: 400">Extend your agentic logic with these essential sessions to automate Data 360 deployments using Data Kits and architect secure solutions using Slack, Zero Trust, and more.</span></p>
<h4><b>Automate Data 360 Deployments: DevOps for Data Kits</b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> You will learn how to implement automated deployment pipelines for Data 360 using Data Kits. Master techniques for managing environment parity, versioning, and lifecycle management for your data assets, ensuring consistent, repeatable configurations across your development and production environments.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Jitin Mehndiratta and William Yeh<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1767594544285001W4nW">Add this session to your agenda</a></span></p>
<h4><b>Build Employee Agents for Slack and Experience Cloud</b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> Architect and deploy employee-facing agents within Slack and Experience Cloud. Learn the patterns for integrating agent logic into these interfaces to ensure secure, context-aware interactions that allow employees to solve complex tasks natively within their flow of work.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Simon Finney<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1768829967693001GhUn">Add this session to your agenda</a></span></p>
<h4><b>Secure AI Integrations with Zero Trust &amp; MCP</b></h4>
<p><b>What to expect:</b><span style="font-weight: 400"> Architect secure AI integrations by leveraging Zero Trust principles and the Model Context Protocol (MCP). You will learn to implement granular access controls, validate agent connections, and enforce security policies across your multi-agent architecture, ensuring data protection and compliance in your enterprise environment.<br />
</span><b>Featured speakers:</b><span style="font-weight: 400"> Aman Sahu and Roushan Kumar<br />
</span><span style="font-weight: 400"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /><a href="https://reg.salesforce.com/flow/plus/tdx26/sessioncatalog/page/catalog/session/1770973570653001knwi">Add this session to your agenda</a></span></p>
<h2><b>More things to look out for at TDX</b></h2>
<h3>Grow your network at Community Cove</h3>
<p><span style="font-weight: 400">Community Cove is the destination for Trailblazers across the ecosystem to connect, network, learn, and have fun. From technical deep dives to joining a slide-free meetup, you’ll find the peers and experts needed to empower your Salesforce journey.</span></p>
<h3>Skill up at Camp Trailhead</h3>
<p><span style="font-weight: 400">Get hands-on with Salesforce in just 20-30 minutes at Camp Trailhead. Whether you’re a new learner or an experienced pro, this is your stop to get hands-on with apps, agents, data, and Slack. Dive into curated Trailhead badges with expert assistance, complete badges to claim exclusive rewards, and celebrate your new skills at the photo booth.</span></p>
<h3>Learn and earn with the TDX Quest</h3>
<p><span style="font-weight: 400">The TDX Quest is an interactive experience designed to help you build practical skills and earn exclusive prizes. This year, we’ve simplified the path to focus on 1:1 engagement at each activation so you can learn at your own pace. Complete the Quest to build your own custom swag bag and celebrate your achievements with the Trailblazer Community.</span></p>
<h3>Explore the Admin and Architect tracks</h3>
<p><span style="font-weight: 400">Looking to diversify your agenda? Check out all the sessions on the Admin and Architect tracks to see how the Agentic Enterprise is being built, governed, and scaled in this new Agentic AI era. Explore the <a href="https://admin.salesforce.com/blog/2026/the-salesforce-admins-guide-to-tdx-2026">Admin</a> and <a href="https://www.salesforce.com/blog/salesforce-architect-guide-tdx-2026">Architect</a> Guides to TDX 2026 to learn more about what TDX has in store for these roles.</span></p>
<h2><b>Quick TDX tips <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4dd.png" alt="📝" class="wp-smiley" style="height: 1em; max-height: 1em;" /></b></h2>
<h3>Watching from home? Join on Salesforce+</h3>
<p><span style="font-weight: 400">Can’t make it to TDX in person? Select keynotes and sessions will be live-streamed on Salesforce+ during both days of the event. In addition to the live experience, a selection of on-demand episodes will be available for viewing after TDX ends.</span></p>
<p><a href="https://www.salesforce.com/plus/experience/tdx_2026?&amp;utm_source=blog&amp;utm_medium=organic_social&amp;utm_campaign=TDX26_Devs_Blog_RegLaunch_SF+&amp;d=701ed000011mNZAAA2"><span style="font-weight: 400">Register for Salesforce+</span></a><span style="font-weight: 400"> for free to get access to featured content.</span></p>
<h3>Accessibility at TDX <span style="font-weight: 400;font-size: 16px"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/267f.png" alt="♿" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span></h3>
<p><span style="font-weight: 400">We’re dedicated to ensuring an exceptional and accessible experience for all Trailblazers, including those with disabilities and/or medical conditions. If you’re </span><span style="font-weight: 400">unsure if</span><span style="font-weight: 400"> you’ll need support during TDX, reach out to the Disability Help Desk to chat with a dedicated accessibility manager. We can answer questions, provide information, and assist you in determining if further accommodations are necessary. Email us at DisabilityHelpDesk@Salesforce.com. For more accessibility information, visit the</span><a href="https://www.salesforce.com/tdx/faq/"> <span style="font-weight: 400">TDX FAQ</span></a><span style="font-weight: 400"> page.</span></p>
<h2><b>Your TDX 2026 checklist <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /></b></h2>
<p><span style="font-weight: 400">TDX 2026 will be here before you know it. Take these steps now to prepare for the big event.</span></p>
<ul>
<li style="font-weight: 400"><a href="https://www.salesforce.com/tdx/register/?&amp;utm_source=blog&amp;utm_medium=organic_social&amp;utm_campaign=TDX26_Dev_Blog_RegLaunch_IP&amp;d=701ed00000zwR6SAAU"><span style="font-weight: 400">Register to attend TDX</span></a><span style="font-weight: 400"> if you haven’t already. </span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Start building your perfect TDX agenda now with </span><a href="https://reg.salesforce.com/flow/plus/tdx26/agendabuilder/page/agendabuilder?=undefined&amp;utm_source=blog&amp;utm_medium=organic_social&amp;utm_campaign=TDX_Blog_Devs_AgendaBuilder_IP&amp;d=701ed000016U8ltAAC"><span style="font-weight: 400">Agenda Builder</span></a><span style="font-weight: 400">. Refer to the sessions in this post to guide you. </span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Download the Salesforce Events app </span><span style="font-weight: 400">in the</span><a href="https://apps.apple.com/us/app/salesforce-events/id1021413071"> <span style="font-weight: 400">App Store</span></a><span style="font-weight: 400"> or</span><a href="https://play.google.com/store/search?q=salesforce%20events&amp;c=apps&amp;hl=en_US&amp;gl=US"> <span style="font-weight: 400">Google Play Store</span></a><span style="font-weight: 400"> to keep track of everything on your agenda in one easy-to-access place.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">If you’re not attending in person, be sure to </span><a href="https://www.salesforce.com/plus/experience/tdx_2026?&amp;utm_source=blog&amp;utm_medium=organic_social&amp;utm_campaign=TDX26_Devs_Blog_RegLaunch_SF+&amp;d=701ed000011mNZAAA2"><span style="font-weight: 400">register and watch on Salesforce+</span></a><span style="font-weight: 400">. </span></li>
</ul>
<p><span style="font-weight: 400">Follow</span><span style="font-weight: 400"> Salesforce Developers </span><span style="font-weight: 400">on</span><a href="https://x.com/SalesforceDevs"> <span style="font-weight: 400">X</span></a><span style="font-weight: 400"> and</span><a href="https://www.linkedin.com/showcase/salesforcedevs/"> <span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400"> for more TDX updates.</span></p>
<h2><b>About the author</b></h2>
<p><b>Sarah Welker</b><span style="font-weight: 400"> is a Developer Marketing Manager at Salesforce. She balances her love for sustainable shopping and Sunday league soccer with a mission to visit every MLB ballpark, while maintaining her status as her kids&#8217; #1 fan on the sidelines. Find her on </span><a href="https://www.linkedin.com/in/sarahwelker47/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/the-salesforce-developers-guide-to-tdx-2026">The Salesforce Developer’s Guide to TDX 2026</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/03/the-salesforce-developers-guide-to-tdx-2026/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205846</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260323235553/TDX26-Developer-Guide-e1774331768998.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260323235553/TDX26-Developer-Guide-e1774331768998.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Build Custom Property Editors and Types for Experience Builder</title>
		<link>https://developer.salesforce.com/blogs/2026/03/build-custom-property-editors-and-types-for-experience-builder</link>
		<comments>https://developer.salesforce.com/blogs/2026/03/build-custom-property-editors-and-types-for-experience-builder#respond</comments>
		<pubDate>Thu, 19 Mar 2026 14:00:18 +0000</pubDate>
		<dc:creator><![CDATA[Sudheer Kumar Reddy Gowrigari]]></dc:creator>
				<category><![CDATA[App Development]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Lightning Web Components]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Component Configuration]]></category>
		<category><![CDATA[Custom Property Editor]]></category>
		<category><![CDATA[Custom Property Type]]></category>
		<category><![CDATA[Experience Builder]]></category>
		<category><![CDATA[lwc]]></category>
		<category><![CDATA[Salesforce Development]]></category>
		<category><![CDATA[UI/UX]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205826</guid>
		<description><![CDATA[<p> Learn how to enhance the Experience Builder configuration experience by creating custom property editors and complex property types for Lightning Web Components.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/build-custom-property-editors-and-types-for-experience-builder">Build Custom Property Editors and Types for Experience Builder</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400;">Make component configuration for your </span><a href="https://help.salesforce.com/s/articleView?id=experience.community_designer_overview.htm&amp;type=5"><span style="font-weight: 400;">Experience Builder</span></a><span style="font-weight: 400;"> users more convenient and intuitive by creating </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/use-experience-cloud-custom-property-editor-type.html"><span style="font-weight: 400;">custom property editors and types</span></a><span style="font-weight: 400;"> for your custom Lightning Web Components. You can now replace basic text boxes and dropdowns with custom UIs such as date pickers, color selectors, and button groups. This blog post shows you how to make your Lightning Web Components visually interactive and easy to configure.</span></p>
<h2><b>Creating a custom property editor</b></h2>
<p><span style="font-weight: 400;">With custom property editors, you can create any type of UI field for configuring a property value in Experience Builder. For instance, instead of a text field where your users type in a date, you can offer a date selector with a pop-up calendar in the component property panel, where users can click to select a date.</span></p>
<p><span style="font-weight: 400;">Because a custom property editor is simply a Lightning Web Component, creating one is just like creating any other Lightning Web Component, just with a few extra details. Let’s take a look at how to create one, using text alignment as an example.</span></p>
<p><b>Scenario: </b>Say that you&#8217;re working with a custom Lightning Web Component named <code>CustomArticle</code>. For the <code>textAlignment</code> property, instead of the default <code>String</code> editor, you envision having a button group where users can adjust alignment with one click.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205828" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260318153556/A-text-alignment-editor-with-buttons-for-left-center-and-right-alignment.png?w=177" class="postimages" width="177" height="126" alt="A text-alignment editor with buttons for left, center, and right alignment." />
			  </span>
			</p>
<p>To create this button group, you can create a Lightning Web Component that acts as a custom property editor for the <code>textAlignment</code> property of the <code>String</code> type. Let’s call this new custom editor <code>alignmentCPE</code>. To create it, follow these basic steps.</p>
<h3><span style="font-weight: 400;">Step 1: Create a component class</span></h3>
<p>For the <code>alignmentCPE</code> component to act as a custom property editor, it must adhere to the property editor contract. The contract requires your custom property editor component to include certain public properties in its element class: label, value, errors, and schema. See the documentation for more information about <a href="https://developer.salesforce.com/docs/platform/lwc/guide/use-experience-cloud-property-editor-contract.html"><u>the property editor contract</u></a>, including other public properties that it exposes.</p>
<p><span style="font-weight: 400;">Here’s a basic class snippet for creating a component class.</span></p>
<pre language="javascript">export default class AlignmentCPE extends LightningElement {
    @api value;
    @api label;
    @api schema; // Derived from the associated property type.
    @api errors;
    @track buttons = [...]

    handleAlignmentClick(event) {
        const value = event.target.value;
        this.value = value;
        this.dispatchEvent(
            new CustomEvent('valuechange', { detail: { value: this.value } })
        );
    }
}
</pre>
<p>Note the custom event being dispatched by the click handler. The event name must be exactly <code>valuechange</code>, and the detail must include the <code>value</code> property as part of the property editor contract.</p>
<h3><span style="font-weight: 400;">Step 2: Create the component UI</span></h3>
<p>Next, craft a user-friendly UI for your property editor using HTML and CSS, just as you would for other Lightning Web Components.</p>
<p>Here&#8217;s a code snippet for the <code>alignmentCPE</code> component.</p>
<pre language="html">&lt;template&gt;
    &lt;label&gt;Text Alignment&lt;/label&gt;&lt;div&gt;
        &lt;lightning-button-group onclick=&quot;{handleAlignmentClick}&quot;&gt;
            &lt;template&gt;
                &lt;lightning-button-icon-stateful key=&quot;{button.value}&quot; value=&quot;{button.value}&quot; selected=&quot;selected&quot; icon-name=&quot;{button.icon}&quot;&gt;
                &lt;/lightning-button-icon-stateful&gt;
            &lt;/template&gt;
        &lt;/lightning-button-group&gt;
    &lt;/div&gt;&lt;p&gt;
&lt;/p&gt;&lt;/template&gt;
</pre>
<h3><span style="font-weight: 400;">Step 3: Update the component’s metadata configuration</span></h3>
<p>Finally, ensure that the <code>js-meta.xml</code> file of your component recognizes <code>alignmentCPE</code> as a property editor by adding the <code>lightning__PropertyEditor</code> target.</p>
<pre language="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata"&gt;
  &lt;apiVersion&gt;66.0&lt;/apiVersion&gt;
  &lt;isExposed&gt;true&lt;/isExposed&gt;
  &lt;masterLabel&gt;Alignment Editor Component&lt;/masterLabel&gt;
  &lt;targets&gt;
    &lt;target&gt;lightning__PropertyEditor&lt;/target&gt;
  &lt;/targets&gt;
&lt;/LightningComponentBundle&gt;
</pre>
<h2><span style="font-weight: 400;">Creating a custom property type</span></h2>
<p><span>While a single custom property editor is powerful, you can go even further.</span> For example, you may have multiple properties on your custom Lightning Web Component, and you may want to group these properties in a specific way, such as in tabs or in accordion sections. Or, you may have multiple properties that you want to reuse in different Lightning Web Components.</p>
<p>In these cases, you can create a custom property type. With a custom property type, you can:</p>
<ul>
<li>Group properties in tabs or accordions</li>
<li>Put multiple properties in a custom property type and reuse this custom type without having to re-create each of these properties for each component</li>
<li>Add more validation rules to certain properties. For example, for a URL field, you can specify which protocols to allow, such as https or http.</li>
</ul>
<p>A custom property type is defined using a new metadata type called <code>LightningTypeBundle</code>. To create a custom property type, follow the steps below.</p>
<p><b>Scenario</b>: Say that you&#8217;re working with your custom Lightning Web Component, <code>CustomArticle</code>. You want to create a complex property type, <code>layoutProperty</code>, that includes sub-properties for <code>borderStyle</code>, <code>borderWeight</code>, <code>borderRadius</code>, <code>layoutHeight</code>, and <code>layoutWidth</code>. You also want to organize these properties on tabs named Borders and Size.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205829" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260318153621/image2.png?w=766" class="postimages" width="766" height="352" alt="(left): Border properties grouped under the Borders tab. (right): Layout properties grouped under the Size tab." />
			  </span>
			</p>
<p><span style="font-weight: 400;">To create this complex type, follow these steps. </span></p>
<h3><span style="font-weight: 400;">Step 1. Structure the LightningTypeBundle</span></h3>
<p>First set up the folder for the new metadata type. Create a <code>lightningTypes</code> folder to describe <code>layoutProperty</code>, the custom property type in this example.</p>
<pre language="text"> 
+--myMetadataPackage
     +--lightningTypes
          +--layoutProperty
              +--experienceBuilder
                  +--editor.json
              +--schema.json
</pre>
<h3><span style="font-weight: 400;">Step 2. Define the schema: schema.json</span></h3>
<p>A <code>schema.json</code> file is integral to defining the structure, type, and validation of a property. By adhering to the <a href="https://json-schema.org/specification"><u>JSON Schema</u></a> specifications, you ensure that the property values that you set for your component align with the necessary structure and format, maintaining data integrity and component functionality.</p>
<p>See our documentation for a <a href="https://developer.salesforce.com/docs/platform/lightning-types/guide/lightning-types-object.html"><u>full list of keywords</u></a> that you can specify in a <code>schema.json</code> file. Unless otherwise noted, the keywords follow the JSON Schema specification.</p>
<p>Here&#8217;s the schema JSON for the complex <code>layoutProperty</code> property type:</p>
<pre language="json">{
    "title": "Layout Properties",
    "lightning:type": "lightning__objectType",
    "properties": {
        "borderStyle": {
            "lightning:type": "lightning__textType",
            "title": "Border Style"
        },
        "borderWeight": {
            "lightning:type": "lightning__integerType",
            "title": "Border Weight (px)"
        },
        "borderRadius": {
            "lightning:type": "lightning__integerType",
            "title": "Border Radius (px)"
        },
        "layoutHeight": {
            "lightning:type": "lightning__integerType",
            "title": "Layout Height (px)"
        },
        "layoutWidth": {
            "lightning:type": "lightning__integerType",
            "title": "Layout Width (px)"
        }
    },
    "required": []
}
</pre>
<p>In the <code>schema.json</code> file, you specify a <code>lightning:type</code> for each property in your complex property type. Salesforce offers several Lightning property types out of the box that act as the basic types. See our documentation for the <a href="https://developer.salesforce.com/docs/platform/lightning-types/references/lightning-types/lightning-types-reference.html"><u>full list of Lightning types</u></a>. Each Lightning property type is associated with a default property editor in Experience Builder, so if you do use one of these property types, you don’t have to create a property editor yourself.</p>
<p>For example, here&#8217;s the default property editor for the Lightning type <code>lightning__dateTimeType</code>.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205830" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260318153722/The-default-property-editor-for-the-Lightning-type-lightning__dateTimeType.png?w=588" class="postimages" width="588" height="344" alt="The default property editor for the Lightning type lightning__dateTimeType." />
			  </span>
			</p>
<h3><span style="font-weight: 400;">Step 3. Define the editor: editor.json</span></h3>
<p>This optional step covers what to do when you want to create a custom property editor for your custom property type. Whereas <code>schema.json</code> defines a property type structure, the optional <code>editor.json</code> file lets you override the property editors for a property and lay out the property as you wish, such as in a vertical layout, on tabs, or in accordion sections.</p>
<p>See our documentation for the <a href="https://developer.salesforce.com/docs/platform/lightning-types/guide/lightning-types-ui-config.html"><u>full list of keywords</u></a> that you can specify in an <code>editor.json</code> file. Unless otherwise noted, the keywords follow the JSON Schema specification.</p>
<p>Here’s an example of an <code>editor.json</code> file for laying out properties on tabs for <code>layoutProperty</code>.</p>
<pre language="json">{
  "editor": {
    "layout": {
      "definition": "lightning/tabSetLayout",
      "children": [
        {
          "definition": "lightning/tabLayout",
          "attributes": {
            "label": "Borders"
          },
          "children": [
            {
              "definition": "lightning/propertyLayout",
              "attributes": {
                "property": "borderStyle"
              }
            },
            {
              "definition": "lightning/propertyLayout",
              "attributes": {
                "property": "borderWeight"
              }
            },
            {
              "definition": "lightning/propertyLayout",
              "attributes": {
                "property": "borderRadius"
              }
            }
          ]
        },
        {
          "definition": "lightning/tabLayout",
          "attributes": {
            "label": "Size"
          },
          "children": [
            {
              "definition": "lightning/propertyLayout",
              "attributes": {
                "property": "layoutHeight"
              }
            },
            {
              "definition": "lightning/propertyLayout",
              "attributes": {
                "property": "layoutWidth"
              }
            }
          ]
        }
      ]
    }
  }
}
</pre>
<h2><b>Linking custom property editors and types to a Lightning Web Component</b></h2>
<p>After you create a custom property editor or custom property type, the final step is to link them to your Lightning Web Component. Here’s an example of an XML configuration that integrates the custom property editor <code>alignmentCPE</code> and the custom property type <code>layoutProperty</code>.</p>
<pre language="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata"&gt;
    &lt;apiVersion&gt;66.0&lt;/apiVersion&gt;
    &lt;isExposed&gt;true&lt;/isExposed&gt;
    &lt;targets&gt;
        &lt;target&gt;lightningCommunity__Page&lt;/target&gt;
        &lt;target&gt;lightningCommunity__Default&lt;/target&gt;
    &lt;/targets&gt;
    &lt;targetConfigs&gt;
        &lt;targetConfig targets="lightningCommunity__Default"&gt;
            &lt;!-- Linking the Custom Property Editor for Text alignment--&gt;
            &lt;property name="textAlignment" type="String" editor="c/alignmentCPE" label="Text Alignment" /&gt;            
            &lt;!-- Linking the Custom Property Type for Layout &amp; border style --&gt;
            &lt;property name="layoutProperty" type="c__layoutProperty" label="Layout &amp; border style" /&gt;
        &lt;/targetConfig&gt;
    &lt;/targetConfigs&gt;
    &lt;masterLabel&gt;Custom Article&lt;/masterLabel&gt;
&lt;/LightningComponentBundle&gt;
</pre>
<p><span style="font-weight: 400;">This example shows how to use a custom property editor and custom property type together, but you can choose to use either independently, depending on your component&#8217;s needs.</span></p>
<h2><b>Conclusion</b></h2>
<p><span style="font-weight: 400;">Custom property editors and custom property types empower developers to dramatically improve the configuration experience for users in Experience Builder. By moving beyond basic fields to create intuitive, interactive UIs, you can make your Lightning Web Components easier to configure and reuse. Whether you need fine-grained control over a single property&#8217;s UI with a custom editor, or you need to group and structure multiple related properties with a custom type, these tools give you the flexibility you need to deliver a superior low-code development experience.</span></p>
<h2><b>Resources</b></h2>
<ul>
<li style="font-weight: 400;"><a href="https://developer.salesforce.com/docs/platform/lwc/guide/use-experience-cloud-custom-property-editor-type.html"><span style="font-weight: 400;">Create a Custom Property Editor or Type for a Custom Component in Experience Builder</span></a><span style="font-weight: 400;">: A comprehensive resource for creation through deployment</span></li>
<li style="font-weight: 400;"><a href="https://developer.salesforce.com/docs/platform/lightning-types/overview"><span style="font-weight: 400;">Lightning Types Developer Guide</span></a><span style="font-weight: 400;">: A detailed resource for developing new Lightning Types</span></li>
<li style="font-weight: 400;"><a href="https://github.com/salesforce-experiencecloud/custom-property-editor-code-samples/tree/master/lightningTypeExamples"><span style="font-weight: 400;">Code samples:</span></a><span style="font-weight: 400;"> Ready-to-use sample components</span></li>
</ul>
<h2><b>About the authors</b></h2>
<p><b>Henry Chen</b><span style="font-weight: 400;"> is a Software Engineer on the Salesforce Platform team, working on low-code builders. He enjoys spending his free time playing video games, ice skating, and watching movies.</span></p>
<p><b>Sudheer Kumar Reddy Gowrigari</b><span style="font-weight: 400;"> is an Engineering Manager on the Salesforce Platform team leading the content builder and builder framework areas. Outside work, he loves playing cricket, diving into books, and watching movies.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/build-custom-property-editors-and-types-for-experience-builder">Build Custom Property Editors and Types for Experience Builder</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/03/build-custom-property-editors-and-types-for-experience-builder/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205826</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260318155150/Build-Custom-Property-Editors-and-Types-for-Experience-Builder-e1773870724910.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260318155150/Build-Custom-Property-Editors-and-Types-for-Experience-Builder-e1773870724910.png?w=1000" medium="image" />
	</item>
		<item>
		<title>What’s New in Salesforce Omnistudio Standard Designers</title>
		<link>https://developer.salesforce.com/blogs/2026/03/whats-new-in-salesforce-omnistudio-standard-designers</link>
		<comments>https://developer.salesforce.com/blogs/2026/03/whats-new-in-salesforce-omnistudio-standard-designers#respond</comments>
		<pubDate>Tue, 17 Mar 2026 14:00:25 +0000</pubDate>
		<dc:creator><![CDATA[Sarah Welker]]></dc:creator>
				<category><![CDATA[APIs and Integrations]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Salesforce Releases]]></category>
		<category><![CDATA[Data Mapper]]></category>
		<category><![CDATA[developer experience]]></category>
		<category><![CDATA[Flexcards]]></category>
		<category><![CDATA[Integration Procedures]]></category>
		<category><![CDATA[low code]]></category>
		<category><![CDATA[Omniscript]]></category>
		<category><![CDATA[Omnistudio]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[Salesforce Platform]]></category>
		<category><![CDATA[Standard Designers]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205806</guid>
		<description><![CDATA[<p>Discover how native Omnistudio Standard Designers eliminate build complexity. Learn to use a streamlined UI and instant activation to enhance your team&rsquo;s build efficiency.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/whats-new-in-salesforce-omnistudio-standard-designers">What’s New in Salesforce Omnistudio Standard Designers</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">We know that many of you rely on </span><a href="https://www.salesforce.com/products/omnistudio/overview/"><b>Salesforce Omnistudio</b></a><span style="font-weight: 400"> every day to build fast and intuitive digital experiences across Salesforce. However, we know that long wait times can be a major headache. We’re talking about that moment when you finish designing a complex Omniscript or Flexcard, click the &#8216;Activate&#8217; button, and then… wait. The process of compiling and deployment can be lengthy. This cuts into your productivity and can be frustrating when you just want to see your changes live.</span></p>
<p><span style="font-weight: 400">The good news? The new </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.os_designers_common.htm&amp;type=5"><b>Omnistudio Standard Designers</b></a><span style="font-weight: 400">, runtime, and components are now built directly into the </span><b>Salesforce Platform</b><span style="font-weight: 400">. This eliminates the old packaged installation process and ensures everything runs natively on the Platform.</span></p>
<h2><b>What are Omnistudio standard designers?</b></h2>
<p><span style="font-weight: 400">The Omnistudio standard designers are tools that run directly on the Salesforce Platform, rather than a separate managed package. This includes runtime components like </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_flexcards_24388.htm&amp;type=5"><span style="font-weight: 400">Flexcards</span></a><span style="font-weight: 400">, </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_dataraptors_45587.htm&amp;type=5"><span style="font-weight: 400">Data Mappers</span></a><span style="font-weight: 400">, </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_integration_procedures_48334.htm&amp;type=5"><span style="font-weight: 400">Integration Procedures</span></a><span style="font-weight: 400">, and </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.os_omniscripts_8355.htm&amp;type=5"><span style="font-weight: 400">Omniscripts</span></a><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">If Omnistudio is the engine for building these experiences, what are the parts that make it run? It breaks down into four key components: Omniscripts and Flexcards handle the frontend UI experience, while Data Mappers and Integration Procedures manage the backend data orchestration. Together, they bridge the gap between user interaction and backend data processing.</span></p>
<p><span style="font-weight: 400">Example: You might use an </span><b>Omniscript</b><span style="font-weight: 400"> to take a student’s application, collecting their name, GPA, and program choice on a </span><a href="https://www.learnexperiencecloud.com/topic/a081U00000OhIqgQAF/lightning-web-runtime-lwr"><span style="font-weight: 400">Lightning Web Runtime (LWR)</span></a><span style="font-weight: 400"> site. A </span><b>Flexcard</b><span style="font-weight: 400"> on an Experience Site could then show those account details and launch an Omniscript flyout to update that information. Upon submission, a </span><b>Data Mapper</b><span style="font-weight: 400"> loads Omniscript input fields (name, GPA) into the appropriate Student Profile record in Salesforce. If the student enters GPA and tuition information in an Omniscript, an embedded </span><b>Integration Procedure</b><span style="font-weight: 400"> orchestrates the backend logic to calculate scholarship amounts before displaying the results.</span></p>
<h2><b>Omnistudio’s journey: Past, present, and future on Platform</b></h2>
<p><span style="font-weight: 400">To understand the change, we need to rewind a bit. In the past, Omnistudio was managed through packages. If you were using it with  </span><a href="https://help.salesforce.com/s/articleView?id=ind.comms_cpq_and_epc.htm&amp;type=5"><span style="font-weight: 400">Communications, Media, and Energy &amp; Utilities (CME)</span></a><span style="font-weight: 400"> or insurance packages, everything was bundled together. The tools used to build ( designer), basic data components (entities), and the engine that ran scripts (the runtime) all resided within that specific industry package.</span></p>
<p><span style="font-weight: 400">Following the acquisition of </span><a href="https://www.salesforce.com/industries/"><span style="font-weight: 400">Vlocity</span><span style="font-weight: 400">,</span></a><span style="font-weight: 400"> we introduced a new layer called the </span><b>Foundation package</b><span style="font-weight: 400">. This new package housed Omnistudio designers and entities separately. This was a crucial phase because industries such as </span><a href="https://www.salesforce.com/healthcare-life-sciences/health-cloud/"><span style="font-weight: 400">Agentforce Health</span></a><span style="font-weight: 400">, </span><a href="https://www.salesforce.com/education/cloud/"><span style="font-weight: 400">Agentforce Education</span></a><span style="font-weight: 400">, </span><a href="https://www.salesforce.com/manufacturing/cloud/"><span style="font-weight: 400">Agentforce Manufacturing</span></a><span style="font-weight: 400">, and </span><a href="https://www.salesforce.com/financial-services/cloud/"><span style="font-weight: 400">Agentforce Financial Services (FS)</span></a><span style="font-weight: 400"> could install the Omnistudio package directly without needing the older CMT or INS packages.</span></p>
<p><span style="font-weight: 400">Today, Omnistudio is a native, deeply integrated part of the Salesforce Platform. With this transition, you no longer need to install separate packages. Once you enable your industry license (which includes Omnistudio licenses), the designers and runtime are available immediately. There’s no need to rely on packages, so you&#8217;re always using the fastest and latest version.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205810" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260313162809/An-infographic-showing-the-evolution-of-the-all-new-Omnistudio-on-Platform-e1773440909575.png?w=1000" class="postimages" width="1000" height="373" alt="An infographic showing the evolution of the all-new Omnistudio on Platform." />
			  </span>
			</p>
<h2><b>Who can access the new standard designers?</b></h2>
<p><span style="font-weight: 400">Now the question arises: Who can or ‌can&#8217;t access the new designers? We&#8217;ve got you.</span></p>
<ul>
<li style="font-weight: 400"><b>New customers:</b><span style="font-weight: 400"> If your org has a Salesforce Industries license and no existing package, enabling your bundled Omnistudio license gives you direct access to designers and runtime on the Platform. No separate Omnistudio package installation is needed.</span></li>
<li style="font-weight: 400"><b>Existing customers already on the Platform: </b><span style="font-weight: 400">If you already have Omnistudio license enabled, and the org is on the Platform, you&#8217;re in luck. Once the package is updated to the latest version, you&#8217;ll get the standard designers by default.</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Existing customers still on the package runtime:</b><span style="font-weight: 400"> If your org is on the package runtime, you won&#8217;t automatically get access to standard designers. You&#8217;ll need to take steps to migrate to the Platform runtime to gain access to it.</span></li>
</ul>
<h2><b>Benefits of standard designers</b></h2>
<p><span style="font-weight: 400">To be honest, the package designer’s list page for managing components was often difficult to navigate. Navigating the hierarchical view made it difficult to find what you were working on.  Locating properties and elements while switching between tabs to build and configure a component was troublesome, and moving between versions required multiple steps.</span></p>
<p><span style="font-weight: 400">With the standard designers, you&#8217;re automatically on the best and latest versions. You get immediate access to new features, better performance and user experience (UX), faster Omniscript activation, and security enhancements without waiting for complex package updates. These enhancements allow you to go live faster and enhance productivity. However, it doesn’t stop here. Let’s see some more benefits.</span></p>
<h3><b>Enhanced developer experience with general UI improvements</b></h3>
<p><span style="font-weight: 400">The new Omnistudio standard designers bring a huge leap forward in the daily developer experience. They are more responsive and intuitive, and they are visually aligned with familiar Salesforce interfaces.</span></p>
<h4><b>Salesforce standard list view page</b></h4>
<p><b></b><span style="font-weight: 400">The new designers use traditional Salesforce list views for all four major components.</span></p>
<ul>
<li style="font-weight: 400"><b>Familiar look and feel:</b><span style="font-weight: 400"> The list page follows Salesforce standards, meaning it looks and acts like your familiar Account or Contact pages.</span></li>
<li style="font-weight: 400"><b>Customization power:</b><span style="font-weight: 400"> This is a significant benefit for developers working in teams. Since it is a standard Salesforce list view, you can create custom views and filters, choose which columns to display, and filter components to show only what you are actively working on.</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Focus on recent work:</b><span style="font-weight: 400"> No more old hierarchical list view. The new list view defaults to showing the most recently modified records, ensuring your current components are front and center.</span></li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205814" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260313162821/The-list-view-page-of-the-standard-designers-e1773441154124.png?w=1000" class="postimages" width="1000" height="368" alt="The list view page of the standard designers." />
			  </span>
			</p>
<h4><b>Organized designer canvas for Flexcard and Omniscript</b></h4>
<p><b></b><span style="font-weight: 400">The new designer canvas has been completely reconfigured to be more intuitive and aligned with experiences like the </span><a href="https://trailhead.salesforce.com/content/learn/modules/lightning_app_builder"><span style="font-weight: 400">Lightning App Builder</span></a><span style="font-weight: 400">. The layout is much more logical and intuitive. For example, creating a Flexcard now takes just three steps: click </span><b>New</b><span style="font-weight: 400">, enter details, and </span><b>Save</b><span style="font-weight: 400">. To select a data source, click the </span><b>Setup</b><span style="font-weight: 400"> icon, scroll to </span><b>Data Source</b><span style="font-weight: 400">, and choose from the dropdown. You will also find:</span></p>
<ul>
<li style="font-weight: 400"><b>Elements on the left:</b><span style="font-weight: 400"> All available elements (such as steps, blocks, Data Mappers, and standard actions) appear neatly on the left side of the canvas. You can drag and drop them directly onto the canvas.</span></li>
<li style="font-weight: 400"><b>Canvas in the center:</b><span style="font-weight: 400"> The canvas where you build and visualize your components is centrally located.</span></li>
<li style="font-weight: 400"><b>Properties on the right:</b><span style="font-weight: 400"> The properties panel automatically loads on the right side of the screen when you drag, drop, or click a component. The necessary configuration options appear instantly when needed.</span></li>
<li style="font-weight: 400"><b>Organized elements:</b><span style="font-weight: 400"> To improve clarity, elements are now grouped logically. For example, Data Mapper actions are clubbed into one section to make them easily understandable.</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Setup panel access:</b><span style="font-weight: 400">  Less frequently used configurations (such as the setup panel for knowledge articles, currency fields, or cache configurations) are accessible through a top menu or dedicated icon instead of cluttering the workspace.</span></li>
</ul>
<h4><b>Intuitive version management</b></h4>
<p><span style="font-weight: 400">Managing multiple versions of your components within the builder interface is now significantly easier, eliminating unnecessary navigation steps.</span></p>
<ul>
<li style="font-weight: 400"><b>Switching inside the designers:</b><span style="font-weight: 400"> Users can easily switch versions via a drop-down menu located at the top of the designer interface (available for Omniscript, Flexcard, and Integration Procedures). This eliminates the need to return to the main list page to access an older version.</span></li>
<li style="font-weight: 400"><b>Creating new versions:</b><span style="font-weight: 400"> To create a new version, simply click the </span><b>New Version</b><span style="font-weight: 400"> button and confirm.</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Track older versions:</b><span style="font-weight: 400"> Select </span><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Manage Versions</b><span style="font-weight: 400"> from the dropdown on the right side of the record to view all versions and drill down as needed (available for Omniscript, Flexcard, Integration Procedure list pages).</span></li>
</ul>
<h4><b>The Design Assistant</b></h4>
<p><span style="font-weight: 400">In the managed package runtime, there were no guardrails or limits set on creativity. Developers could unknowingly create overly complex components that were so large or heavy, they broke the designer itself. This meant developers often didn&#8217;t realize they had exceeded system limits until discovering the issue during activation.</span></p>
<p><span style="font-weight: 400">The Design Assistant reviews your Omniscript or Flexcard with soft guardrails, not hard warnings, during design. Instead of reaching the checkout line (activation) and realizing the cart is too heavy (breaking the component), you’re gently reminded mid-shopping (during design) to split items (heavy child cards) into smaller carts for smoother processing.</span></p>
<p><span style="font-weight: 400">Design Assistant provides two types of feedback: </span></p>
<ul>
<li style="font-weight: 400"><b>Information messages:</b><span style="font-weight: 400"> Displayed when designs approach system limits. For example, a data table component is approaching the 500-row limit. These act as early warnings.</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Warning messages:</b><span style="font-weight: 400"> Displayed when the design exceeds recommended limits, signaling that the component may be too complex.</span></li>
</ul>
<h3><b>Component-specific design transformations</b></h3>
<p><span style="font-weight: 400">Through component-specific enhancements, the standard environment is now more responsive, intuitive, and developer-friendly. This shift allows you to spend less time managing the tools and more time delivering meaningful digital experiences.</span></p>
<h4><b>Instant activation and creation speed</b></h4>
<p><span style="font-weight: 400">In the package designers, activating an Omniscript required activation, compilation, and deployment. It was a time-consuming bottleneck that disrupted workflow.</span></p>
<p><span style="font-weight: 400">With the new designers:</span></p>
<ul>
<li style="font-weight: 400"><b>Activation</b><span style="font-weight: 400"> for Omniscripts, Flexcards, and Integration Procedures is nearly instantaneous.</span></li>
<li style="font-weight: 400"><b>Performance</b><span style="font-weight: 400"> is up to nine times faster than the legacy package.</span></li>
<li style="font-weight: 400"><b>Creation</b><span style="font-weight: 400"> of Omniscripts and Flexcards is up to six times faster.</span></li>
<li style="font-weight: 400"><b>Flexcard creation</b><span style="font-weight: 400"> now requires just two clicks: </span><b>New</b><span style="font-weight: 400"> and </span><b>Save</b><span style="font-weight: 400">.</span></li>
</ul>
<p><b>Note:</b><span style="font-weight: 400"> All data presented above is derived from internal testing.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205813" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260313162819/Salesforce-Omniscript-Builder-page-showing-a-multistep-guided-process-e1773441137665.png?w=1000" class="postimages" width="1000" height="515" alt="Salesforce Omniscript Builder page showing a multistep guided process." />
			  </span>
			</p>
<h4><b>Integration Procedure</b><b> Designer</b></h4>
<p><span style="font-weight: 400">The Integration Procedure Designer has undergone significant visual and functional upgrades. The older Angular-based package designer was simply not as intuitive. It dumped you directly onto a blank canvas without guidance on where to start. Even dragging elements was clunky and frustrating.</span></p>
<p><span style="font-weight: 400">Now, when you click </span><b>New</b><span style="font-weight: 400">, you are prompted to enter a Name, Type, Subtype, and Description. After saving, the designer opens in a new browser tab with a playground-type structure. Once you land on the designer&#8217;s canvas, you immediately see a </span><b>Plus (+)</b><span style="font-weight: 400"> icon indicating where to begin adding components. This structure is much more visual and clearly shows the flow of data.</span></p>
<p><span style="font-weight: 400">The new Integration Procedure interface also introduces several key usability enhancements such as:</span></p>
<ul>
<li style="font-weight: 400"><b>Easy component setup:</b><span style="font-weight: 400"> Add components using Plus (+) icons between cards. The properties panel appears instantly in the right tray for configuration, and you can view the Type and Subtype through the gear icon in settings.</span></li>
<li style="font-weight: 400"><b>Visual connectors:</b><span style="font-weight: 400"> After adding components, </span><a href="https://help.salesforce.com/s/articleView?id=analytics.bi_integrate_connectors_salesforce_group.htm&amp;language=en_US&amp;type=5"><span style="font-weight: 400">connectors</span></a><span style="font-weight: 400"> automatically appear between components, clearly displaying execution flow. Since Integration Procedures are headless, these connectors make data flow transparent and easy to understand.</span></li>
<li style="font-weight: 400"><b>Easy manipulation:</b><span style="font-weight: 400"> Use drag-and-drop functionality to add components, shuffle them within the canvas, and rearrange them easily.</span></li>
<li style="font-weight: 400"><b>Undo/Redo: </b><span style="font-weight: 400">To make development easier, we&#8217;ve introduced undo and redo options.</span></li>
<li style="font-weight: 400"><b>Explicit saving:</b><span style="font-weight: 400"> Changes (like dragging a component or adding an action) require clicking an explicit Save button to ensure they are intentional.</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Intuitive preview:</b><span style="font-weight: 400"> Entering ‌preview mode and executing your Integration Procedures now includes color indicators to show which action was successful and which component failed during execution, significantly improving troubleshooting.</span></li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205812" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260313162815/Integration-Procedure-Designer-interface-with-TransactionLoop-element-open-on-the-canvas-e1773441122763.png?w=1000" class="postimages" width="1000" height="484" alt="Integration Procedure Designer interface with TransactionLoop element open on the canvas." />
			  </span>
			</p>
<h4><b>Data Mapper Designer</b></h4>
<p><span style="font-weight: 400">The Data Mapper, an essential backend tool for Omnistudio, handles data extraction, loading, and transformation. </span></p>
<p><span style="font-weight: 400">The first thing you will notice is the visual upgrade. The new Data Mapper UI visually aligns with the new Integration Procedure Designer, ensuring a consistent experience across backend components.</span></p>
<p><span style="font-weight: 400"></span><span style="font-weight: 400">Key improvements include:</span></p>
<ul>
<li style="font-weight: 400"><b>Select interface:</b><span style="font-weight: 400"> Start by selecting an interface type (such as Extract or Load), then use the Plus (+) icon to add objects and formulas intuitively.</span></li>
<li style="font-weight: 400"><b>Connectors:</b><span style="font-weight: 400"> Link elements using connectors, with options to move rows up or down or insert rows within a clean table structure. </span></li>
<li style="font-weight: 400"><b>The new table view:</b><span style="font-weight: 400"> The table-based layout resembles JSON paths and outputs, making mappings easier to visualize and configure.</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Transformation setup:</b><span style="font-weight: 400"> This visual alignment makes defining how data is extracted, transformed, and loaded more accurate, saving significant time during configuration.</span></li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-205811" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260313162812/Data-Mapper-Designer-with-an-Extract-Object-element-on-the-canvas-e1773441107755.png?w=1000" class="postimages" width="1000" height="484" alt="Data Mapper Designer with an Extract Object element on the canvas." />
			  </span>
			</p>
<h2><b>Start exploring the standard designers today</b></h2>
<p><span style="font-weight: 400">The new Omnistudio standard designers mark a massive architectural shift, delivering instant activation with a simplified, intuitive canvas, and essential future-proofing for next-generation features. Now is the perfect time to ensure your organization is positioned to benefit from these improvements. Sign up today.</span></p>
<h2><b>Resources</b></h2>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">Learn about </span><a href="https://trailhead.salesforce.com/content/learn/modules/omnistudio-development-essentials"><span style="font-weight: 400">Omnistudio Development Essentials</span></a><span style="font-weight: 400"> on Trailhead</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Watch a video to learn how to </span><a href="https://youtu.be/x7kwVCFpKyM?si=k7V_kyNXkUpMv1q4"><span style="font-weight: 400">Build Low-Code Digital Experiences with All-New Omnistudio</span></a></li>
<li style="font-weight: 400"><span style="font-weight: 400">Learn about </span><a href="https://trailhead.salesforce.com/content/learn/modules/omnistudio-omniscript-fundamentals"><span style="font-weight: 400">Omnistudio Omniscript Fundamentals</span></a><span style="font-weight: 400"> on Trailhead</span></li>
</ul>
<h2><b>About the author</b></h2>
<p><span style="font-weight: 400"><strong>Krishna Kruthiventi</strong> is a Senior Product Manager at Salesforce, specializing in Industries Cloud solutions. His primary focus is on the Omnistudio product suite, simplifying complex enterprise workflows and elevating Omnistudio to deliver best-in-class, consumer-grade digital experiences for both administrators and end users. Follow him on </span><a href="https://www.linkedin.com/in/krishna-deepak-kruthiventi-08339183/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400"><strong>Payal Verma</strong> is a Content Marketing Analyst at Salesforce with over four years of professional experience in product, brand, and content marketing. She has worked across B2B and B2C markets, developing and executing content strategies for a wide range of formats, including blogs, social media, scripts, e-books, guides, etc. Follow her on </span><a href="https://www.linkedin.com/in/payal-verma-writer-marketer/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/whats-new-in-salesforce-omnistudio-standard-designers">What’s New in Salesforce Omnistudio Standard Designers</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/03/whats-new-in-salesforce-omnistudio-standard-designers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205806</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260313170913/Generic-C-e1773443366479.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260313170913/Generic-C-e1773443366479.png?w=1000" medium="image" />
	</item>
		<item>
		<title>React vs. Salesforce: How I Rebuilt My &#8220;Vibe-Coded&#8221; App on the Platform</title>
		<link>https://developer.salesforce.com/blogs/2026/03/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform</link>
		<comments>https://developer.salesforce.com/blogs/2026/03/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform#respond</comments>
		<pubDate>Thu, 12 Mar 2026 14:00:14 +0000</pubDate>
		<dc:creator><![CDATA[Sarah Welker]]></dc:creator>
				<category><![CDATA[App Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[Lightning Web Components]]></category>
		<category><![CDATA[Professional Development]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lwc]]></category>
		<category><![CDATA[react]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205766</guid>
		<description><![CDATA[<p>Explore how rebuilding a React app using Lightning Web Components (LWC) and Flows reveals the architectural differences between local web development and the Salesforce platform.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform">React vs. Salesforce: How I Rebuilt My &#8220;Vibe-Coded&#8221; App on the Platform</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">I joined Salesforce in early 2026 as a Developer Advocate. At this point in my career, I’ve advocated for a wide array of tools, but I had a confession to make during onboarding: </span>I didn’t actually know what Salesforce <i>did</i><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">Beyond &#8220;it&#8217;s a CRM&#8221; and a dizzying array of “Clouds”, I felt like I was learning a whole new language. To avoid boiling the ocean, I went back to basics to answer a simple question: </span><b>What is the core platform for developers</b><span style="font-weight: 400">?</span></p>
<p><span style="font-weight: 400">To find out, I decided to build something. Not a &#8220;Hello World,&#8221; but something interactive that requires state management, UI logic, and data persistence. A </span><b>Drag-and-Drop Tier List for Office Snacks</b><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">But here’s the twist: I built it twice. First in </span><strong>React</strong><span style="font-weight: 400"> (my comfort zone), and then I rebuilt it entirely in Salesforce using </span><b>Lightning Web Components (LWC)</b><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">Unlike the React version, which I “vibe-coded” with AI in one shot, I approached the Salesforce build differently. I used AI as a paired-programming tutor alongside official documentation and Trailhead. My goal wasn&#8217;t just to get working code, but to actually learn the architecture.</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400">(</span><i><span style="font-weight: 400">Note: If you’re an experienced Salesforce developer, nothing here will wow or surprise you; you&#8217;ve likely seen these errors a thousand times. But for those of us new to the ecosystem, I wanted to document exactly what the transition feels like.</span></i><span style="font-weight: 400">)</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400">Here is what I learned when I stopped reading the marketing brochures and started writing code.</span></p>
<h2><b>Phase 1: The Control Group (React + Vite)</b></h2>
<p><span style="font-weight: 400">To make this a fair experiment, I needed a baseline. I spent about 20 minutes spinning up the React version. I didn’t need to learn anything here &#8211; I already understand React state. I just needed a functioning &#8220;Control Group&#8221; to accurately measure the friction and differences once I switched to the Salesforce ecosystem.</span></p>
<p><span style="font-weight: 400">I’ll be honest: I &#8220;vibe-coded&#8221; this one. I fed an LLM a screenshot of a Tier List and told it: “</span><i><span style="font-weight: 400">Build me a similar drag-and-drop tier list app in React (Vite) with Tailwind CSS that lets you rank office snacks into S/A/B/C/D tiers, with localStorage persistence</span></i><span style="font-weight: 400">.”</span></p>
<p><strong><i>
			  <span class="postimagessection_specify alignnone size-large wp-image-205775" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260310112501/A-web-application-displaying-a-drag-and-drop-tier-list-with-office-snacks-categorized-into-S-A-B-C-and-D-tiers-e1773163551227.png?w=1000" class="postimages" width="1000" height="867" alt="A web application displaying a drag-and-drop tier list with office snacks categorized into S, A, B, C, and D tiers." />
			  </span>
			</i></strong></p>
<p><span style="font-weight: 400">After some minor tweaks, the resulting app worked perfectly. I could drag a bagel to S-Tier and candy corn to D-Tier (where it belongs—</span><b>please</b><span style="font-weight: 400"> never bring this as an office snack.) </span></p>
<p><span style="font-weight: 400">But looking at the generated code, I realized two things:</span></p>
<ol>
<li style="font-weight: 400"><b>Heavy Dependencies:</b><span style="font-weight: 400"> The LLM immediately reached for a third-party library (</span><span style="font-weight: 400">dnd-kit</span><span style="font-weight: 400">) to handle the drag-and-drop mechanics. I wondered what the equivalent would be when developing on the Salesforce platform.</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Manual Persistence:</b><span style="font-weight: 400"> To save my rankings, the app needed a 40-line function just to read from and write to the browser&#8217;s <code>localStorage</code></span><span style="font-weight: 400">. I assumed that in the Salesforce ecosystem, there would be a more streamlined way to handle this—and I was right.</span></li>
</ol>
<p><span style="font-weight: 400">If I wanted to make this &#8220;real&#8221;—shareable with coworkers or persistent across devices—I would have needed to spin up a backend (Node, Supabase, or Firebase) and write API endpoints.</span></p>
<p><span style="font-weight: 400">That was the perfect segue to Salesforce.</span></p>
<h2><b>Phase 2: The Variable &#8211; Salesforce LWC</b></h2>
<p><span style="font-weight: 400">My goal was simple: Recreate the exact same app using strictly Salesforce platform tools. No external database, no Node server. Just me and the Org.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205778" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260310112921/An-animated-screen-recording-showing-a-user-dragging-a-snack-item-from-an-unranked-list-and-dropping-it-into-a-designated-tier-row-within-a-Salesforce-interface-1.gif?w=800" class="postimages" width="800" height="855" alt="An animated screen recording showing a user dragging a snack item from an unranked list and dropping it into a designated tier row within a Salesforce interface." />
			  </span>
			</p>
<h4><b>Library vs. Native Web Standards</b></h4>
<p><span style="font-weight: 400">I expected a proprietary nightmare or a weird, archaic language. What I found was… </span><b>JavaScript</b><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">Salesforce uses </span><b>Lightning Web Components (LWC)</b><span style="font-weight: 400">. The code felt shockingly similar to React, but simpler in a key way: for the drag-and-drop logic, I didn’t need a massive npm package. I used standard HTML events (</span><span style="font-weight: 400"><code>ondragstart</code>, <code>ondrop</code></span><span style="font-weight: 400">). Because LWC runs right in the browser without a heavy virtual DOM layer, the standard web APIs just worked.</span></p>
<h2><b>Phase 3: Where React Needs a Backend, Salesforce </b><b><i>Is</i></b><b> the Backend</b></h2>
<p><span style="font-weight: 400">This was the biggest &#8220;aha!&#8221; moment. In my React app, &#8220;saving&#8221; data meant writing 40 lines of code to manually serialize JSON into the browser&#8217;s <code>localStorage</code></span><span style="font-weight: 400">. And if I wanted to make that data permanent? I’d have to learn SQL, spin up a Postgres database, build a Node API, and handle CORS.</span></p>
<p><span style="font-weight: 400">In Salesforce, I didn&#8217;t need to do </span><i><span style="font-weight: 400">any</span></i><span style="font-weight: 400"> of that. </span><b>I just created a Custom Object</b><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">I went to the </span><b>Object Manager</b><span style="font-weight: 400">, created a <code>Tier_List_Item</code></span><span style="font-weight: 400">, and instantly had a secure, scalable relational database with an auto-generated API. And while I didn&#8217;t explore it deeply for this specific project, I realized I also got a full-blown enterprise security model right out of the box. If I ever needed to handle granular permissions—like ensuring only managers could edit the S-Tier snacks—I could configure that entirely through the standard UI instead of spending a week writing authentication middleware.</span></p>
<p><span style="font-weight: 400">To get that data into my component, I used the </span><b><code>@wire</code></b><b> service</b>—<span style="font-weight: 400">a reactive direct line to the database.</span></p>
<p><b>Manual State Management in React</b><span style="font-weight: 400">:</span></p>
<pre language="javascript"> 

// In React, we have to manually load the initial state from storage 
const [boardState, setBoardState] = useState(loadInitialState); 

// And we have to manually save it every time something moves const handleDragOver = (event) =&gt; { 
// ... calculation logic ... localStorage.setItem(STORAGE_KEY, JSON.stringify(next)); 
}; 

</pre>
<p><b>Declarative Data Binding in Salesforce</b><span style="font-weight: 400">:</span></p>
<pre language="javascript"> 

// The platform fetches the data for us
@wire(getAllItems) wiredItems; 
	
// We just tell the server to update the record 
handleDrop(event) { 
updateItemTier({ itemId: id, tier: newTier }); 
} 

</pre>
<h4><b>The Takeaway</b></h4>
<ul>
<li style="font-weight: 400"><b>In React:</b><span style="font-weight: 400"> I spent my time managing </span><i><span style="font-weight: 400">libraries</span></i><span style="font-weight: 400"> and </span><i><span style="font-weight: 400">local storage</span></i><span style="font-weight: 400">.</span></li>
<li style="font-weight: 400"><b>In Salesforce:</b><span style="font-weight: 400"> I spent more time writing </span><i><span style="font-weight: 400">logic</span></i><span style="font-weight: 400">. The platform provided the database, and the browser provided the interactivity.</span></li>
</ul>
<p><span style="font-weight: 400">The deployment cycle was slower (no hot-reload!), but the amount of &#8220;boilerplate&#8221; code required to get persistent data was significantly less. If I had known about </span><a href="https://marketplace.visualstudio.com/items?itemName=salesforce.salesforcedx-vscode-ui-preview"><span style="font-weight: 400">Salesforce Live Preview</span></a><span style="font-weight: 400"> before starting, my process would have been faster.</span></p>
<h2><b>Phase 4: The “Chicken and Egg” Deployment Check</b></h2>
<p><span style="font-weight: 400">Connecting that frontend in Phase 2 to the backend in Phase 3 is where things got tricky. I wrote my LWC and my Apex controller to talk to the database, then hit deploy. The terminal screamed at me:</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205774" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260310112459/A-terminal-window-showing-a-Salesforce-deployment-failure-with-the-error-message-22No-apex-action-available-for-TierListController.getAllItems22-highlighted.png?w=751" class="postimages" width="751" height="537" alt="A terminal window showing a Salesforce deployment failure with the error message No apex action available for TierListController.getAllItems highlighted." />
			  </span>
			</p>
<p><span style="font-weight: 400">My instinct was to assume I had made a typo or something silly along the way. I checked all the usual suspects: spelling, file names, file paths, etc. But the code checked out.</span></p>
<p><span style="font-weight: 400">In my React workflow, I would have simply pasted the error into an LLM, copied the fix, and moved on. But because I was using AI and the documentation to actually check my understanding, I stopped to figure out the </span><i><span style="font-weight: 400">why</span></i><span style="font-weight: 400">. This led me to a crucial difference: the </span><b>Platform Compilation Model</b><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">While not an official Salesforce term, this became a helpful mental model for how the platform validates code. In React, the browser is the only judge of your code. You can write a frontend function that calls an API that doesn&#8217;t exist yet, and the browser won&#8217;t care until the moment you actually run it.</span></p>
<p><span style="font-weight: 400">In Salesforce, </span><b>the server is the judge.</b><span style="font-weight: 400"> When you deploy, the platform compiles your code to ensure it&#8217;s valid. It saw that my LWC was trying to shake hands with a backend method (<code>getAllItems</code></span><span style="font-weight: 400">) that didn&#8217;t exist on the server yet.</span></p>
<p><span style="font-weight: 400">I had to deploy the Apex Class (Backend) first, </span><i><span style="font-weight: 400">then</span></i><span style="font-weight: 400"> the LWC (Frontend). It wasn&#8217;t just a syntax error—it was a reminder that I was coding for a tightly integrated platform, not just a browser.</span></p>
<h2><b>Phase 5: Low-Code Superpowers (The &#8220;Real Dev&#8221; Moment)</b></h2>
<p><span style="font-weight: 400">Once I understood the architecture, I realized I had access to way more than just a database. Since my &#8220;Snacks&#8221; were now actual data records, I could use the full power of the Salesforce automation engine.</span></p>
<p><span style="font-weight: 400">I wanted to add some hard-hitting business logic: &#8220;</span><b>If a snack is demoted to D-Tier, notify the team on Slack</b><span style="font-weight: 400">.&#8221;</span></p>
<p><span style="font-weight: 400">In my React app, this is where the fun stops and the infrastructure work begins. I would need a webhook, a cron job, or maybe a Zapier subscription. In Salesforce, I didn&#8217;t write a single line of code. I simply used a </span><a href="https://help.salesforce.com/s/articleView?id=platform.flow.htm&amp;type=5"><b>Flow</b></a><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">I built a &#8220;Record-Triggered Flow&#8221; that listens for the <code>Tier</code></span><span style="font-weight: 400"> field changing to </span><span style="font-weight: 400">D</span><span style="font-weight: 400">. When it happens, it sends a message to a Slack channel.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205773" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260310112456/A-split-screen-showing-Salesforce-Flow-Builder-logic-on-the-left-and-a-Slack-channel-on-the-right-where-a-bot-named-The-Snack-Critic-has-posted-a-warning-about-Crackers-e1773163519647.png?w=1000" class="postimages" width="1000" height="370" alt="A split screen showing Salesforce Flow Builder logic on the left and a Slack channel on the right where a bot named The Snack Critic has posted a warning about Crackers." />
			  </span>
			</p>
<h4><b>The Humble Pie (Error 500)</b></h4>
<p><span style="font-weight: 400">Of course, it wasn&#8217;t all seamless. I got confident and tried to add a second feature: posting a &#8220;congratulations&#8221; message to the internal feed (</span><b>Chatter</b><span style="font-weight: 400">) when a snack hit S-Tier.</span></p>
<p><span style="font-weight: 400">I set it up, ran it, and&#8230; </span><b>Error 500.</b></p>
<p><span style="font-weight: 400">The error message was cryptic, even though my logic was sound. I spent way too long debugging my Flow before a mix of AI nudging and diving into the platform documentation pointed me to the object settings.</span></p>
<p><span style="font-weight: 400">Turns out, there’s a small checkbox for &#8220;</span><b>Feed Tracking</b><span style="font-weight: 400">&#8221; on my Custom Object that I hadn’t turned on. The system was trying to post to a feed that didn&#8217;t exist yet.</span></p>
<p><span style="font-weight: 400">It was a frustrating, head-desk moment, but it was also a validating one. It was a good reminder that </span><b>Low Code ≠ No Knowledge.</b><span style="font-weight: 400"> You still need to think like a developer and know which switches to flip to make the platform work for you.</span></p>
<h2><b>Conclusion: It’s a Platform, Not Just a CRM</b></h2>
<p><span style="font-weight: 400">So, what did I learn in my first three weeks?</span></p>
<p><span style="font-weight: 400">I learned that the gap between a &#8220;Modern Web Developer&#8221; and a &#8220;Salesforce Developer&#8221; is much smaller than I thought. If you know JavaScript, you already know a large chunk of the syntax.</span></p>
<p><span style="font-weight: 400">But more importantly, I learned what the platform actually </span><i><span style="font-weight: 400">does</span></i><span style="font-weight: 400">. It handles the boring but essential stuff—</span><b>Auth, Database, Hosting, and APIs</b><span style="font-weight: 400">—so you can focus on the logic that matters. Whether that logic is &#8220;closing a million-dollar deal&#8221; or &#8220;ranking crackers as D-Tier,&#8221; the tools are fundamentally the same.</span></p>
<p><span style="font-weight: 400">…And for the record: </span><b>Bagels always belong in the S-Tier.</b></p>
<h3><b>Want to Learn Along with Me?</b></h3>
<p><span style="font-weight: 400">I’m just getting started, and I used the </span><a href="https://trailhead.salesforce.com/content/learn/trails/force_com_dev_beginner?trailmix_creator_id=yshrivastava&amp;trailmix_slug=beginner-to-advanced-developer-roadmap"><b>Beginner Developer Trailmix</b></a><span style="font-weight: 400"> in conjunction with my AI buddy to help learn the basics. If you want to build your own Tier List (or something actually useful), join me here:</span></p>
<ul>
<li style="font-weight: 400"><a href="https://trailhead.salesforce.com/content/learn/trails/force_com_dev_beginner?trailmix_creator_id=yshrivastava&amp;trailmix_slug=beginner-to-advanced-developer-roadmap"><span style="font-weight: 400">Beginner to Advanced Developer Roadmap</span></a><span style="font-weight: 400"> (Trailhead)</span></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/platform/lwc/guide/get-started-lwc.html"><span style="font-weight: 400">Introducing Lightning Web Components</span></a><span style="font-weight: 400"> (Developer Documentation)</span></li>
<li style="font-weight: 400"><a href="https://trailhead.salesforce.com/content/learn/modules/data_modeling"><span style="font-weight: 400">Data Modeling</span></a><span style="font-weight: 400"> (Trailhead)</span></li>
<li style="font-weight: 400"><a href="https://trailhead.salesforce.com/content/learn/modules/business_process_automation"><span style="font-weight: 400">Salesforce Flow Basics</span></a><span style="font-weight: 400"> (Trailhead)</span></li>
</ul>
<h3><b>About the Author</b></h3>
<p><b>Sean Keegan</b><span style="font-weight: 400"> is a Lead Developer Advocate at Salesforce based in New York City. A former math teacher, he is passionate about making complex tech accessible to everyone. Outside of work, you can find him playing video games, tending to his houseplants, or on the Ultimate Frisbee pitch. Connect with him on</span><a href="https://twitter.com/DevRelSean"><span style="font-weight: 400"> X/Twitter</span></a><span style="font-weight: 400"> or</span><a href="https://linkedin.com/in/seanryankeegan"><span style="font-weight: 400"> LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform">React vs. Salesforce: How I Rebuilt My &#8220;Vibe-Coded&#8221; App on the Platform</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/03/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205766</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260310102924/ReactvsSalesforce-e1773160182271.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260310102924/ReactvsSalesforce-e1773160182271.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Agent Script徹底解説 – Agent Script言語の基本を学ぼう</title>
		<link>https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-intro-to-agent-script-language-fundamentals-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-intro-to-agent-script-language-fundamentals-jp#respond</comments>
		<pubDate>Wed, 11 Mar 2026 00:59:53 +0000</pubDate>
		<dc:creator><![CDATA[Mohith Shrivastava]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Agent Script]]></category>
		<category><![CDATA[Hybrid Reasoning]]></category>
		<category><![CDATA[LLM Orchestration]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205788</guid>
		<description><![CDATA[<p>Agent Script&#12434;&#12510;&#12473;&#12479;&#12540;&#12375;&#12289;&#27770;&#23450;&#35542;&#30340;&#12525;&#12472;&#12483;&#12463;&#12392;&#29983;&#25104;AI&#12398;&#33021;&#21147;&#12434;&#12496;&#12521;&#12531;&#12473;&#12424;&#12367;&#32068;&#12415;&#21512;&#12431;&#12379;&#12383;&#12495;&#12452;&#12502;&#12522;&#12483;&#12489;&#25512;&#35542;&#12434;&#27963;&#29992;&#12375;&#12390;&#12289;AI&#12456;&#12540;&#12472;&#12455;&#12531;&#12488;&#12434;&#27083;&#31689;&#12377;&#12427;&#26041;&#27861;&#12434;&#23398;&#12403;&#12414;&#12375;&#12423;&#12358;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-intro-to-agent-script-language-fundamentals-jp">Agent Script徹底解説 – Agent Script言語の基本を学ぼう</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<blockquote><p>※本記事は2026年2月17日に米国で公開された <a href="https://developer.salesforce.com/blogs/2026/02/agent-script-decoded-intro-to-agent-script-language-fundamentals">Agent Script Decoded: Intro to Agent Script Language Fundamentals</a>の抄訳です。本記事の正式言語は英語であり、その内容および解釈については英語が優先されます。</p></blockquote>
<p>エンタープライズグレードのAIエージェントの構築には、根本的なジレンマがあります。大規模言語モデル（LLM）は、自然な会話を得意としているものの、エンタープライズ規模のワークフローに必要な一貫性には欠けています。注文の詳細を伝える前に顧客の本人確認を行うように指示しても、LLMが毎回その手順を守るとは限りません。この問題は、従来のプロンプトエンジニアリングでは解決できません。プロンプトが長くなり、指示が増えると、AIエージェントの振る舞いが予測しにくくなることもあります。</p>
<p><a href="https://www.salesforce.com/agentforce/script/"><strong>Agent Script</strong></a>（英語）は、AIエージェントを構築するためのSalesforceの新しい言語です。Agent Scriptには<strong>ハイブリッド推論</strong>が導入されており、同じ命令ブロックの中で決定論的なコードと自然言語のプロンプトを組み合わせることができます。Agent Scriptを使えば、ビジネスに重要なロジックを毎回確実に実行しながら、柔軟な会話を維持できます。</p>
<p>Agent Scriptは、<a href="https://help.salesforce.com/s/articleView?id=ai.agent_context_engineering.htm&amp;type=5"><strong>コンテキストエンジニアリング</strong></a>のためのツールでもあります。LLMが重要な情報をくみ取ることを漠然と期待するのではなく、変数、条件、会話の状態に応じて、LLMに渡すプロンプトをプログラムで組み立てられます。LLMは、その時点で必要な情報だけを参照します。</p>
<p>この記事では、Agent Scriptの基礎とAIエージェントの基本的な構成ブロックについて説明します。構文を学び、制御の流れを理解し、Agent Scriptが実行時にプロンプトを構築する仕組みを見ていきます。</p>
<h2>Agent Scriptの基礎</h2>
<p>AIエージェントの構築を始める前に、Agent Scriptの基本的な構文を押さえておきましょう。基本を理解しておくと、この後の記事の内容がわかりやすくなります。</p>
<h3>プロパティベースの構文</h3>
<p>Agent Scriptは、すべて<code>key: value</code>のペアで記述されます。読みやすい、宣言型の言語です。</p>
<pre>description: "顧客の注文を処理する"
agent_name: "Order_Management_Agent"
is_required: True
</pre>
<h3>スペースの重要性</h3>
<p>Agent Scriptは、Pythonと同様に、インデントを使って構造を定義します。タブではなく、スペースを使用する必要があります。スクリプトが正しく解析されるには、インデントが一貫していることが重要です。推奨される記述方法は、インデントの各レベルを<strong>3つのスペース</strong>で表すことです。</p>
<pre>inputs:
   customer_id: string
   order_id: string
</pre>
<p><strong>注</strong> – インデントに一貫性がないと、スクリプトがコンパイルされません。コードをコピー＆ペーストするときは、特にこの点に注意してください。</p>
<h3>@でリソースを参照</h3>
<p>Agent Scriptでは、<code>@</code>記号を使って、変数、アクション、トピック、出力などのリソースを参照します。この仕組みで、AIエージェントを構成する各要素が情報をやり取りします。</p>
<pre>@variables.customer_email    # 変数を参照
@actions.lookup_order        # トピックで定義されたアクションを参照
@topic.order_status          # 別のトピックを参照
@outputs.status              # アクションの出力を参照（アクションの実行後のみ有効）
@utils.transition to         # ユーティリティ関数を参照
@utils.escalate              # 別のユーティリティ関数を参照
</pre>
<p><strong>注</strong> – <strong>@</strong>がSalesforceの差し込み項目のように機能し、どの組織のリソースも参照できると思われるかもしれませんが、これはよくある間違いです。たとえば、<code>@actions.get_order</code>が機能するのは、トピックの<code>actions:</code>ブロックで<code>get_order</code>が定義されている場合だけです。<code>@Account.Name</code>のような記述は、スクリプト内のブロックでも、組み込みのユーティリティでもないため、機能しません。</p>
<h3>コメントアウトは#で</h3>
<p><code>#</code>記号を使うと、スクリプト内のどこにでもコメントを追加できます。その行の<code>#</code>以降の内容はすべて、コンパイラーに無視されます。AIエージェントのロジックを説明するために、コメントは積極的に使いましょう。Agent Scriptには、複数行のコメント専用の構文はありません。コメントが複数行にわたる場合は、各行の先頭に<code>#</code>を付けてください。</p>
<pre># このアクションは注文管理システムから注文の詳細を取得する
lookup_order:
   description: "IDで注文情報を取得する"  # LLMはこの説明を参考に、アクションを使用するタイミングを判断する
</pre>
<h3>矢印構文（<code>-&gt;</code>）で手続き型ロジックを記述</h3>
<p>条件分岐、アクションの実行、変数の設定など、段階的なロジックを記述する場合は、矢印構文を使用します。これにより、ブロックが<strong>宣言型</strong>モードから<strong>手続き型</strong>モードに切り替わります。</p>
<pre>instructions:-&gt;
   if @variables.is_verified:
      run @actions.get_order
         with order_id=@variables.order_id
         set @variables.status = @outputs.status
</pre>
<p>矢印は、「この後に続くのは、単なる設定ではなく、実行可能なロジックである」ことをAgent Scriptに伝えます。</p>
<p><strong>注</strong> – <code>:</code>も使用できますが、表記を明確にするために<code>-&gt;</code>の方がよく使われます。</p>
<h3>プロンプトテキストにはパイプ構文（<code>|</code>）を使用</h3>
<p>パイプ記号は、プロンプトの一部としてLLMに渡されるテキストを示します。自然言語の指示は、この方法で記述します。</p>
<pre>instructions:|
   | このテキストは、LLMが受け取るプロンプトの一部になります。
     インデントされたテキストは、同じ行の続きとして扱われます。
   | このパイプは、プロンプト内での新しい行の開始を意味します。
</pre>
<p>パイプは、手続きブロックの外側で複数行の文字列を表す場合にも使用できます。</p>
<pre>instructions:|
   あなたは親切で有能なアシスタントです。
   常に礼儀正しく、プロフェッショナルに対応してください。
   お客様の機密情報は決して共有しないでください。
</pre>
<p>重要なポイントは、<strong>ロジック</strong>は決定論的に実行される一方で、<strong>パイプテキスト</strong>はLLM向けのプロンプトとして組み立てられるということです。この分離が、<strong>ハイブリッド推論</strong>の中核を成しています。</p>
<h3>動的な値を埋め込むためのテンプレート式（<code>{! }</code>）</h3>
<p>変数の値または式をプロンプトテキストに埋め込むには、数式構文<code>{! }</code>で囲みます。Agent Scriptは、実行時にそれらを実際の値に置き換えます。</p>
<pre>| こんにちは、{!@variables.customer_name}さん。ご注文の状況は、{!@variables.order_status}です。
| ご注文の合計金額は、{!@variables.order_total}ドルです。
</pre>
<p>上記のスクリプトで、<code>customer_name</code>が「ジョン」で、<code>order_status</code>が「出荷済み」、<code>order_total</code>が「150」の場合、LLMは以下のような入力を受け取ります。</p>
<blockquote><p>こんにちは、ジョンさん。ご注文の状況は、出荷済みです。<br />
ご注文の合計金額は150ドルです。</p></blockquote>
<p>LLMは変数名ではなく、具体的な値を受け取ります。これにより、LLMの処理が簡単になり、AIエージェントの信頼性が高くなります。</p>
<p><strong>注</strong> – テンプレート値に使えるのは、変数だけはありません。演算子を使った式にすることもできます。サポートされている演算子の詳細については、<a href="https://developer.salesforce.com/docs/ai/agentforce/guide/ascript-ref-operators.html">こちらのドキュメント</a>（英語）を参照してください。</p>
<h3><code>...</code>による入力値の抽出</h3>
<p>アクションをツールとしてLLMに公開する場合、会話の中から必要な入力値をLLM自身に抽出させたいことがあります。<code>...</code>構文は、LLMにパラメーターの値をユーザー入力から抽出する（スロットフィリング）ように指示します。</p>
<pre>reasoning:
   actions:
      lookup: @actions.get_order
         with order_id=...                       # LLMが会話から抽出
         with customer_id=@variables.customer_id  # 特定の変数にバインド
         with limit=10                            # 固定のリテラル値
</pre>
<p>この例では、LLMが会話の内容から<code>order_id</code>を特定し、変数から<code>customer_id</code>を取得し、定数の<code>limit</code>を<strong>10</strong>に設定します。</p>
<p><strong>注</strong> – <code>...</code>構文は、アクション入力のスロットフィリングでのみ使用できます。よくある間違いですが、変数のデフォルト値としては使えません。</p>
<h3>式の演算子</h3>
<p>Agent Scriptは、比較と論理式に使われる一般的な演算子をサポートしています。これらの演算子は、<code>if</code>文や<code>available when</code>条件で使用します。</p>
<pre># 比較演算子
@variables.count &gt; 10
@variables.count &gt;= 10
@variables.count &lt; 5
@variables.count &lt;= 5
@variables.status == "shipped"
@variables.email != ""

# 論理演算子
@variables.is_verified and @variables.has_order
@variables.is_premium or @variables.is_vip
not @variables.is_blocked

# Nullチェック
@variables.order_id is None
@variables.customer_name is not None
</pre>
<p><strong>注</strong> – Agent Scriptは、算術演算子として<code>+</code>と<code>-</code>をサポートしていますが、現時点では<code>*</code>、<code>/</code>、<code>%</code>はサポートしていません。複雑な計算が必要な場合は、FlowまたはApexのアクションを使ってください。</p>
<h3>条件分岐</h3>
<p>条件分岐<strong>（</strong><code>if/else</code><strong>）</strong>は、どの命令を実行するか、またはどのプロンプトを組み立てるかを制御します。</p>
<pre>instructions:-&gt;
   if @variables.is_verified:
      | こんにちは。ご用件をどうぞ。
   else:
      | 最初に本人確認をお願いします。

   if @variables.order_total &gt; 100:
      run @actions.apply_discount
</pre>
<p><strong>注</strong> – <code>else if</code>は現時点ではサポートされていません。代わりに、複数の<code>if</code>文を個別に使用してください。</p>
<h2>基本のブロック</h2>
<p>Salesforce DXプロジェクトでは、Agent Scriptは<code>aiAuthoringBundles</code>ディレクトリ内に配置されます。たとえば、「HelloWorld」エージェントを構築している場合、スクリプトは次のパスにある<code>.agent</code>ファイルに配置されます。</p>
<p><code>force-app/main/aiAuthoringBundles/HelloWorld/HelloWorld.agent</code></p>
<p>このファイルは、AIエージェントの頭脳で、これから取り上げる設定、変数、会話トピックを含んでいます。</p>
<p>すべてのAgent Scriptファイルは、ブロック単位で構成されます。ブロックは、特定の順序で記述する必要があります。以下は、最上位のブロックを順番に並べた全体像です。</p>
<pre>config:
   # AIエージェントの識別情報

variables:
   # 状態管理

system:
   # グローバルな指示とメッセージ

start_agent topic_selector:
   # 開始点 – すべての会話の起点

topic my_topic:
   # それぞれのアクションと推論を含む会話領域
</pre>
<p><strong>注</strong> – この記事では、<code>language</code>と<code>connection</code>は扱いませんが、<code>connection</code>の使い方については、別の機会に詳しく説明する予定です。</p>
<p>では、顧客の注文情報を照会する「Order Management」エージェントを例として、順番に各ブロックを見ていきましょう。</p>
<h3>1. config – AIエージェントの識別情報</h3>
<p><code>config</code>ブロックでは、AIエージェントに関する基本的なメタデータを定義します。少なくとも、<code>agent_name</code>を指定する必要があります。外部の顧客とやり取りするAgentforceサービスエージェントの場合は、<code>default_agent_user</code>も必要です。従業員支援エージェントでは、<code>default_agent_user</code>は必須ではありません。</p>
<pre>config:
   agent_name: "Order_Management_Agent"
   agent_type: "AgentforceServiceAgent"
   default_agent_user: "orderagent@acme.com"
</pre>
<p><code>agent_name</code>は、AIエージェントの一意の識別子として機能します。</p>
<h3>2. variables – 状態管理</h3>
<p>変数を使うと、AIエージェントが会話の複数のターンにわたって情報を保持できます。これはきわめて重要です。LLMは本来、過去のやり取りを記憶しません。そのため、状態を明示的に管理する必要があります。</p>
<p>Agent Scriptには、2種類の変数があります。</p>
<ul>
<li><strong>可変変数</strong> – AIエージェントが読み書きできる変数です。可変変数には、デフォルト値を設定することが推奨されます。</li>
<li><strong>リンク変数</strong> – 読み取り専用の変数で、外部コンテキスト（現在のセッションなど）から値を取得します。リンク変数には<code>source</code>が必要で、デフォルト値は設定できません。</li>
</ul>
<pre>variables:
   # 可変変数 – AIエージェントが読み書きできる変数
   customer_email: mutable string = ""
      description: "本人確認用の顧客のメールアドレス"
   customer_name: mutable string = ""
      description: "確認済みの氏名"
   is_verified: mutable boolean = False
      description: "顧客の本人確認が完了しているかどうか"
   order_id: mutable string = ""
      description: "現在問い合わせを受けている注文のID"
   order_status: mutable string = ""
      description: "注文の現在の状態"
   order_total: mutable number = 0
      description: "注文の合計金額"
   delivery_date: mutable string = ""
      description: "配達予定日"

   # リンク変数 – 読み取り専用で外部コンテキストから値を取得
   session_id: linked string
      description: "現在のセッションID"
      source: @session.sessionID
</pre>
<p>サポートされるデータ型の詳細については、<a href="https://developer.salesforce.com/docs/ai/agentforce/guide/ascript-ref-variables.html">公式ドキュメント</a>（英語）を参照してください。</p>
<p>以下の点に注意してください。</p>
<ul>
<li>ブール値は、<code>True</code>、<code>False</code>のように、先頭を大文字にする必要があります。<code>true</code>、<code>false</code>は使用できません。</li>
<li><code>description</code>フィールドを使用すると、LLMが変数の内容を理解しやすくなり、スロットフィリングの精度が向上します。</li>
<li>可変変数にはデフォルト値を設定することが推奨されますが、リンク変数にはデフォルト値を指定できません。</li>
</ul>
<h3>3. system – グローバルな指示とメッセージ</h3>
<p><code>system</code>ブロックでは、AIエージェントの性格を定義し、2つの必須メッセージである<code>welcome</code>（会話の開始時に表示）と<code>error</code>（問題の発生時に表示）を指定します。</p>
<pre>system:
   messages:
      welcome: "こんにちは。注文サポートアシスタントです。ご用件をどうぞ。"
      error: "申し訳ありません。問題が発生しました。もう一度やり直します。"

   instructions:|
      あなたは、Acmeストアのフレンドリーで優秀な注文サポートエージェントです。
      注文の詳細情報を共有する前に、必ず顧客の本人確認を行ってください。
      簡潔に、顧客の役の立つ回答をしてください。
      回答がわからない場合は、率直にそう伝えてください。
</pre>
<p><strong>注</strong> – これらの指示は、すべてのトピックに対してグローバルに適用されます。ただし、特定のトピックでAIエージェントの振る舞いを変えたい場合は、トピックレベルで指示を上書きできます。以下は、トピックレベルで指示を上書きする例です。トピックについては、後ほど詳しく説明します。</p>
<pre>topic professional:
   description: "ビジネス向けのフォーマルなコミュニケーション"

   system:
      instructions: "あなたは、礼儀正しいビジネスパーソンです。ビジネスに適した言葉を使い、くだけた表現を避け、敬意のある口調を保ってください。"

   reasoning:
      instructions:-&gt;
         | ご用件をお伺いします。
</pre>
<p>トピックで独自の<code>system.instructions</code>を定義している場合、そのトピックではグローバルな指示がトピック独自の指示に置き換えられます。この方法は、会話領域ごとにAIエージェントの性格や振る舞いを変えたい場合に便利です。</p>
<h3>4. start_agent – 開始点</h3>
<p><code>start_agent</code>ブロックには、独特の機能があります。すべてのユーザーメッセージは、1番目であっても50番目であっても、ここから実行が開始されます。AIエージェントの入り口となるところです。</p>
<p>通常、<code>start_agent</code>は、ユーザーを迎え入れ、その目的にもとづいて適切なトピックへ振り分けるために使用します。</p>
<pre>start_agent topic_selector:
   description: "ユーザーを歓迎し、適切なトピックへ案内する"

   reasoning:
      instructions:|
         ユーザーのメッセージと会話履歴に最も適したツールを選択してください。不明な場合は、最も妥当と思われるものを選択してください。

      actions:
         go_to_verification: @utils.transition to @topic.verification
            description: "注文情報にアクセスする前に顧客の本人確認を行う"
            available when @variables.is_verified == False
         go_to_order_status: @utils.transition to @topic.order_status
            description: "注文の処理状況、追跡、配達情報を確認する"
            available when @variables.is_verified == True
</pre>
<p><code>available when</code>条件に注目してください。<code>go_to_order_status</code>への遷移は、顧客の本人確認がすでに完了している場合にのみ、選択肢として表示されます。これが、状態に応じてフローを制御する仕組みです。</p>
<p><strong>注</strong> – アクションと遷移については、後ほど別のセクションで説明します。</p>
<h3>5. トピック – 会話領域</h3>
<p>トピックは、AIエージェント内の個別の機能領域を表します。たとえるなら、「本人確認」、「注文状況の確認」、「返品手続き」など、1つの会話の中のチャプターのようなものです。各トピックには、固有のアクション、指示、ツールがあります。この例では、AIエージェントは<code>verification</code>と<code>order_status</code>という2つのトピックを使用します。</p>
<pre>topic verification:
   description: "顧客の本人確認を行う"
   # ... ここにアクションと推論を記述する

topic order_status:
   description: "注文に関する問い合わせに対応する"
   # ... ここにアクションと推論を記述する
</pre>
<p><code>description</code>は重要です。特に<code>start_agent</code>ブロックでトピックを分類する際に、トピックが適切であるかどうかをLLMが理解する助けとなります。</p>
<p><strong>重要な原則</strong> – すべてのユーザーメッセージは<code>start_agent</code>から始まります。そこから、AIエージェントはコンテキストにもとづいて適切なトピックに遷移します。</p>
<h3>6. アクション – トピックが実行できることを定義</h3>
<p><strong>アクション</strong>は、トピックが呼び出せる機能を定義します。たとえば、FlowやApexクラス、APIなどです。アクションは、トピックごとに<code>actions:</code>ブロックで定義されます。</p>
<p>アクションは、いわば<strong>定義レイヤー</strong>です。存在する外部インターフェースを宣言し、その入力と出力を定義します。</p>
<pre>topic order_status:
   description: "注文に関する問い合わせに対応する"

   actions:
      get_order:
         description: "IDで注文の詳細を取得する"
         inputs:
            order_id: string
               description: "照会する注文ID"
               is_required: True
         outputs:
            status: string
            total: number
            delivery_date: string
         target: "flow://Get_Order_Details"

      get_tracking:
         description: "配送の追跡情報を取得する"
         inputs:
            order_id: string
         outputs:
            carrier: string
            tracking_number: string
         target: "flow://Get_Tracking_Info"
</pre>
<p>上記の例では、Agentforceに「このトピックでは2つのアクションを利用できる。そのアクションはどう呼ばれるものか、どのような入力が必要か、どのような出力を返すか」を伝えています。ターゲットの種類とサポートされるデータ型については、公式ドキュメントの<a href="https://developer.salesforce.com/docs/ai/agentforce/guide/ascript-ref-actions.html">こちら</a>（英語）を参照してください。</p>
<p><strong>アクションは、定義しただけでは実行されません。</strong>関数を宣言するのと同じで、呼び出されるまでは何も起きません。では、どのようにアクションを呼び出すのでしょうか。それを行うのが<strong>推論レイヤー</strong>です。</p>
<h3>7. 推論 – オーケストレーションレイヤー</h3>
<p><strong>推論</strong>ブロックでは、トピックの振る舞いを組み立てます。推論ブロックは、アクションの定義と実際の実行を橋渡しする役割を担います。すべてのトピックには、<code>reasoning:</code>ブロックを含める必要があります。<code>reasoning</code>の中には、次の2つの重要なセクションがあります。</p>
<ol>
<li><code>instructions</code> – 各ターンで実行されるロジックとプロンプト</li>
<li><code>actions</code> – LLMに公開するツール（「公開レイヤー」）</li>
</ol>
<pre>topic order_status:
   description: "注文に関する問い合わせに対応する"

   actions:
      # 定義レイヤー – 何を呼び出せるか
      get_order:
         description: "注文の詳細を取得する"
         inputs:
            order_id: string
         outputs:
            status: string
         target: "flow://Get_Order_Details"

   reasoning:
      # オーケストレーションレイヤー – いつどのように処理が行われるか

      instructions:-&gt;
         # ロジックとプロンプトをここに記述する
         ...

      actions:
         # 公開レイヤー – LLMが選択できるツール
         ...
</pre>
<h4>推論の指示 – ロジックとプロンプト</h4>
<p><code>reasoning</code>内の<code>instructions:</code>ブロックでは、オーケストレーションが行われます。ここでは、次の要素を組み合わせて記述します。</p>
<ul>
<li><strong>手続き型ロジック</strong>（<code>-&gt;</code> または <code>:</code>を使用）– 上から下に決まった順序で決定論的に実行されます。</li>
<li><strong>プロンプトテキスト</strong>（<code>|</code>を使用）– 組み立てられて、LLMに送信されます。</li>
</ul>
<pre>reasoning:
   instructions:-&gt;
      | 注文に関する顧客の問い合わせに対応してください。

      if @variables.order_id != "":
         | 顧客の注文IDは{!@variables.order_id}です。
      else:
         | 顧客に注文IDを質問してください。
</pre>
<p>矢印（<code>-&gt;</code>）は、手続き型コードであることを示します。<br />
<strong>注</strong> – 矢印の使用は任意であり、「<code>:</code>」を使うこともできます。パイプ（<code>|</code>）は、プロンプトテキストであることを示します。</p>
<p>次のように実行されます。</p>
<ol>
<li>Agentforceが、ロジックを上から下へ処理します。</li>
<li>条件を満たしているかどうかに応じて、プロンプトテキストが追加されていきます。</li>
<li>最終的に組み立てられたプロンプトがLLMに渡されます。</li>
</ol>
<p><strong>シナリオA –</strong> <code>order_id = ""</code></p>
<p>作成されたプロンプト → 「注文に関する顧客の問い合わせに対応してください。顧客に注文IDを質問してください。」</p>
<p><strong>シナリオB –</strong> <code>order_id = "12345"</code></p>
<p>作成されたプロンプト → 「注文に関する顧客の問い合わせに対応してください。顧客の注文IDは12345です。」</p>
<p>状態にもとづいて、プロンプトが動的に作成される点に注目してください。</p>
<p><strong>注</strong> – 条件を満たしたパイプテキストはすべて、個別のタスクとして並べられるのではなく、1つのプロンプトに追加されていきます。LLMは1つにまとめられた指示ブロックを受け取ります。ここで重要なのは、<code>reasoning</code>ループがターンごとにこれらの指示を再実行することです。ターンが進んで変数が変化すると、一致する条件が変わり、それに応じてプロンプトも書き換えられます。これにより、LLMは過去の会話の中で積み重なった指示ではなく、常にその時点のコンテキストに適した新しい指示を受け取ります。</p>
<h4>指示からのアクションの呼び出し</h4>
<p>アクションを呼び出す方法は2つあります。</p>
<h5>方法1 – <code>run</code>による決定論的な実行</h5>
<p>LLMの判断なしで、特定の条件下で<strong>必ず</strong>アクションを実行する必要がある場合は、<code>reasoning.instructions</code>内で<code>run</code>を使用します。</p>
<pre>topic order_status:
   actions:
      get_order:
         description: "注文の詳細を取得する"
         inputs:
            order_id: string
         outputs:
            status: string
            delivery_date: string
         target: "flow://Get_Order_Details"

   reasoning:
      instructions:-&gt;
         | 注文に関する顧客の問い合わせに対応してください。

         # 条件を満たした場合は常に実行する
         if @variables.order_id != "" and @variables.order_status == "":
            run @actions.get_order
               with order_id=@variables.order_id
               set @variables.order_status = @outputs.status
               set @variables.delivery_date = @outputs.delivery_date

         if @variables.order_status == "shipped":
            | ご注文の商品は発送済みです。到着までしばらくお待ちください。
</pre>
<p><code>run</code>コマンド</p>
<ul>
<li>処理がその箇所に到達すると、直ちに実行されます。</li>
<li><code>with</code>を使用して入力を渡します。</li>
<li>出力を変数に格納するには<code>set</code>を使います。</li>
</ul>
<p><strong>用途</strong> – データの自動取得、必須の検証、ユーザー入力が何であれ、必ず実行するあらゆるロジック</p>
<h5>方法2 – <code>reasoning.actions</code>内のLLMツール</h5>
<p>会話のコンテキストにもとづいて、アクションを呼び出すかどうかを<strong>LLMに判断させる</strong>場合は、<code>reasoning.actions</code>を使います。</p>
<pre>topic order_status:
   actions:
      get_order:
         description: "注文の詳細を取得する"
         inputs:
            order_id: string
         outputs:
            status: string
         target: "flow://Get_Order_Details"

   reasoning:
      instructions:-&gt;
         | 注文に関する顧客の問い合わせに対応してください。

      actions:
         # このアクションで、LLMが使用可能なツールを作成する
         lookup_order: @actions.get_order
            description: "顧客から注文について問い合わせがあったら、その注文を照会する"
            with order_id=...
            set @variables.order_status = @outputs.status
</pre>
<p>このスクリプトでは、<code>lookup_order</code>という次のようなツールが作成されます。</p>
<ul>
<li>定義されたアクション（<code>@actions.get_order</code>）を参照する</li>
<li>LLMがいつアクションを呼び出すか判断するための<code>description</code>がある</li>
<li>LLMが会話から値を抽出できるように、<code>...</code>を使用して<strong>スロットフィリング</strong>を行う</li>
<li><code>set</code>を使用して出力を取得する</li>
</ul>
<p><strong>用途</strong> – ユーザー起点のアクション、任意の機能、または会話のコンテキストにもとづいて判断すべきシナリオ</p>
<p><strong>注</strong> – わかりやすくするために、上記の例では1つのアクションだけを示していますが、1つのトピックに複数のアクションを含めることができます。また、<code>{!@actions}</code>を使って、これらのアクションをプロンプトの中で参照することもできます。以下に例を示します。</p>
<pre>topic order_status:
   actions:
      get_tracking:
         description: "配送の追跡情報を取得する"
         inputs:
            order_id: string
         outputs:
            tracking_number: string
         target: "flow://Get_Tracking_Info"
   reasoning:
      instructions:-&gt;
         | 注文に関する顧客の問い合わせに対応してください。
         | 顧客が追跡情報を希望する場合は、{!@actions.get_tracking}を使用してください。

         actions:
            # このアクションで、LLMが使用可能なツールを作成する
            get_tracking: @actions.get_order
               description: "注文を追跡する"
               with order_id=...
               set @variables.tracking_number = @outputs.status # 追跡番号が変数であることが前提
</pre>
<h4>変数の設定</h4>
<p>実行時に変数を設定する一般的な方法は2つあります。</p>
<ol>
<li><strong>アクションの出力を取得する</strong> – <code>set</code>を使用して、実行されたアクションの結果を格納します。
<pre>run @actions.verify_customer
   with email=@variables.customer_email
   set @variables.customer_name = @outputs.name
   set @variables.is_verified = @outputs.is_valid
</pre>
</li>
<li><strong>LLMによるスロットフィリング</strong> – <code>@utils.setVariables</code>を使用して、LLMに会話から直接、値を抽出させます。
<pre>reasoning:
   actions:
      collect_email: @utils.setVariables
         description: "顧客のメールアドレスを取得する"
         with customer_email=...   # LLMが会話から抽出
</pre>
</li>
</ol>
<p><strong>用途</strong> – 外部システム、Flow、Apexのデータの場合は、アクションの出力を使用します。会話からユーザー入力を収集するには、<code>setVariables</code>を使います。</p>
<h3>制御の流れ – 実行の仕組み</h3>
<p>以下の図は、トピック、アクション、推論が実行時に連携して動作する仕組みを示しています。</p>
<p><img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260213135259/Flowchart-showing-how-Agent-Script-execution-works-at-runtime-e1771015996526.png?w=1000" alt="Agent Scriptの実行時の動作を示すフローチャート" width="1000" height="865" /></p>
<h4>覚えておきたいポイント</h4>
<ol>
<li><strong>Agent Scriptでは、ハイブリッド推論を利用できます。</strong>ハイブリッド推論は、LLMの柔軟性とプログラムによる制御を組み合わせたものです。重要な思考モデルは次の3つです。
<ol>
<li>トピック – 会話領域（AIエージェントが扱える会話の範囲）</li>
<li>アクション – トピックレベルの定義（何を呼び出せるか）</li>
<li>推論 – 指示とLLMに公開されるツールを含む、オーケストレーションレイヤー</li>
</ol>
</li>
<li><strong>すべてのメッセージは<code>start_agent</code>から始まります</strong>。これは会話の途中であっても同様です。</li>
<li><strong>指示は上から順に実行されます。</strong>LLMには、最終的に組み立てられたプロンプトのみが渡されます。</li>
<li><strong>遷移は一方向です。</strong><code>@utils.transition</code>でトピックを遷移すると、前のトピックに自動的に戻ることはありません。</li>
<li><strong>完了後は入力を待機します。</strong>その後、フローは<code>start_agent</code>に戻ります。</li>
</ol>
<p><strong>注</strong> – トピックの委任を使って、元のトピックに戻る方法があります。この方法については、<strong>トピックの委任（呼び出し元に戻す）</strong>セクションで後述します。</p>
<h4>推論後 – 後処理用のフック</h4>
<p>オプションの<code>after_reasoning</code>ブロックは、LLMが応答を完了した後に実行されます。トピックが終了した後に必ず実行したいクリーンアップや遷移に使用します。</p>
<pre>topic verification:
   reasoning:
      instructions:-&gt;
         | 顧客の本人確認を行う。

   after_reasoning:
      if @variables.is_verified == True:
         transition to @topic.order_status
</pre>
<p>LLMが選択する<code>reasoning.actions</code>とは異なり、<code>after_reasoning</code>は条件が満たされれば必ず実行されます。LLMが応答した後にガードレールや必須フローを強制する場合に最適です。</p>
<h4>トピックの遷移</h4>
<p>トピック間の移動には、コンテキストに応じて、異なる構文を使用します。</p>
<ul>
<li><strong>LLMが選択</strong> – <code>reasoning.actions</code>の中で<code>@utils.transition</code>を使用</li>
</ul>
<pre>reasoning:
   actions:
      go_to_returns: @utils.transition to @topic.returns
         description: "返品をサポートする"
         available when @variables.is_verified == True
</pre>
<p>LLMはこれを利用可能なツールとして認識し、会話のコンテキストにもとづいて、使用するタイミングを判断します。</p>
<ul>
<li><strong>決定論的</strong> – <code>reasoning.instructions</code>または<code>after_reasoning</code>の中で、そのまま<code>transition to</code>を使用して即時に実行します。</li>
</ul>
<pre>reasoning:
   instructions:-&gt;
      if @variables.end_conversation:
         transition to @topic.farewell
</pre>
<pre>after_reasoning:
   if @variables.needs_escalation:
      transition to @topic.escalation
</pre>
<p>上記の例では、LLMの判断を必要とせず、条件が満たされるとすぐに遷移が実行されます。</p>
<p><strong>重要な構文のルール</strong></p>
<ul>
<li><code>@utils.transition to</code> → <code>reasoning.actions</code>の中でのみ使用すること</li>
<li>単純な<code>transition to</code> → <code>reasoning.instructions:-&gt;</code>または<code>after_reasoning</code>の中でのみ使用すること</li>
</ul>
<p><strong>注</strong> – この2つを取り違えないようにしてください。使う場所を間違えると、エラーの原因になります。</p>
<h4>トピックの委任（呼び出し元に戻す）</h4>
<p>上記の方法は一方向ですが、直接の<code>@topic.&lt;name&gt;</code>参照を使うと、実行を別のトピックに委任できます。参照先のトピックが完了すると、フローは自動的に元のトピックに戻ります。</p>
<pre>reasoning:
   actions:
      consult_specialist: @topic.specialist_topic
         description: "スペシャリストに相談してから、ここに戻る"
</pre>
<p>この方法は、別のトピックの専門的な対応を必要とし、その後に現在の会話を続けたい場合に便利です。</p>
<h2>まとめ</h2>
<p>この記事では、Agent Scriptの構文と基本的な構成ブロックを紹介しました。コードのサンプルをもっとご覧になりたい場合は、<a href="https://developer.salesforce.com/sample-apps/agent-script-recipes/getting-started/overview">Agent Script Recipesサンプルアプリ</a>（英語）を参考にしてください。次回の記事では、<a href="https://developer.salesforce.com/docs/ai/agentforce/guide/agent-dx.html">Agentforce DX</a>（英語）や新しいAgent Builderなどの開発者向けツールを使って、AIエージェントを開発、デバッグ、テスト、デプロイする方法を詳しく見ていきます。</p>
<h2>関連情報</h2>
<ul>
<li><a href="https://github.com/trailheadapps/agent-script-recipes">Agent Script Recipesサンプルアプリ</a>（英語）</li>
<li><a href="https://youtube.com/playlist?list=PLgIMQe2PKPSJNLEQTPkr06gKhjnHgI1Jb&amp;si=2RRnfuL0hlypqLpQ">Agent Script Decoded動画シリーズ</a>（英語）</li>
<li><a href="https://developer.salesforce.com/docs/ai/agentforce/guide/agent-script.html">Agent Scriptガイド</a>（英語）</li>
</ul>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-intro-to-agent-script-language-fundamentals-jp">Agent Script徹底解説 – Agent Script言語の基本を学ぼう</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/03/agent-script-decoded-intro-to-agent-script-language-fundamentals-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205788</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260216113516/Thumbnail_Headshot-e1771266929631.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260216113516/Thumbnail_Headshot-e1771266929631.png?w=1000" medium="image" />
	</item>
		<item>
		<title>The Future of the Salesforce Developer in the Agentic AI Era</title>
		<link>https://developer.salesforce.com/blogs/2026/03/future-salesforce-developer-agentic-ai</link>
		<comments>https://developer.salesforce.com/blogs/2026/03/future-salesforce-developer-agentic-ai#respond</comments>
		<pubDate>Tue, 10 Mar 2026 14:00:06 +0000</pubDate>
		<dc:creator><![CDATA[René Winkelmeyer]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Agentforce Vibes]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Professional Development]]></category>
		<category><![CDATA[Trust, Security, and Accessibility]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[developer tooling]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205755</guid>
		<description><![CDATA[<p>The role isn't shrinking. It's being redefined, and the developers who see it clearly will define what comes next.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/future-salesforce-developer-agentic-ai">The Future of the Salesforce Developer in the Agentic AI Era</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><b>Key Takeaways:</b></p>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">AI isn&#8217;t replacing the Salesforce Developer role. It&#8217;s reshaping it around three higher-value capabilities: </span><b>system design</b><span style="font-weight: 400">, </span><b>quality engineering</b><span style="font-weight: 400">, and </span><b>cross-system thinking</b><span style="font-weight: 400">.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Adopting AI-assisted development tooling will slow you down before it speeds you up. The investment is in redesigning your workflows, not just adding tools.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Most Salesforce development is brownfield engineering: working inside complex, inherited orgs where undocumented decisions outnumber documented ones. AI can&#8217;t navigate this context alone.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">The Salesforce Developer career path in 2026 and beyond rewards developers who pair deep platform knowledge with broad architectural judgment, not the fastest code writers.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Whether your organization has adopted AI tools or not, you can start building the skills that matter most today.</span></li>
</ul>
<p><span style="font-weight: 400">Adopting AI-assisted development might initially make you slower.</span></p>
<p><span style="font-weight: 400">This isn’t because the tools are bad, or because you&#8217;re doing it wrong. Based on patterns we are seeing across Salesforce development teams adopting AI tooling, </span><a href="https://www.weforum.org/stories/2025/12/ai-paradoxes-in-2026"><span style="font-weight: 400">there is a consistent J-curve</span></a><span style="font-weight: 400">: Using AI effectively requires rethinking the task itself: your workflows, your team&#8217;s processes, and the way your organization builds software. That kind of change often creates new types of errors before it delivers new types of speed.</span></p>
<p><span style="font-weight: 400">Skipping this part of the conversation has consequences. It feeds the fear of slop flooding codebases and fuels anxiety about whether AI improves outcomes or just creates the illusion of developer productivity.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205756" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260309160356/Adopting-AI-assisted-tooling-creates-an-initial-slowdown-the-J-curve-as-workflows-shift-from-90-implementation-to-a-balance-of-system-design-validation-and-editing.jpg?w=880" class="postimages" width="880" height="480" alt="Adopting AI-assisted tooling creates an initial slowdown (the 'J-curve') as workflows shift from 90% implementation to a balance of system design, validation, and editing." />
			  </span>
			</p>
<p><span style="font-weight: 400">Those feelings are valid, but aren’t the full picture. Here’s what’s actually happening to the Salesforce Developer role: where it&#8217;s been, what AI is changing, and where the career path is headed.</span></p>
<h2><span style="font-weight: 400">How the Salesforce Developer Role is Evolving</span></h2>
<p><span style="font-weight: 400">For most of the platform&#8217;s history, the Salesforce Developer&#8217;s value was clear: you made the platform do what it couldn&#8217;t do declaratively. When a </span><a href="https://help.salesforce.com/s/articleView?id=platform.automate_with_salesforce_flow.htm&amp;type=5"><span style="font-weight: 400">Flow</span></a><span style="font-weight: 400"> wasn&#8217;t enough, when a formula hit its limits, or when a business requirement went beyond configuration, you wrote </span><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/"><span style="font-weight: 400">Apex</span></a><span style="font-weight: 400">. You built </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide"><span style="font-weight: 400">Lightning Web Components</span></a><span style="font-weight: 400">. You designed integrations and extended the platform with code.</span></p>
<p><span style="font-weight: 400">The core skill was implementation. You took a requirement and turned it into a working solution. Along the way, you navigated </span><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm"><span style="font-weight: 400">governor limits</span></a><span style="font-weight: 400">, </span><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_triggers_bestpract.htm"><span style="font-weight: 400">bulkification</span></a><span style="font-weight: 400"> patterns, the trigger execution order, and the nuances of multi-tenant architecture. Deep Salesforce-specific knowledge was what set the best developers apart. They didn’t just understand the platform&#8217;s constraints; they knew how to build effectively within them.</span></p>
<p><span style="font-weight: 400">That era isn&#8217;t ending, but it is receding. The implementation skill still matters, but it is no longer the primary source of a developer’s value. </span><span style="font-weight: 400">That source is shifting toward system design, quality engineering, and cross-system thinking.</span></p>
<p>
			  <span class="postimagessection_specify alignnone wp-image-205796 size-medium" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260311080728/The-Salesforce-developers-core-value-is-shifting-away-from-code-implementation-left-toward-system-design-quality-validation-and-cross-system-thinking-right_bd2e4b.jpg" class="postimages" width="880" height="480" alt="The Salesforce developer’s core value is shifting away from code implementation (left) toward system design, quality validation, and cross-system thinking (right)." />
			  </span>
			</p>
<p><span style="font-weight: 400">The shift underway isn&#8217;t just about AI writing code. That&#8217;s the visible part. What matters is what it exposes. </span></p>
<p><b>Will AI replace Salesforce Developers?</b><span style="font-weight: 400"> No. AI is replacing </span><i><span style="font-weight: 400">parts of the work</span></i><span style="font-weight: 400">, especially first-draft code generation. But it’s not replacing the Salesforce Developer entirely. In fact, it&#8217;s increasing demand for the skills that remain: system design, quality validation, and cross-system thinking. The role is being redefined, not eliminated.</span></p>
<p><span style="font-weight: 400">AI has inverted the bottleneck. For decades, the hard part was implementation: you knew what to build, and the challenge was writing the code. Now implementation is fast and cheap. An AI coding assistant &#8211; whether </span><a href="https://developer.salesforce.com/docs/platform/einstein-for-devs/guide/einstein-overview"><span style="font-weight: 400">Agentforce Vibes</span></a><span style="font-weight: 400">, Claude Code, or Cursor paired with the </span><a href="https://developer.salesforce.com/docs/platform/sfvscode-extensions/overview"><span style="font-weight: 400">Salesforce Extensions</span></a><span style="font-weight: 400"> &#8211; can generate an Apex class, scaffold a Lightning Web Component, draft a test suite, or stub out an integration in seconds. The quality varies. The speed doesn&#8217;t.</span></p>
<p><span style="font-weight: 400">What this exposes is that the real bottleneck was always system design. It was in understanding </span><i><span style="font-weight: 400">what</span></i><span style="font-weight: 400"> to build, </span><i><span style="font-weight: 400">why</span></i><span style="font-weight: 400"> to build it that way, and </span><i><span style="font-weight: 400">how</span></i><span style="font-weight: 400"> it fits into the broader system. That bottleneck was invisible when implementation was slow. The time spent writing code also served as thinking time: time to discover edge cases, reconsider approaches, and absorb complexity.</span></p>
<p><span style="font-weight: 400">When AI compresses implementation to near-zero, that thinking time is no longer built in by default. Developers who don&#8217;t replace it deliberately with design and analysis end up shipping faster but understanding less. That&#8217;s where the problems start.</span></p>
<p><span style="font-weight: 400">AI isn&#8217;t just a code generation tool. It&#8217;s the most powerful learning tool developers have ever had. You can ask questions about unfamiliar codebases, explore platform behaviors in real time, and get instant feedback on design decisions. This changes the learning curve, not just the production curve. That distinction matters, and we&#8217;ll come back to it.</span></p>
<h2><span style="font-weight: 400">Why Brownfield Salesforce Orgs Are AI&#8217;s Biggest Challenge</span></h2>
<p><span style="font-weight: 400">There&#8217;s another reality that AI demos consistently ignore: most software in the world is not greenfield. The demos show new apps built in minutes from a blank canvas. But most Salesforce Developers walk into existing orgs every morning. These orgs have hundreds of custom objects. They have layered automations built across multiple releases. They have managed packages interacting in ways nobody fully mapped. They have business logic in configuration that hasn&#8217;t been documented since the person who built it left three years ago.</span></p>
<p><span style="font-weight: 400">This is brownfield engineering, and it&#8217;s where the vast majority of Salesforce development happens.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205758" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260309160402/The-reality-of-the-Salesforce-environment-new-feature-development-often-relies-on-navigating-layers-of-undocumented-legacy-logic-managed-packages-and-implicit-decisions-the-Real-Specification-that-AI-cannot-access.jpg?w=880" class="postimages" width="880" height="480" alt="The reality of the Salesforce environment: new feature development often relies on navigating layers of undocumented legacy logic, managed packages, and implicit decisions (the 'Real Specification') that AI cannot access." />
			  </span>
			</p>
<p><span style="font-weight: 400">The </span><a href="https://www.salesforce.com/news/stories/ai-jobs-revenue/"><span style="font-weight: 400">Salesforce ecosystem</span></a><span style="font-weight: 400"> supports millions of developers working across orgs that have evolved over years. In these environments, the systems themselves are the specification. That specification lives in code, metadata, tribal knowledge, and the collected judgment of everyone who&#8217;s ever touched the org. AI is increasingly good at analyzing the structural layer. What it can&#8217;t reach is the </span><i><span style="font-weight: 400">why</span></i><span style="font-weight: 400"> underneath: why a data model was chosen, which trade-offs were made to serve a specific customer segment, what constraints shaped the architecture. That context lives in people, not in code.</span></p>
<p><b>A practical framework for brownfield AI-assisted development:</b></p>
<ol>
<li style="font-weight: 400"><b>Map before you build.</b><span style="font-weight: 400"> Before using AI to generate code in an existing org, understand the current architecture. Look at trigger execution order, automation dependencies, sharing rules, and integration boundaries.</span></li>
<li style="font-weight: 400"><b>Make the implicit explicit.</b><span style="font-weight: 400"> Document the trade-offs behind the current data model, the reasons certain patterns exist, and the governor limit risks that only surface at scale.</span></li>
<li style="font-weight: 400"><b>Treat context as input.</b><span style="font-weight: 400"> The more system context you give AI tools, the better their output. A prompt grounded in your org&#8217;s real architecture produces results you can ship. A generic prompt produces results you have to rewrite.</span></li>
</ol>
<p><b>Example:</b><span style="font-weight: 400"> You ask an AI assistant to generate an after-update trigger on an Account that queries child Contacts to sync a status field. The code compiles. The tests pass. But your org already has two triggers on Account &#8211; one that recalculates territory assignments and another that fires a platform event to an external ERP. Combined, the three triggers exceed the 100-SOQL-query governor limit during bulk data loads. The AI had no visibility into the existing triggers, the execution order, or the cumulative query count. A developer with system context would have caught this before deployment. That&#8217;s the difference system design makes.</span></p>
<h2><span style="font-weight: 400">Future Salesforce Developer Skills: What Will Matter Most</span></h2>
<table>
<thead>
<tr>
<th><b>Skill</b></th>
<th><b>What It Means</b></th>
<th><b>Why AI Makes It More Important</b></th>
<th><b>How to Start Building It</b></th>
</tr>
</thead>
<tbody>
<tr>
<td><b>System Design</b></td>
<td><span style="font-weight: 400">Understanding inherited systems, defining architectural boundaries, and creating the guardrails AI operates within</span></td>
<td><span style="font-weight: 400">AI compresses implementation to near-zero, exposing design as the real bottleneck &#8211; and the real value</span></td>
<td><span style="font-weight: 400">Map your org&#8217;s current architecture: trigger order, automation dependencies, integration boundaries, and undocumented trade-offs</span></td>
</tr>
<tr>
<td><b>Quality Engineering</b></td>
<td><span style="font-weight: 400">Treating </span></p>
<p><span style="font-weight: 400">every AI-generated artifact as a first draft; validating that code fits the system, not just that it compiles</span></td>
<td><span style="font-weight: 400">Fast output increases the risk of accepting mediocre code &#8211; validation replaces generation as the core daily task</span></td>
<td><span style="font-weight: 400">Establish non-negotiable checkpoints: tests passing, static analysis clean, manual walkthrough complete before every commit</span></td>
</tr>
<tr>
<td><b>Cross-System Thinking</b></td>
<td><span style="font-weight: 400">Seeing how your specialty connects to the wider architecture &#8211; data model, integrations, security, business logic, and user experience</span></td>
<td><span style="font-weight: 400">AI can&#8217;t see across system boundaries; developers who connect the layers become indispensable</span></td>
<td><span style="font-weight: 400">Trace a single feature end-to-end: Apex → Flow → platform event → middleware → external system → end user impact</span></td>
</tr>
</tbody>
</table>
<p><span style="font-weight: 400">The sections below dive deeper into each skill, demonstrating how they play out in practice.</span></p>
<h3><span style="font-weight: 400">System Design: The Core Salesforce Developer Skill of the Future</span></h3>
<p><span style="font-weight: 400">The most important work a Salesforce Developer will do in the coming years is not writing new code. It&#8217;s designing systems, understanding the systems they’ve inherited, deciding how those systems should evolve, and creating the structures and guardrails that AI operates within.</span></p>
<p><span style="font-weight: 400">The brownfield framework above gives you the process. The harder question is what it actually takes to execute it &#8211; and why AI can’t do it for you. Why do triggers fire in a specific order? What trade-offs shaped the current data model? How do integrations behave under load? What does the security model assume? Where do the real governor limit risks live? Not just documenting what exists, but designing what comes next.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205757" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260309160359/An-architectural-blueprint-showing-a-Salesforce-developer-designing-golden-22Integration-Boundaries22-and-22Guardrails22-while-small-AI-robots-execute-work-within-those-defined-lanes.jpg?w=880" class="postimages" width="880" height="480" alt="An architectural blueprint showing a Salesforce developer designing golden Integration Boundaries and Guardrails while small AI robots execute work within those defined lanes." />
			  </span>
			</p>
<p><span style="font-weight: 400">This work requires </span><b>deep technical skill and creative judgment</b><span style="font-weight: 400">. AI is already strong at structural analysis. It can generate documentation drafts from code analysis, find patterns across metadata, and map dependency chains &#8211; often faster than any human could. But </span><b>the design decisions depend on the why</b><span style="font-weight: 400">: why a pattern exists, why a trade-off was accepted, why a constraint matters to the business. That reasoning lives in relationships and institutional memory, not in a codebase.</span></p>
<p><span style="font-weight: 400">In practical terms, a developer who can look at a complex, undocumented Salesforce org and build a clear architectural picture is the one who enables an entire team (and its AI tools) to work effectively. That capability matters far more than speed at writing Apex. The architectural thinker unlocks everyone else&#8217;s productivity. The fast coder is doing work that AI is already learning to do.</span></p>
<p><span style="font-weight: 400">This applies whether you’re preparing an org for </span><a href="https://www.salesforce.com/agentforce/"><span style="font-weight: 400">Agentforce</span></a><span style="font-weight: 400">, building new automations with Flow, or integrating AI coding assistants into your workflow. In each case, the quality of your output depends on system design thinking. A vague prompt produces vague output. A clear understanding of your org&#8217;s real architecture produces something you can ship.</span></p>
<h3><span style="font-weight: 400">Quality Engineering in AI-Assisted Salesforce Development</span></h3>
<p><span style="font-weight: 400">When AI generates code fast, the risk isn&#8217;t that the code is wrong. It&#8217;s that developers accept mediocre code because it arrived fast and looked plausible. This is where slop comes from: not from the model, but from the human who stopped reviewing.</span></p>
<p><span style="font-weight: 400">Validation, not generation, is becoming the center of the developer&#8217;s daily work. That means treating every AI-generated class, Flow, and test suite as a first draft that needs editorial judgment. Read critically. Ask whether the approach fits the existing architecture, not just whether the syntax compiles. Refactor before committing.</span></p>
<p><span style="font-weight: 400">AI-generated tests deserve special attention. These tests can confirm that code behaves as written, but not that it behaves as intended. An AI that writes both the code and the tests can easily generate tests that pass without testing anything meaningful. Write tests with the same rigor you&#8217;d apply to production code.</span></p>
<p><span style="font-weight: 400">In brownfield Salesforce environments, the stakes are high. A poorly validated trigger can cascade into bulk data failures. An Agentforce agent without proper guardrails produces confusing outputs for end users. A Flow that wasn&#8217;t tested against concurrent record updates creates data integrity issues that take weeks to fix. The developer who sets non-negotiable validation checkpoints (tests passing, static analysis clean, manual walkthrough complete) is the one protecting the system&#8217;s long-term health. Pushing back when speed threatens integrity is part of the job. That role is more critical now than before AI, not less.</span></p>
<p><span style="font-weight: 400">This is also a skill upgrade. When the first draft arrives in seconds instead of hours, you reclaim time for the work where human judgment matters most: architecture decisions, trade-off analysis, and knowing when to trust AI output versus when to override it.</span></p>
<p><span style="font-weight: 400">This doesn&#8217;t mean every developer becomes an </span><a href="https://architect.salesforce.com"><span style="font-weight: 400">architect</span></a><span style="font-weight: 400">. It means every developer builds a stronger sense of system context. In many cases, developers become the person overseeing AI agents that do implementation work &#8211; and owning what ships. Frameworks, coding patterns, human code reviews, and thoughtful test design: these remain in human hands. For many companies, speed is the only variable leadership teams measure. Without developers who hold the quality line, AI becomes a multiplier of technical debt and vulnerabilities.</span></p>
<h3><span style="font-weight: 400">Why Cross-System Thinking Is the New Salesforce Developer Advantage</span></h3>
<p><span style="font-weight: 400">Deep specialization remains essential. Someone has to understand the platform internals that AI doesn&#8217;t yet grasp. But the premium is on developers who can pair that depth with breadth and see how their specialty connects to the wider system.</span></p>
<p><span style="font-weight: 400">Salesforce itself is one piece of a wider architecture. Think about how Apex interacts with Flows. How Flows interact with platform events. How platform events interact with external middleware. And how all of it serves the end user. The developer who understands these connections is far more valuable than one who goes deep on a single layer without seeing the bigger picture.</span></p>
<p><span style="font-weight: 400">This means holding the whole product in your head, not just the feature you&#8217;re building. It means understanding the data model, the integration landscape, the security architecture, and the business logic that ties it all together. It also means </span><b>translating technical consequences into business language</b><span style="font-weight: 400"> and surfacing risks early, even when doing so slows momentum.</span></p>
<p><span style="font-weight: 400">On the Salesforce platform, this shift is already visible. Agentforce requires developers who understand not just code but agent design, guardrail configuration, data architecture, and user experience. The line between clicks and code keeps blurring with every release. Integration patterns grow more complex as Salesforce connects to AI services, data platforms, and external apps. The developer who can see across all of these layers and make smart decisions about where code is needed is the one teams will depend on.</span></p>
<h2><span style="font-weight: 400">Salesforce Developer Career Advice for the Agentic AI Era</span></h2>
<p><span style="font-weight: 400">If you&#8217;re reading this and feeling the weight of transition, you&#8217;re not alone. You&#8217;re not wrong to feel it. This is a shift in what the profession asks of you. But it&#8217;s an expansion, not a contraction.</span></p>
<h3><span style="font-weight: 400">What if I&#8217;m already using AI tools in my workflow?</span></h3>
<p><span style="font-weight: 400">Don&#8217;t let speed become your primary metric. The real investment is in redesigning your workflows: building the system designs, guardrails, and frameworks that AI operates within. This takes time. There will be errors. Once the new patterns take hold, you&#8217;ll be working at a level that wasn&#8217;t possible before. Treat AI output as a draft. Validate with rigor. Don&#8217;t let the pressure to ship override the judgment that makes your work effective.</span></p>
<h3><span style="font-weight: 400">What if my organization hasn&#8217;t adopted AI tooling yet?</span></h3>
<p><span style="font-weight: 400">You&#8217;re not as far behind as the FOMO suggests. The distinction between organizational adoption and individual learning matters. Your organization&#8217;s timeline for AI tools is out of your hands; your own learning timeline isn&#8217;t.</span></p>
<p><span style="font-weight: 400">You can use AI assistants today to explore codebases, practice system design thinking, and generate documentation drafts. You can build the habits described in this post regardless of what your team has officially adopted. The system design work itself (understanding your systems in depth, making implicit knowledge explicit, and thinking about architecture as a whole) will make you more effective right now. It also positions you to move fast when organizational adoption happens.</span></p>
<h3><span style="font-weight: 400">What skills will set me apart in the Salesforce Developer career path?</span></h3>
<p><span style="font-weight: 400">Can you look at a complex, undocumented org and produce a clear architectural picture? Can you spot when an AI suggestion would work in isolation but break in context? Can you see across system boundaries and make decisions that account for the full architecture?</span></p>
<p><span style="font-weight: 400">These are the capabilities that grow in value as AI handles more of the implementation work.</span></p>
<h3><span style="font-weight: 400">What if I&#8217;m learning or early in my Salesforce Developer career?</span></h3>
<p><span style="font-weight: 400">This is one of the best times to start. AI is now the most powerful tool available for building the skills that matter most.</span></p>
<p><span style="font-weight: 400">A junior Salesforce Developer today can use AI to explore unfamiliar codebases and understand platform internals in real-time, simulate system design decisions, and get instant feedback on code. None of that existed two years ago. The path to becoming systems-minded is faster now, not slower.</span></p>
<p><span style="font-weight: 400">You still need to learn how things work under the surface. You can listen to a language and understand it, but you don&#8217;t learn the rules until you start producing it. AI gives you a way to compress that learning curve.</span></p>
<p><span style="font-weight: 400">Go broad before you go deep. Build the habit of documenting what you learn. Lean into the </span><a href="https://trailhead.salesforce.com/en/content/learn/trails/force_com_dev_beginner"><span style="font-weight: 400">platform fundamentals on Trailhead</span></a><span style="font-weight: 400">. Certifications like </span><a href="https://trailhead.salesforce.com/en/credentials/platformdeveloperi"><span style="font-weight: 400">Platform Developer I</span></a><span style="font-weight: 400"> validate your foundational knowledge, but the skills described here (system thinking, architectural judgment, and quality discipline) go beyond any exam.</span></p>
<h2><span style="font-weight: 400">How the Salesforce Community Navigates the AI Transition</span></h2>
<p><span style="font-weight: 400">The shift to AI-assisted engineering is creating new knowledge faster than the ecosystem has seen before. That knowledge is spread unevenly. Some developers experiment with AI daily. Others are at organizations that haven&#8217;t made the leap yet. The gap between them is about access to shared, honest experience, not talent.</span></p>
<p><span style="font-weight: 400">The most useful thing anyone in this community can do right now is share what they&#8217;re learning. Share openly, honestly, and without polish. Don’t just share the successes. Share the slowdowns, the failures, and the moments where AI made things harder before it made them easier. The admission that &#8220;this made us slower for three months before it made us faster&#8221; is one of the most helpful things a team can share. It normalizes the transition cost and helps others plan for it.</span></p>
<p><span style="font-weight: 400">Whether it&#8217;s through the </span><a href="https://trailhead.salesforce.com/trailblazer-community"><span style="font-weight: 400">Trailblazer Community</span></a><span style="font-weight: 400">, GitHub discussions, </span><a href="https://trailhead.salesforce.com/community/conferences/"><span style="font-weight: 400">Community Conferences</span></a><span style="font-weight: 400">, </span><a href="https://trailblazercommunitygroups.com/"><span style="font-weight: 400">Salesforce user groups</span></a><span style="font-weight: 400">, or internal channels: Your experience speeds up someone else&#8217;s adoption. The collected, honest knowledge of the Salesforce Developer Community is our greatest asset in navigating this transition. Use it. Contribute to it. Community is more important than ever.</span></p>
<h2><span style="font-weight: 400">What This All Means for Your Salesforce Career</span></h2>
<p><b>The future needs more Salesforce Developers, not fewer</b><strong>. It needs people who can design systems, not just implement them. People who can hold whole products in their heads. People who can guide AI with judgment, push back when speed threatens integrity, and share what they learn so the entire ecosystem gets stronger.</strong></p>
<p><span style="font-weight: 400">The tools are new. The opportunity is significant. And the capabilities that matter most are the ones that have always defined the best engineers: </span><b>judgment, context, and the willingness to understand the whole system</b><span style="font-weight: 400">.</span></p>
<h2><span style="font-weight: 400">Related Reading</span></h2>
<ul>
<li style="font-weight: 400"><a href="https://trailhead.salesforce.com/en/content/learn/trails/force_com_dev_beginner"><span style="font-weight: 400">Get Started with Salesforce Development on Trailhead</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/einstein/genai/overview"><span style="font-weight: 400">Agentforce Developer Documentation</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/"><span style="font-weight: 400">Apex Developer Guide</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/platform/lwc/guide"><span style="font-weight: 400">Lightning Web Components Developer Guide</span></a></li>
</ul>
<h2><span style="font-weight: 400">About the Author</span></h2>
<p><b>René Winkelmeyer</b><span style="font-weight: 400"> leads the Developer Advocacy team at Salesforce. His team focuses on Agentforce, Data 360, and the Salesforce Platform. In his spare time, you might find him </span><a href="https://github.com/muenzpraeger"><span style="font-weight: 400">still coding on GitHub</span></a><span style="font-weight: 400">. Follow René on </span><a href="https://www.linkedin.com/in/muenzpraeger"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/future-salesforce-developer-agentic-ai">The Future of the Salesforce Developer in the Agentic AI Era</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/03/future-salesforce-developer-agentic-ai/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205755</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260313122433/The-Future-of-the-Salesforce-Developer-in-the-Agentic-AI-Era-e1773426290518.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260313122433/The-Future-of-the-Salesforce-Developer-in-the-Agentic-AI-Era-e1773426290518.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Harness Lightning Experience Insights to Improve Performance</title>
		<link>https://developer.salesforce.com/blogs/2026/03/harness-lightning-experience-insights-to-improve-performance</link>
		<comments>https://developer.salesforce.com/blogs/2026/03/harness-lightning-experience-insights-to-improve-performance#respond</comments>
		<pubDate>Thu, 05 Mar 2026 15:00:50 +0000</pubDate>
		<dc:creator><![CDATA[Gery Gutnik]]></dc:creator>
				<category><![CDATA[App Development]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[New Developments]]></category>
		<category><![CDATA[Salesforce Releases]]></category>
		<category><![CDATA[Lightning Experience]]></category>
		<category><![CDATA[Lightning Experience Insiights]]></category>
		<category><![CDATA[Salesforce Scale Center]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205742</guid>
		<description><![CDATA[<p>Explore the new GA Lightning Experience Insights, how they help developers understand what&rsquo;s slowing their Lightning Experience down, and how to implement recommended fixes. </p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/harness-lightning-experience-insights-to-improve-performance">Harness Lightning Experience Insights to Improve Performance</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">Salesforce is committed to continuously improving Lightning Experience performance for your orgs. Over the last few years, we have delivered and transparently shared measurable gains across releases—from a </span><a href="https://developer.salesforce.com/blogs/2024/04/lightning-experience-performance-first-anniversary-results-and-outlook"><span style="font-weight: 400"><strong>12% improvement</strong> in the first year</span></a><span style="font-weight: 400"> of </span><a href="https://developer.salesforce.com/blogs/2023/09/our-detailed-plan-to-improve-lightning-experience-performance"><span style="font-weight: 400">this effort</span></a><span style="font-weight: 400"> to announcing at Dreamforce 2024 that Lightning Experience was </span><a href="https://developer.salesforce.com/blogs/2024/09/announcing-25-faster-lightning-experience"><span style="font-weight: 400"><strong>25% faster</strong>.</span></a><span style="font-weight: 400"> Most recently at Dreamforce 2025, we announced that performance has improved by <strong>37%</strong>. All the while, we continue to invest in these gains to ensure they are permanent by </span><a href="https://developer.salesforce.com/blogs/2025/03/how-salesforce-secures-lightning-performance-gains-by-preventing-regressions"><span style="font-weight: 400">preventing performance regressions in Lightning Experience</span></a><span style="font-weight: 400">. </span></p>
<p><span style="font-weight: 400">However, improving performance at scale is only part of the story. As Lightning Experience becomes faster overall, there is a growing opportunity to optimize performance within individual orgs based on their unique usage patterns and configurations. This is why our focus is expanding: alongside continuous platform-level improvements, we are providing developers with better tools to understand, diagnose, and improve Lightning Experience performance within their own environments. </span></p>
<p><span style="font-weight: 400">At Dreamforce 2025, we took a major step forward by launching </span><b>Lightning Experience Insights</b><span style="font-weight: 400"> in </span><b>Scale Center</b><span style="font-weight: 400"> as a Beta feature. With the <strong>Spring ’26</strong> release, we are excited to announce that these insights are now <strong>Generally Available (GA)</strong>.</span></p>
<h2><span style="font-weight: 400">Introducing Salesforce Scale Center</span></h2>
<p><strong>Salesforce </strong><a href="https://help.salesforce.com/s/articleView?id=xcloud.scale_center_overview.htm&amp;type=5"><span style="font-weight: 400"><strong>Scale Center</strong></span></a><span style="font-weight: 400"> is your central hub for understanding how your org behaves at scale. It p</span><span style="font-weight: 400">rovides self-service, near real-time access to performance metrics to improve the scalability of your Salesforce implementation. Scale Center brings together </span><span style="font-weight: 400"><strong>performance, reliability, and usage insights</strong> to help developers proactively identify risks, prioritize optimizations, and operate their orgs with confidence as they grow.</span></p>
<p><span style="font-weight: 400">Scale Center has powerful <strong>root cause analysis</strong>, </span><span style="font-weight: 400">enabling you to resolve issues earlier in the development cycle. This analysis works by retrieving customized insights and diagnosing root causes or “hot spots.” In addition to identifying hot spots, Scale Center provides recommendations for addressing them. </span></p>
<p><span style="font-weight: 400">Scale Center offers a unified, curated view of how your org performs under real-world conditions across users, pages, and customizations. This visibility allows developers to move from reactive troubleshooting to <strong>intentional, proactive performance management</strong>.</span></p>
<p><span style="font-weight: 400">As of Dreamforce 2025, Scale Center is available for all major editions. It continues to expand with new insights tailored to the most critical scaling challenges on the Salesforce Platform, including our newest addition: </span><b>Lightning Experience Insights</b><span style="font-weight: 400">. These insights are specifically designed to help you understand and improve your individual Lightning Experience performance.</span></p>
<h2><span style="font-weight: 400">Lightning Experience Insights: Turning Data into Action</span></h2>
<p><span style="font-weight: 400"><strong>Lightning Experience Insights</strong> in Scale Center are built with a singular goal: to help developers understand and optimize their org’s performance. These insights move beyond aggregate platform metrics to focus on the actual user experience, providing the data necessary to take specific, impactful action.</span></p>
<p><span style="font-weight: 400">With the <strong>Spring ’26</strong> release, </span><a href="https://help.salesforce.com/s/articleView?id=release-notes.rn_scale_center_lex_insights.htm&amp;release=260&amp;type=5"><span style="font-weight: 400">Lightning Experience Insights are Generally Available</span></a>.<span style="font-weight: 400"> Moving beyond its Beta phase, this version features expanded coverage, clearer guidance, and deeper integrations across Scale Center. </span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400">Let’s explore the key components of Lightning Experience Insights.</span></p>
<h3><span style="font-weight: 400">Performance Overview</span></h3>
<p><span style="font-weight: 400">The Performance Overview in Lightning Experience Insights provides a clear, high-level view of how Lightning pages perform across your org. It enables developers to quickly assess overall Lightning Experience performance before diving into granular details.</span></p>
<p><span style="font-weight: 400">At the center of this view is </span><strong><a href="https://trailhead.salesforce.com/content/learn/modules/lightning-experience-performance-optimization">Lightning Experience Page Time (EPT)</a></strong><span style="font-weight: 400">, </span><span style="font-weight: 400">the primary metric Salesforce uses to measure Lightning page load performance. EPT represents the total time required for a page to load into a state where a user can fully interact with it. </span></p>
<p><span style="font-weight: 400">A lower EPT indicates faster page loads and provides a better user experience. We use the industry-standard <strong>75th percentile</strong> (P75) to calculate the EPT, which represents the time it takes for 75% of pages to load for your users. By focusing on the P75, we identify issues affecting the majority of your user base, providing a more accurate reflection of how real-world performance impacts your customers.</span></p>
<p><span style="font-weight: 400">Ultimately, the Performance Overview helps developers quickly answer a fundamental question: </span><i><span style="font-weight: 400">Is Lightning Experience performing well for our users, or is further investigation required?</span></i><span style="font-weight: 400"> It highlights overall health and surfaces specific areas where your attention is needed most.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205750" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260303174747/Screenshot-of-Performance-Overview-in-Lightning-Experience-Insights-e1772585300593.png?w=1000" class="postimages" width="1000" height="267" alt="Screenshot of Performance Overview in Lightning Experience Insights" />
			  </span>
			</p>
<p><span style="font-weight: 400">To reflect the actual user journey, EPT is categorized into</span><b> First Page Load EPT </b><span style="font-weight: 400">and </span><b>Subsequent Page Load EPT</b><span style="font-weight: 400">. First Page Load EPT captures the initial experience when a Lightning session starts, while Subsequent Page Load EPT measures performance as users navigate between pages. </span></p>
<p><span style="font-weight: 400">The initial page load typically takes longer than subsequent page load because it includes both the complete page render and the initialization of the framework, also known as the </span><b>Lightning Experience Bootstrap</b><span style="font-weight: 400">. Once the framework is initialized, subsequent page load times are generally faster because they do not need to reload the core framework during navigation.</span></p>
<p><span style="font-weight: 400">Viewing these metrics together—and analyzing their distribution—enables developers to identify which optimizations have the greatest impact. Whether the goal is to improve the user’s initial entry into Lightning or to make everyday navigation faster and more responsive, these insights help you prioritize optimizations where they matter most.</span></p>
<h3><span style="font-weight: 400">Key Insights and Best Practices</span></h3>
<p><span style="font-weight: 400">The </span><b>Key Insights</b><span style="font-weight: 400"> section is your starting point for understanding Lightning Experience performance in your org. Rather than surfacing raw metrics, it highlights where Lightning pages may be deviating from recommended performance best practices, helping developers focus on the areas with the greatest impact.</span></p>
<p><span style="font-weight: 400">Key Insights provide visibility into whether your Lightning Experience is structured for speed and responsiveness. For example, pages with an unusually high number of components can lead to slower load times. Key Insights flag these early so developers can optimize page composition to improve performance.</span></p>
<p><span style="font-weight: 400">Key Insights also evaluate whether your org is utilizing available performance optimizations designed to support Lightning Experience performance. Key Insights highlight settings and capabilities, such as </span><b>Lightning CDN</b><span style="font-weight: 400">, that help jump-start the Lightning framework and are developed to improve First Page Load performance. </span></p>
<p><span style="font-weight: 400">Seeing the optimizations available, together with areas that can benefit from the optimizations, makes it easier for developers to understand where and how to implement performance best practices across their orgs.</span></p>
<p><span style="font-weight: 400">These examples represent only a subset of the insights available. Key Insights covers a range of best practices across configuration and page design, giving developers a comprehensive view of how to strengthen Lightning Experience performance.</span></p>
<h3><span style="font-weight: 400">Performance Trends</span></h3>
<p><span style="font-weight: 400">The <strong>Performance Trends</strong> section helps developers understand how Lightning Experience performance changes over time. It visualizes your org’s Experience Page Time (EPT) for a selected period, making it easier to spot patterns, shifts, and anomalies in page load behavior.</span></p>
<p><span style="font-weight: 400">Additional charts in this section break EPT down across common dimensions such as geography and browser, providing context into where performance may vary for different users. When not explicitly separated, EPT reflects a blended view of first and subsequent page loads and is referred to simply as “EPT.”</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205751" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260303174751/Screenshot-of-Performance-Trends-in-Lightning-Experience-Insights-e1772585315963.png?w=1000" class="postimages" width="1000" height="489" alt="Screenshot of Performance Trends in Lightning Experience Insights" />
			  </span>
			</p>
<p><span style="font-weight: 400">This specific definition excludes <strong>Lightning Experience bootstrap</strong> and combines only non-bootstrap EPT from both first and subsequent page navigations. Because bootstrap performance isn’t directly actionable, this metric represents the portion of page load time that developers can meaningfully influence. It also provides a simplified baseline for further breakdowns across geographies, browsers, and slow-performing pages.</span></p>
<p><span style="font-weight: 400">Viewing trends this way helps developers quickly determine whether performance changes are isolated—affecting a specific region or browser—or reflect broader shifts across the org.</span></p>
<h3><span style="font-weight: 400">Actionable Insights for Slow Pages</span></h3>
<p><span style="font-weight: 400">Finally, developers can connect performance signals to concrete opportunities for specific page optimization. The </span><b>High-Impact, Slow-Performing Pages</b><span style="font-weight: 400"> view identifies pages that are both slow to load and frequently accessed, highlighting areas where performance issues most significantly affect users. These pages are the highest priority because their latency impacts a significant portion of your org’s daily activity.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205749" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260303174743/Screenshot-of-High-Impact-Slow-Performing-Pages-in-Lightning-Experience-Insights-e1772585286792.png?w=1000" class="postimages" width="1000" height="438" alt="Screenshot of High-Impact, Slow-Performing Pages in Lightning Experience Insights" />
			  </span>
			</p>
<p><span style="font-weight: 400">For each high-impact slow page, <strong>Lightning Experience Insights</strong> surfaces the underlying custom components and actions contributing to longer load times. Developers can use this information to pinpoint the exact elements causing delays. With targeted visibility, developers can prioritize the optimizations that have the biggest effect on the real-world user experience.</span></p>
<p><span style="font-weight: 400">By combining usage and performance data, this view ensures developers focus on the slow pages that matter most. It enables faster, more precise action instead of guesswork or broad refactoring, turning insights into measurable improvements for your org’s Lightning Experience.</span></p>
<h2><span style="font-weight: 400">Looking Ahead: Faster Lightning, Smarter Insights</span></h2>
<p><span style="font-weight: 400">Salesforce remains deeply committed to advancing Lightning Experience performance. Simultaneously,  we are investing in tools that give developers greater visibility and control over performance within their own orgs.</span></p>
<p><span style="font-weight: 400">Our goal is to empower developers to understand and optimize performance confidently as Lightning continues to evolve. With that in mind, </span><b>Lightning Experience Insights</b><span style="font-weight: 400"> in </span><b>Scale Center</b><span style="font-weight: 400"> will continue to expand and become smarter, deeper, and more actionable.</span></p>
<p><span style="font-weight: 400">Together, these platform innovations and customer-facing insights ensure you have the resources needed to deliver fast, responsive Lightning Experiences your users expect.</span></p>
<h2><b>Resources</b></h2>
<ul>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/blogs/2023/09/our-detailed-plan-to-improve-lightning-experience-performance"><span style="font-weight: 400">Our Details Plan to Improve Lightning Experience Performance</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/blogs/2024/04/lightning-experience-performance-first-anniversary-results-and-outlook"><span style="font-weight: 400">Lightning Experience Performance: First Anniversary, Results, and Outlook</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/blogs/2024/09/announcing-25-faster-lightning-experience"><span style="font-weight: 400">Announcing 25% Faster Lightning Experience</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/blogs/2025/03/how-salesforce-secures-lightning-performance-gains-by-preventing-regressions"><span style="font-weight: 400">How Salesforce Secures Lightning Performance Gains by Preventing Regressions</span></a></li>
<li style="font-weight: 400"><a href="https://help.salesforce.com/s/articleView?id=xcloud.scale_center_overview.htm&amp;type=5"><span style="font-weight: 400">Scale Center in Salesforce Help</span></a></li>
<li style="font-weight: 400"><a href="https://help.salesforce.com/s/articleView?id=release-notes.rn_scale_center_lex_insights.htm&amp;release=260&amp;type=5"><span style="font-weight: 400">Lightning Experience Insights Generally Available Release Note</span></a></li>
<li style="font-weight: 400"><a href="https://help.salesforce.com/s/articleView?id=xcloud.lex_insights_overview.htm&amp;type=5"><span style="font-weight: 400">Lightning Experience Insights in Salesforce Help</span></a></li>
<li style="font-weight: 400"><a href="https://trailhead.salesforce.com/content/learn/modules/lightning-experience-performance-optimization"><span style="font-weight: 400">Lightning Experience Performance Optimization in Trailhead</span></a></li>
</ul>
<h2><span style="font-weight: 400">About the authors</span></h2>
<p><b>Gery Gutnik</b><span style="font-weight: 400"> is a Senior Director of Product, focusing on the performance and scale of the Salesforce web platform. His work spans Lighting Experience performance, content delivery networks (CDN), and performance observability tools. He can be reached at </span><a href="https://www.linkedin.com/in/gerygutnik/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">. </span></p>
<p><b>Ravi Raina</b><span style="font-weight: 400"> is a Director of Product, working on the Scalability Products portfolio. He can be reached at </span><a href="https://www.linkedin.com/in/raviraina03/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400"> and </span><a href="https://twitter.com/RaviRaina94010"><span style="font-weight: 400">X (Twitter)</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/03/harness-lightning-experience-insights-to-improve-performance">Harness Lightning Experience Insights to Improve Performance</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/03/harness-lightning-experience-insights-to-improve-performance/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205742</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260303154459/Harness-Lightning-Experience-Insights-to-Improve-Performance-e1772577920641.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260303154459/Harness-Lightning-Experience-Insights-to-Improve-Performance-e1772577920641.png?w=1000" medium="image" />
	</item>
	</channel>
</rss>
