@@ -14,6 +14,10 @@ import PROMPT_COMPACTION from "./prompt/compaction.txt"
1414import PROMPT_EXPLORE from "./prompt/explore.txt"
1515import PROMPT_SUMMARY from "./prompt/summary.txt"
1616import PROMPT_TITLE from "./prompt/title.txt"
17+ // altimate_change start - import custom agent mode prompts
18+ import PROMPT_BUILDER from "../altimate/prompts/builder.txt"
19+ import PROMPT_ANALYST from "../altimate/prompts/analyst.txt"
20+ // altimate_change end
1721import { PermissionNext } from "@/permission/next"
1822import { mergeDeep , pipe , sortBy , values } from "remeda"
1923import { Global } from "@/global"
@@ -61,6 +65,19 @@ export namespace Agent {
6165 "*" : "ask" ,
6266 ...Object . fromEntries ( whitelistedDirs . map ( ( dir ) => [ dir , "allow" ] ) ) ,
6367 } ,
68+ // altimate_change start - SQL write safety denials
69+ sql_execute_write : {
70+ "DROP DATABASE *" : "deny" ,
71+ "DROP SCHEMA *" : "deny" ,
72+ "TRUNCATE *" : "deny" ,
73+ "drop database *" : "deny" ,
74+ "drop schema *" : "deny" ,
75+ "truncate *" : "deny" ,
76+ "Drop Database *" : "deny" ,
77+ "Drop Schema *" : "deny" ,
78+ "Truncate *" : "deny" ,
79+ } ,
80+ // altimate_change end
6481 question : "deny" ,
6582 plan_enter : "deny" ,
6683 plan_exit : "deny" ,
@@ -75,6 +92,72 @@ export namespace Agent {
7592 const user = PermissionNext . fromConfig ( cfg . permission ?? { } )
7693
7794 const result : Record < string , Info > = {
95+ // altimate_change start - 3 modes: builder, analyst, plan
96+ builder : {
97+ name : "builder" ,
98+ description : "Create and modify dbt models, SQL, and data pipelines. Full read/write access." ,
99+ prompt : PROMPT_BUILDER ,
100+ options : { } ,
101+ permission : PermissionNext . merge (
102+ defaults ,
103+ PermissionNext . fromConfig ( {
104+ question : "allow" ,
105+ plan_enter : "allow" ,
106+ sql_execute_write : "ask" ,
107+ } ) ,
108+ userWithSafety ,
109+ ) ,
110+ mode : "primary" ,
111+ native : true ,
112+ } ,
113+ analyst : {
114+ name : "analyst" ,
115+ description : "Read-only data exploration and analysis. Cannot modify files or run destructive SQL." ,
116+ prompt : PROMPT_ANALYST ,
117+ options : { } ,
118+ permission : PermissionNext . merge (
119+ defaults ,
120+ PermissionNext . fromConfig ( {
121+ "*" : "deny" ,
122+ // SQL read tools
123+ sql_execute : "allow" , sql_validate : "allow" , sql_analyze : "allow" ,
124+ sql_translate : "allow" , sql_optimize : "allow" , lineage_check : "allow" ,
125+ sql_explain : "allow" , sql_format : "allow" , sql_fix : "allow" ,
126+ sql_autocomplete : "allow" , sql_diff : "allow" ,
127+ // SQL writes denied
128+ sql_execute_write : "deny" ,
129+ // Warehouse/schema/finops
130+ warehouse_list : "allow" , warehouse_test : "allow" , warehouse_discover : "allow" ,
131+ schema_inspect : "allow" , schema_index : "allow" , schema_search : "allow" ,
132+ schema_cache_status : "allow" , schema_detect_pii : "allow" ,
133+ schema_tags : "allow" , schema_tags_list : "allow" ,
134+ finops_query_history : "allow" , finops_analyze_credits : "allow" ,
135+ finops_expensive_queries : "allow" , finops_warehouse_advice : "allow" ,
136+ finops_unused_resources : "allow" , finops_role_grants : "allow" ,
137+ finops_role_hierarchy : "allow" , finops_user_roles : "allow" ,
138+ // Core tools
139+ altimate_core_validate : "allow" , altimate_core_check : "allow" ,
140+ altimate_core_rewrite : "allow" ,
141+ // Read-only file access
142+ read : "allow" , grep : "allow" , glob : "allow" ,
143+ webfetch : "allow" , websearch : "allow" ,
144+ question : "allow" , tool_lookup : "allow" ,
145+ // Bash: last-match-wins — "*": "deny" MUST come first, then specific allows override
146+ bash : {
147+ "*" : "deny" ,
148+ "ls *" : "allow" , "grep *" : "allow" , "cat *" : "allow" ,
149+ "head *" : "allow" , "tail *" : "allow" , "find *" : "allow" , "wc *" : "allow" ,
150+ "dbt list *" : "allow" , "dbt ls *" : "allow" , "dbt debug *" : "allow" ,
151+ } ,
152+ // Training
153+ training_save : "allow" , training_list : "allow" , training_remove : "allow" ,
154+ } ) ,
155+ userWithSafety ,
156+ ) ,
157+ mode : "primary" ,
158+ native : true ,
159+ } ,
160+ // altimate_change end
78161 build : {
79162 name : "build" ,
80163 description : "The default agent. Executes tools based on configured permissions." ,
@@ -260,6 +343,9 @@ export namespace Agent {
260343 return pipe (
261344 await state ( ) ,
262345 values ( ) ,
346+ // altimate_change start - default agent is "builder" not "build"
347+ sortBy ( [ ( x ) => ( cfg . default_agent ? x . name === cfg . default_agent : x . name === "builder" ) , "desc" ] ) ,
348+ // altimate_change end
263349 sortBy ( [ ( x ) => ( cfg . default_agent ? x . name === cfg . default_agent : x . name === "build" ) , "desc" ] ) ,
264350 )
265351 }
0 commit comments