Meeting Title: Brainforge x CTA: Cursor Walkthrough Date: 2026-02-03 Meeting participants: Katherine Bayless, Uttam Kumaran, Kyle Wandel
WEBVTT
1 00:00:05.030 ⇒ 00:00:06.230 Katherine Bayless: There he is.
2 00:00:11.460 ⇒ 00:00:12.580 Uttam Kumaran: Hello!
3 00:00:12.860 ⇒ 00:00:13.760 Katherine Bayless: Oh!
4 00:00:14.300 ⇒ 00:00:16.950 Katherine Bayless: We’ve got a bit of a crowd, so Kai.
5 00:00:16.950 ⇒ 00:00:25.799 Uttam Kumaran: Hey, everyone! Good to see ya. Sorry for the delay, I just, like, just was gonna do a bunch of talking, I was like, oh, I haven’t had coffee yet, let me go grab something.
6 00:00:26.080 ⇒ 00:00:36.399 Katherine Bayless: Yeah, no, I similarly had a lunchtime coffee, and then Kyle’s on his way, finishing lunch, too, and also shooting a database crankiness.
7 00:00:38.770 ⇒ 00:00:40.120 Uttam Kumaran: How’s the day going?
8 00:00:40.940 ⇒ 00:00:51.340 Katherine Bayless: Pretty good. I mean, yeah, I feel like I’ve done nothing overly productive yet, but I’ve scattered several things that if I finish them, it’ll be great.
9 00:00:51.790 ⇒ 00:00:53.680 Uttam Kumaran: Okay, okay, great.
10 00:00:53.680 ⇒ 00:00:57.869 Katherine Bayless: Okay, hang on, let’s see. Kyle said, can I send in the link? Let me send in that.
11 00:00:59.850 ⇒ 00:01:00.939 Katherine Bayless: What about yours?
12 00:01:02.160 ⇒ 00:01:13.639 Uttam Kumaran: Today has been productive, yes. I, I walked through a few cursor things that I want to share through today. I’m just, like, made sure things are set up.
13 00:01:16.120 ⇒ 00:01:23.670 Uttam Kumaran: And… yeah, I’ve just been working on modeling, actually, like, for the last, like, 2 hours or so, so… Okay, nice. Yeah.
14 00:01:24.190 ⇒ 00:01:24.660 Uttam Kumaran: Productive.
15 00:01:25.330 ⇒ 00:01:36.300 Katherine Bayless: Yeah, one of my, like, have-started, haven’t-yet-delivered productivity out of, pieces is the pre-audit data from the registration vendor, and so, like, we’ve got
16 00:01:36.300 ⇒ 00:01:52.239 Katherine Bayless: sort of the cleaned-up version of that data set, and we’re still working on coming to consensus on what the logic should be for the metrics that we pull out of it. We’ve identified a few places where one side thought we were doing one thing and the other thought the other, and so, you know, nice disentanglement, but…
17 00:01:52.240 ⇒ 00:01:59.259 Katherine Bayless: Once we get to that… once we get all that sorted out, then it’s like, I still need to, like, slot that data in, and replace it.
18 00:01:59.260 ⇒ 00:02:03.939 Katherine Bayless: For the other Reg dataset, kind of Indiana Jones, I’m guessing?
19 00:02:03.940 ⇒ 00:02:05.410 Uttam Kumaran: Okay.
20 00:02:06.370 ⇒ 00:02:06.900 Katherine Bayless: So…
21 00:02:06.900 ⇒ 00:02:12.860 Uttam Kumaran: Yeah, my mainly thing today was, like, I think I have everything set up, I can walk everybody through how to…
22 00:02:13.620 ⇒ 00:02:27.530 Uttam Kumaran: set up cursor, access Snowflake. I even got, like, you know, the Asana MCP set up, so I’m able to interact directly with Asana, and… for example, today I was working on some stuff, and.
23 00:02:27.530 ⇒ 00:02:28.520 Katherine Bayless: I was like…
24 00:02:29.070 ⇒ 00:02:35.609 Uttam Kumaran: I would love to create a ticket really quick to… so that it’s tracked, so I don’t have to click through the UI, and so…
25 00:02:37.230 ⇒ 00:02:40.089 Katherine Bayless: He says he’s already set up the Asana MTP. You’ll have to try harder.
26 00:02:45.510 ⇒ 00:02:46.710 Katherine Bayless: No.
27 00:02:47.930 ⇒ 00:02:49.430 Katherine Bayless: Yeah.
28 00:02:50.660 ⇒ 00:02:56.280 Katherine Bayless: I did send the link to Carl, so if we want to… since it’s being recorded, we can dive in, and he’ll jump on.
29 00:02:56.280 ⇒ 00:03:12.530 Uttam Kumaran: Okay, cool. Yeah, I mean, the first thing is, like, I think maybe, Jay, you sent a question about, like, why Cursor? Maybe I could start with, like, why, for data work in particular, we’ve… we’ve been recommending cursor, and we have been using Cursor a lot internally.
30 00:03:12.530 ⇒ 00:03:23.280 Uttam Kumaran: I mean, for data work, it’s a lot of, like, back and forth compared to application development that is, like, go build this thing, and I don’t really care about the inside. It’s, like, a lot of step-by-step
31 00:03:23.380 ⇒ 00:03:31.220 Uttam Kumaran: Querying, seeing results, Aligning logic going back, and so, like, a file-based environment.
32 00:03:31.530 ⇒ 00:03:49.730 Uttam Kumaran: you know, has been really, really nice for that. And you kind of have all the functionality we need, like, we… I think a lot of us are used to writing SQL in some type of IDE anyways, so being able to just interact directly with Snowflake through the CLI, write dbt code.
33 00:03:49.730 ⇒ 00:03:57.070 Uttam Kumaran: use the GitHub CLI to push a PR, is all kind of, like, really, really nice workflow.
34 00:03:57.580 ⇒ 00:04:02.180 Uttam Kumaran: this world is kind of changing pretty fast, so I think as tools come out, we’ll sort of
35 00:04:02.510 ⇒ 00:04:08.970 Uttam Kumaran: Roll with the punches and figure out what’s best, but we’ve been finding it really, really effective for data work, so…
36 00:04:09.530 ⇒ 00:04:10.430 Uttam Kumaran: Yeah.
37 00:04:12.900 ⇒ 00:04:26.119 Uttam Kumaran: I guess, like, today I just wanted to make sure that everybody has, like, Hirscher installed, and I think what I would prefer to do here is almost, like, walk everyone through a few examples of the
38 00:04:26.230 ⇒ 00:04:45.420 Uttam Kumaran: just, like, doing a few tasks, and really, I’d prefer if everybody just tries to do this on their own machine alongside me, so that in case there are questions, or I can walk people through, like, a hiccup, we can do that. Because I know sometimes it can be kind of overwhelming. Does that sound…
39 00:04:46.080 ⇒ 00:04:47.290 Uttam Kumaran: like, fair?
40 00:04:47.900 ⇒ 00:04:57.610 Katherine Bayless: Yeah, I think probably Kyle and Kai can do the follow along. Jay and I probably do the watch, I don’t have to upload it, though. I don’t know if anybody else did that piece.
41 00:04:57.720 ⇒ 00:04:58.350 Katherine Bayless: What part?
42 00:04:58.350 ⇒ 00:05:12.859 Uttam Kumaran: So, maybe Kyle and Kai, yeah, Kyle and Kai, if you want to just make sure you have Cursor installed on your side, and then you’ll have this recording as well, and I can, you know, hop on for any follow-ups, but we can go through that.
43 00:05:13.180 ⇒ 00:05:15.369 Uttam Kumaran: Yeah, I’m downloading it now.
44 00:05:15.600 ⇒ 00:05:16.180 Uttam Kumaran: Okay.
45 00:05:18.410 ⇒ 00:05:19.790 Uttam Kumaran: Okay, perfect.
46 00:05:20.640 ⇒ 00:05:22.690 Katherine Bayless: Where do I download the cursor?
47 00:05:22.690 ⇒ 00:05:30.230 Uttam Kumaran: If you just type in cursor.sh… And it will,
48 00:05:31.520 ⇒ 00:05:33.570 Uttam Kumaran: Give you the website to download it.
49 00:05:34.370 ⇒ 00:05:34.940 Katherine Bayless: Okay.
50 00:05:35.970 ⇒ 00:05:41.480 Katherine Bayless: Probably won’t be able to install.
51 00:05:42.020 ⇒ 00:05:45.690 Kyle Wandel: Because I have a MacBook, it’s a little bit easier for me, though, so…
52 00:05:59.600 ⇒ 00:06:00.459 Katherine Bayless: Yeah, I agree.
53 00:06:00.680 ⇒ 00:06:01.280 Katherine Bayless: Interesting.
54 00:06:01.280 ⇒ 00:06:07.170 Kyle Wandel: I have it open on Customize My Experience. Do you think I can do a team or myself?
55 00:06:08.210 ⇒ 00:06:11.010 Uttam Kumaran: I would just do yourself for now.
56 00:06:11.010 ⇒ 00:06:11.410 Kyle Wandel: Oh, God.
57 00:06:11.410 ⇒ 00:06:15.429 Uttam Kumaran: And then I’m gonna share my screen, so we have this up.
58 00:06:31.310 ⇒ 00:06:32.730 Katherine Bayless: I’m real technical.
59 00:06:34.240 ⇒ 00:06:38.710 Katherine Bayless: Non-optal nature of doing this with 3 people in here.
60 00:06:50.280 ⇒ 00:06:51.500 Kyle Wandel: So.
61 00:06:51.500 ⇒ 00:07:06.270 Uttam Kumaran: If I could just, yeah, I’ll just kind of get started, give the lay of the land. So, cursor is just a view of VS Code. And so, really, like, what you should be, you know, looking at on my screen right now is just… let me just close some of these tabs.
62 00:07:06.290 ⇒ 00:07:13.000 Uttam Kumaran: is really just, like, what you should expect out of a, like, VS Code,
63 00:07:13.030 ⇒ 00:07:27.350 Uttam Kumaran: instance. And so, really what you get is you get your same file structure, you get a place to kind of, like, interact with files, and then you get your agents on the right. So I have a couple things set up here, but
64 00:07:27.350 ⇒ 00:07:39.520 Uttam Kumaran: once everybody has it installed and is able to open up the GitHub repo directly on your machine, you’re gonna actually kind of be in basically the same spot as I am. And so.
65 00:07:39.520 ⇒ 00:07:51.130 Uttam Kumaran: really, it’s like, think about it’s just a ChatGBT that has access to all of the files that you have open here. So, for example, I can say, tell me about the…
66 00:07:51.760 ⇒ 00:07:55.419 Uttam Kumaran: And then what you can do is you can actually use the at symbol to just…
67 00:07:55.870 ⇒ 00:08:01.640 Uttam Kumaran: to just pick, you know, a folder, so tell me about the at CTA folder.
68 00:08:01.850 ⇒ 00:08:09.089 Uttam Kumaran: And I could just ask it that question. It’s gonna go ahead and look through all this.
69 00:08:09.360 ⇒ 00:08:10.540 Uttam Kumaran: And…
70 00:08:11.430 ⇒ 00:08:28.320 Uttam Kumaran: it’ll basically go through, it’s pulling some of that into context, and it’s telling me about what’s in the folder. And so, what is the alternative to this? Typically, is, like, you’re having to drag and drop a bunch of this into ChatGPT, but also for development flow, it’s actually just really nice to have this
71 00:08:28.320 ⇒ 00:08:47.829 Uttam Kumaran: sort of chat window directly overlaid on, you know, any code that you’re working on. So, like, let’s go one step further. One thing that’s really nice, you know, with cursors, you can actually, like, create and interact with files. So, one thing I can say is, I am hosting a cursor workshop
72 00:08:48.130 ⇒ 00:08:50.999 Uttam Kumaran: for the CTA team today.
73 00:08:51.210 ⇒ 00:09:09.250 Uttam Kumaran: please create a brief agenda in the CTA DataOps repo. And so, again, everybody here should fairly be familiar with working with ChatGBT, so it’s very similar. However, because it has access to your file system, it can actually go and create
74 00:09:09.250 ⇒ 00:09:12.480 Uttam Kumaran: files. And so,
75 00:09:12.840 ⇒ 00:09:27.980 Uttam Kumaran: right now, it’s gonna go look through. I have… we have some stuff open from the Brainforge side, which has some helpful information about, like, some of our playbooks, so that’s… that’s what I have open here. But it’s gonna go through and create a cursor workshop,
76 00:09:28.510 ⇒ 00:09:34.949 Uttam Kumaran: agenda. And so you can see that it’s writing that, and as soon as it’s done, I can open it up.
77 00:09:35.090 ⇒ 00:09:41.710 Uttam Kumaran: I have a little markdown file viewer extension And… This is it.
78 00:09:41.890 ⇒ 00:09:51.830 Uttam Kumaran: And so, it’s just… it’s really nice. So, for any type of work where you’re asking questions over files or creating new files, it’s a really great interface to do so.
79 00:09:52.260 ⇒ 00:10:05.720 Uttam Kumaran: as I mentioned here, if I could talk a little bit about some of the bells and whistles that you’re seeing, one is, you’ll see that as we work with Cursor, it’s gonna actually be able to create files, and it’ll indicate, like, this file is new.
80 00:10:05.750 ⇒ 00:10:20.750 Uttam Kumaran: And so, you’ll see that indication in a couple different places to understand, hey, I’ve just edited this file and created it. At the bottom here, you have several different modes. For our use cases, we will mostly be using the agent mode and the planning mode.
81 00:10:20.750 ⇒ 00:10:29.979 Uttam Kumaran: All the planning mode does, it actually just starts with the plan before it executes anything. So, to show you an example of that, if I said, great.
82 00:10:30.270 ⇒ 00:10:37.339 Uttam Kumaran: Create me a plan to, create a slide deck.
83 00:10:37.580 ⇒ 00:10:39.860 Uttam Kumaran: For this meeting.
84 00:10:39.960 ⇒ 00:10:43.890 Uttam Kumaran: Actually, let me just remove these, because it’s gonna get confused a little bit.
85 00:10:48.530 ⇒ 00:11:04.489 Uttam Kumaran: And so, what plan mode does is it’s… it basically indicates to AI, hey, let’s actually plan out what we’re going to do before we do anything. Having that step as part of, like, your development process just allows you to actually
86 00:11:04.490 ⇒ 00:11:09.530 Uttam Kumaran: Map out what you want AI to do before jumping all the way in.
87 00:11:09.530 ⇒ 00:11:18.099 Uttam Kumaran: And so that’s all plan mode does. And so as soon as it’s done looking through things, it’s going to…
88 00:11:18.820 ⇒ 00:11:21.580 Uttam Kumaran: basically create this plan, so let’s just…
89 00:11:22.630 ⇒ 00:11:31.799 Uttam Kumaran: Watch it do that. The additional thing that’s nice about Cursor is if it has questions, it’ll actually ask you for clarifications. So it’s gonna say, do you want this
90 00:11:31.930 ⇒ 00:11:41.700 Uttam Kumaran: What’s… what… what format should the slide deck in? I’m just gonna say, let’s do a markdown outline, and it’s gonna go ahead and work on this plan.
91 00:11:42.660 ⇒ 00:11:52.789 Uttam Kumaran: And there it is. And so, it’s gonna go ahead and say, great, the goal of this project is to produce a slide-by-slide markdown outline in this repo.
92 00:11:53.070 ⇒ 00:11:57.360 Uttam Kumaran: It’s gonna take the agenda we just worked on, create a slide mapping.
93 00:11:57.570 ⇒ 00:12:06.559 Uttam Kumaran: Bunch of bunch of information here, and then it’s like, great, do you want me to go ahead and build this plan? And all the plan is, is, like, we’re creating the outline.
94 00:12:07.410 ⇒ 00:12:20.339 Uttam Kumaran: So I’ll pause there. I just want to make sure everybody’s with me. Is everybody also familiar with, like, using an IDE before, or should we even cover, like, setting up file system? Like, let me know how we’re feeling, like, looking at all this right now.
95 00:12:21.310 ⇒ 00:12:32.490 Kyle Wandel: So, I’ve been using Visual Code for the past, like, couple weeks, basically, to do a similar thing. So, it’s basically… what is, like, the main difference between, like, cursor and Visual Code, then?
96 00:12:33.200 ⇒ 00:12:42.689 Uttam Kumaran: It’s, it’s really, one, is this AI environment, and second, it’s, it’s actually the interaction between the AI environment and the file system.
97 00:12:42.690 ⇒ 00:12:56.500 Kyle Wandel: I’ve actually been able to use, like, actually do exactly what this is doing using Visual Code. It’s actually been pretty interesting. It’s been, like, it’s weird, it’s almost like the exact same setup. It’s not cursor, but it’s Visual Code 2. It’s almost…
98 00:12:56.500 ⇒ 00:13:11.699 Uttam Kumaran: VS Code has this thing called Microsoft Copilot. It’s just okay compared to the functionality in Cursor. So you’ll find Cursor will oftentimes be faster, more accurate, and they’re… the amount of… like, I’ve only covered
99 00:13:11.880 ⇒ 00:13:23.180 Uttam Kumaran: two of the core features. There’s a whole host of different things, from skills to, like, different types of markdown files for instructions to MCPs that aren’t available.
100 00:13:23.620 ⇒ 00:13:40.379 Uttam Kumaran: in VS Code with Copilot, but ultimately, it’s sort of like whatever flavor, like, works best for your workflow. Most of these, like, most of these, like, principles can be applied to any sort of AI-driven development environment.
101 00:13:40.990 ⇒ 00:13:55.840 Kyle Wandel: And maybe I… I mean, I don’t know if I downloaded… I don’t think I downloaded a cursor, like, thing for using Visual Code, but, like, it’s… I think Visual… Visual Code 2, I think, came out relatively recently, and it’s, like, literally almost one-for-one exactly this.
102 00:13:55.840 ⇒ 00:13:58.320 Uttam Kumaran: Well, this is built on VS Code.
103 00:13:58.320 ⇒ 00:13:58.710 Kyle Wandel: Oh, okay.
104 00:13:58.710 ⇒ 00:14:02.750 Uttam Kumaran: for sure is a built on top of VS Code, so it’s gonna look exactly the same.
105 00:14:02.750 ⇒ 00:14:17.319 Kyle Wandel: Yeah, I mean, like, I’m connected to the… I’m connected to the GitHub repo, like, I have the cloud code connected to do basically what the agent’s doing now. It’s basically, like, the only, I guess, the biggest cool difference is, like, it created the MD file, and when you look at it, it actually looks,
106 00:14:17.480 ⇒ 00:14:18.770 Kyle Wandel: Nice, so…
107 00:14:20.240 ⇒ 00:14:35.229 Uttam Kumaran: Yeah, I mean, again, there’s a bunch of things I haven’t demoed. I’ve only been showing, like, 10 minutes worth of stuff, so there’s a whole host of differences between both of them that we can go through. But again, for me, the most important part is that you’re able to use AI to actually help
108 00:14:35.910 ⇒ 00:14:42.540 Uttam Kumaran: do dbt and, like, Snowflake development work. Like, whatever tool you decide to use, it’s… yeah, either way.
109 00:14:47.590 ⇒ 00:14:50.389 Uttam Kumaran: Any other questions so far?
110 00:14:53.110 ⇒ 00:15:01.360 Uttam Kumaran: So one thing that’s also been really helpful for me, and I’ll kind of share some of what I’ve been doing today, is…
111 00:15:01.370 ⇒ 00:15:15.559 Uttam Kumaran: I’m actually working with the Snowflake CLI. And so, I’m using the Snowflake CLI to actually help me create, and query some of the data in Snowflake. And so.
112 00:15:15.780 ⇒ 00:15:21.910 Uttam Kumaran: Instead, the kind of the world was like, I have to kind of go in here, look through,
113 00:15:21.970 ⇒ 00:15:27.050 Uttam Kumaran: like, raw, look through some of the archive data. Instead, I’m actually having
114 00:15:27.090 ⇒ 00:15:39.759 Uttam Kumaran: Snowflake and Cursor work together to actually go pull and find information for me, and so one recommendation I have for everybody, is to actually just make sure that you can install the Snowflake
115 00:15:39.760 ⇒ 00:15:49.369 Uttam Kumaran: CLI within your machine, and I’ll share… send a link to that. But really, as long as you just send this into,
116 00:15:50.110 ⇒ 00:16:03.640 Uttam Kumaran: if you just send this into Cursor or VS Code, it will help you install this, and really what this is gonna allow is just the ability for, you to actually use natural language to query Snowflake.
117 00:16:03.640 ⇒ 00:16:10.430 Uttam Kumaran: And so the CLI is just the command line interface to issue queries, and so you can actually
118 00:16:10.620 ⇒ 00:16:27.150 Uttam Kumaran: basically go from natural language to Snowflake queries. So, for example, like, today I was… I was using it to create… for creating some views once I was able to arrive at, like, a clean registrations table. Instead, I… previous world, I would have either had to A install dbt.
119 00:16:27.150 ⇒ 00:16:34.249 Uttam Kumaran: on my machine to, like, execute the orchestration, or copy-paste it into the UI to basically run this.
120 00:16:34.250 ⇒ 00:16:47.949 Uttam Kumaran: So now I’ve been able to sort of speed that process up by being able to just write the query directly here, which has been really, really nice. And so you can see today, I’ve been working on several different, models
121 00:16:47.950 ⇒ 00:17:01.619 Uttam Kumaran: for example, like, this registration model, I’ve been kind of iterating on it here. Once it’s done, I can have Snowflake actually say, okay, go ahead and create this in CES registrations with attendees model.
122 00:17:01.980 ⇒ 00:17:08.130 Uttam Kumaran: It’s gonna go ahead and create a view, and then within, Snowflake, if I can find…
123 00:17:08.970 ⇒ 00:17:11.250 Uttam Kumaran: Where that went…
124 00:17:14.339 ⇒ 00:17:16.609 Uttam Kumaran: Sorry, I have so many views open.
125 00:17:22.480 ⇒ 00:17:31.889 Uttam Kumaran: Okay, let me reopen Snowflake. But within Snowflake, basically, I can go ahead and actually find the view that it created, and…
126 00:17:32.060 ⇒ 00:17:49.510 Uttam Kumaran: what I’ve… I basically have saved, like, probably 5 or 10 minutes of time, and sort of going back and forth between those pieces. And so if I open up Snowflake here, you’re gonna see that, under my, under Dev Intermediate.
127 00:17:49.610 ⇒ 00:17:58.010 Uttam Kumaran: And until my first name underscore dev, you’re actually gonna see my int CES registrations with attendance here.
128 00:17:58.020 ⇒ 00:18:14.490 Uttam Kumaran: And we can actually see that it was able to create the view here. So I was actually able to do this without really having to actually go into the Snowflake UI and execute this create command, which, for a developer like me, is actually… it’s, like, just so tedious to have to go.
129 00:18:14.490 ⇒ 00:18:27.319 Uttam Kumaran: when you’re locally developing, they have to go back and forth just to test out models. And so, this is a clear area where I’ve particularly found a lot of help speeding it up. There’s still some things that I can’t,
130 00:18:27.550 ⇒ 00:18:44.839 Uttam Kumaran: hand off to AI, right? So I’m still thinking about, okay, what were the initial requirements from the, report that we need to develop? I’m still understanding the joins, still creating the structure, but I am having AI sort of help smooth it out after I have the overall plan.
131 00:18:46.350 ⇒ 00:18:53.539 Uttam Kumaran: Does that make sense? And I can send out this Snowflake CLI, but I think, as Kyle mentioned, it’s very helpful to have access to Snowflake.
132 00:18:53.660 ⇒ 00:19:03.780 Uttam Kumaran: have access to the GitHub CLI as well. And then, as long as you have both of those, you’ll be able to interact within the entire development workflow pretty easily.
133 00:19:03.950 ⇒ 00:19:14.340 Kyle Wandel: Yeah, adding the Snowflake CLI is a really good idea. I haven’t done that yet, so I definitely need to do that. It’s a really cool capability, because you’re right, it saves, like, 5 to 10 minutes per pipeline, at least.
134 00:19:14.340 ⇒ 00:19:15.240 Uttam Kumaran: Yeah.
135 00:19:18.770 ⇒ 00:19:28.400 Kyle Wandel: And it basically, just so I understand in this, it doesn’t necessarily… I mean, I guess you can create or replace the view itself directly in Snowflake, but it also… you also query from it as well, just to test it?
136 00:19:29.230 ⇒ 00:19:40.880 Uttam Kumaran: Yes, so you can query, and it’ll pull in, data if you want to test it. Sometimes, again, it may be helpful for me, sometimes I just like to see it to kind of see certain joins or see the values.
137 00:19:40.880 ⇒ 00:19:41.300 Kyle Wandel: Yep.
138 00:19:41.300 ⇒ 00:19:49.379 Uttam Kumaran: But certainly, once you have all the information, I’ve been using Cursor to assist me with… with actually putting together the model itself.
139 00:19:49.720 ⇒ 00:19:50.310 Kyle Wandel: Yep.
140 00:19:50.780 ⇒ 00:19:52.020 Uttam Kumaran: And then… e…
141 00:19:52.020 ⇒ 00:19:52.340 Kyle Wandel: Ms.
142 00:19:52.340 ⇒ 00:19:52.710 Uttam Kumaran: You’re not.
143 00:19:52.710 ⇒ 00:20:08.490 Kyle Wandel: Sorry, just to clarify. So, like, basically a pipeline or a workflow would be, you kind of generate the SQL code in, Snowflake CI, CLI, and then you kind of, once you have what you kind of have your final version, then you create the pipeline off of it using, the cursor CLI.
144 00:20:08.740 ⇒ 00:20:13.480 Uttam Kumaran: Yeah, so I’m actually… it’s actually a little bit different. So I’m starting by writing
145 00:20:13.600 ⇒ 00:20:26.529 Uttam Kumaran: parts of this in Snowflake. Like, I’m doing some data exploration, I’m understanding, like, the key fields, the key joins, and then I move into Cursor, and I say, okay, here’s, like, the rough skeleton of, like, the…
146 00:20:26.670 ⇒ 00:20:35.839 Uttam Kumaran: the final table I need to arrive at. I’m gonna work with it to actually, one, create the dbt models that are relevant, and then second.
147 00:20:35.920 ⇒ 00:20:42.970 Uttam Kumaran: for testing, right, for me and our current environment, like, I’m… I need to, for example, in this case, I want to send Kyle
148 00:20:42.990 ⇒ 00:21:02.850 Uttam Kumaran: like, I want to send you a few views to go poke at and look at the GoQA, basically, make sure, before I create a PR and, like, kind of merge this so it’s picked up by GitHub. So I can actually do a lot of that, create this in my dev environment, send to you, be like, hey, can you just go double check that this has everything we need?
149 00:21:03.000 ⇒ 00:21:07.220 Uttam Kumaran: And then if I get the thumbs up from you, I can go ahead and push a PR
150 00:21:07.390 ⇒ 00:21:11.260 Uttam Kumaran: So we can get that reviewed, and once the PR is in GitHub.
151 00:21:11.610 ⇒ 00:21:14.839 Uttam Kumaran: we have a GitHub action that is running dbt on Snowflake.
152 00:21:15.020 ⇒ 00:21:30.829 Uttam Kumaran: But however, like, I’m… I’m not really concerned… I don’t… as a developer in this stage, I don’t really need to care about dbt or anything. My whole world is just in this model folder, and in just making sure that it executes properly and the QA is right.
153 00:21:30.830 ⇒ 00:21:43.270 Uttam Kumaran: So, like, I kind of wanted to separate out the fact that developers have to think about dbt and pipelines and orchestrations, really just focusing on, like, the model logic is really the primary goal here.
154 00:21:44.610 ⇒ 00:21:54.840 Uttam Kumaran: Because oftentimes, those things can just cause other issues, like having to think about how it’s executed, or where to execute it. So hopefully, like, our structure in being able to have dev marts.
155 00:21:55.040 ⇒ 00:22:09.589 Uttam Kumaran: and we actually have a lot of this instruction in how to use this within the repo, so that your cursor or your VS Code will actually pick that up and understand naturally where to put information as it goes.
156 00:22:09.810 ⇒ 00:22:31.800 Kyle Wandel: Yep. I mean, I really ran into issues, but luckily I didn’t… I mean, I didn’t commit anything to GitHub, but I went down the rabbit hole a little bit too much, and it basically used… like, I was like, I quote-unquote cleaned the README, and then it used the README to create all these various schemas, and so I was like, oh, crap, okay. And so then I was able to basically stash what I did beforehand and go back to reverse state, but
157 00:22:31.800 ⇒ 00:22:45.489 Kyle Wandel: Yeah, it’s… I was telling Catherine, it’s incredibly powerful. If you… if you load up that README correctly, it does basically everything for you, which is nice. You definitely have to verify the logic and make sure that you’re basically building the logic itself.
158 00:22:45.590 ⇒ 00:22:48.899 Kyle Wandel: But, like, it creates the pipeline very well.
159 00:22:48.900 ⇒ 00:22:49.450 Uttam Kumaran: Yes.
160 00:22:49.450 ⇒ 00:22:50.060 Kyle Wandel: Yeah.
161 00:22:51.140 ⇒ 00:23:09.290 Uttam Kumaran: Yeah, so, like, another thing today is, like, I was… I gave it a lot of, like, our internal information, for how we set up role-based access control and governance, and so I built a plan to actually help me add that to the repo. And so, you’re totally right, as best as you can keep the documentation up to date.
162 00:23:09.290 ⇒ 00:23:16.820 Uttam Kumaran: in the repository, it helps the next person who’s going to be using an agentic IDE to develop on top of it.
163 00:23:16.820 ⇒ 00:23:34.830 Uttam Kumaran: And so, I also agree that as much as you can keep the README file up to date, or… and keep things in the place that they need, it will help a lot. But also, like, as things get pushed to PR, we’ll all be reviewing, and so we’ll make sure that at the review step, there’s a human reviewer that kind of makes sure that
164 00:23:34.840 ⇒ 00:23:36.489 Uttam Kumaran: So that things are clean.
165 00:23:36.550 ⇒ 00:23:55.040 Uttam Kumaran: But my thing, my recommendation, you know, also, for both you and Kyle and Kai, is just to keep trying and hit me if you have any questions. Like, I know sometimes the ergonomics of, like, using this can be a little bit tough, or if you’re not exact… if you’re like, hey, I’m trying this, and it never, like.
166 00:23:55.040 ⇒ 00:23:56.700 Uttam Kumaran: figures it out, right? Like.
167 00:23:56.700 ⇒ 00:24:05.589 Uttam Kumaran: just let me know. We’ve been using Cursor now for, like, almost, like, a year, year and a half, for, like, a variety of use cases, so more than happy to share, like, how I’m…
168 00:24:05.600 ⇒ 00:24:13.389 Uttam Kumaran: using it in certain situations, because some of it, you just kind of have to learn the hard way after trying, and I’m happy to help you shortcut that.
169 00:24:15.520 ⇒ 00:24:18.290 Kyle Wandel: Yeah, I definitely, like I said, I probably…
170 00:24:18.580 ⇒ 00:24:24.010 Kyle Wandel: I’m so glad that I’m starting to engineer while these tools are available now, because this is an incredible tool.
171 00:24:24.010 ⇒ 00:24:26.070 Uttam Kumaran: Yes, basically.
172 00:24:26.070 ⇒ 00:24:28.769 Kyle Wandel: And yeah, Cursor’s definitely ahead of the game, because VS Code.
173 00:24:28.770 ⇒ 00:24:40.789 Uttam Kumaran: It was… it’s… life is so… life was so painful for a long time. Like, most of my career is, like, copying and pasting SQL files and, like, running it, or waiting for things to run.
174 00:24:41.140 ⇒ 00:24:59.640 Uttam Kumaran: And then, like, it’s just that, and so this has solved a lot of that, you know, which has made it really nice. But, again, like, it doesn’t know all the context and the inside baseball that we know, and so that’s what we have to bring to the table often. So you’ll find, like, the output is really as good as your planning step and your prompts.
175 00:25:00.250 ⇒ 00:25:01.109 Uttam Kumaran: you know.
176 00:25:02.060 ⇒ 00:25:07.090 Kyle Wandel: Understanding that business logic is 100% the most important aspect of it right now.
177 00:25:07.370 ⇒ 00:25:08.040 Uttam Kumaran: Yeah.
178 00:25:14.440 ⇒ 00:25:21.730 Uttam Kumaran: Any other… Questions, or my recommendation for everybody is maybe try to take
179 00:25:21.930 ⇒ 00:25:27.420 Uttam Kumaran: 20, 30 minutes today, and install this, and see if you can kind of get to the point where you’re able to
180 00:25:27.580 ⇒ 00:25:45.369 Uttam Kumaran: do some of this, or hit me if you have… if you’re not able to get there, and I can hop on and show you, but again, I think being able to have a Snowflake CLI available and having your GitHub set up is really the core piece, and you should be off to the races for the most part.
181 00:25:50.250 ⇒ 00:25:51.909 Katherine Bayless: Okay, I have, like, a million questions.
182 00:25:51.910 ⇒ 00:25:52.240 Uttam Kumaran: Okay.
183 00:25:52.240 ⇒ 00:25:55.950 Katherine Bayless: not necessarily about, like, using Cursor, more just, like, about our workflows and stuff.
184 00:25:55.950 ⇒ 00:25:56.270 Uttam Kumaran: Sure.
185 00:25:56.270 ⇒ 00:26:01.369 Katherine Bayless: But, if there are others that have, yeah, I mean,
186 00:26:01.540 ⇒ 00:26:15.119 Katherine Bayless: So, to your point about the context, I’m kind of curious, like… I mean, I guess, like, not every, you know, chat thread around writing code is going to be useful, but, like, part of me almost wonders, like, if there’s
187 00:26:15.270 ⇒ 00:26:25.429 Katherine Bayless: you know, some value to, you know, future agentic coding, people. Like, these… these chats as they happen. Like, I know they get kind of, like, logged where you can go back to previous chats, but it’s almost like.
188 00:26:25.430 ⇒ 00:26:25.790 Uttam Kumaran: S.
189 00:26:25.790 ⇒ 00:26:39.520 Katherine Bayless: spark, like, that journey through the data in the repo as part of it. Like, maybe not the, like, raw chat, but, like, at the end of it, have a step that’s like, you know, summarize all of the back-and-forth thing that we did, and that kind of thing.
190 00:26:39.940 ⇒ 00:26:46.790 Uttam Kumaran: Yeah, so let me show you a couple of things. When we set up this repo for you, we added
191 00:26:46.840 ⇒ 00:26:54.100 Uttam Kumaran: several of these sort of files that allow us to help steer your cursor or your clog code
192 00:26:54.100 ⇒ 00:27:09.400 Uttam Kumaran: or your Windsurf, or your VS Code, and give it direction, no matter who’s using it. And there are some now more universal standards, like AgentsMD files, that allow us to sort of work with some type of shared context and shared direction.
193 00:27:09.400 ⇒ 00:27:27.089 Uttam Kumaran: So, we created a little bit of an agent guide on how to use the repo. Some of this we need to update, frankly, as the repo has changed, but there’s a lot of stuff in here. Additionally, as we’ve been doing discovery, I’ve been adding to this large discovery wiki.
194 00:27:27.090 ⇒ 00:27:41.480 Uttam Kumaran: And so there is a lot here on everything that we’ve found so far, on all the different work streams that we’ve sort of been involved in. This is the example, I think, Catherine, of, like, this is the shared
195 00:27:41.510 ⇒ 00:27:56.140 Uttam Kumaran: this is, like, basically now a wiki for any of the AI to understand, like, what is going on at CTA, what are all the systems, right? And so this document is pretty large. And it has progress and things like that, so really, like, I wanted to set
196 00:27:56.140 ⇒ 00:28:05.610 Uttam Kumaran: a couple of these up, so that now, as we start to develop and we figure out our team’s development process, you’re exactly right. Like, these should get… these should get,
197 00:28:05.680 ⇒ 00:28:19.749 Uttam Kumaran: updated as more and more development happens. Naturally also, though, like, as we push stuff to GitHub, we can always pull those PRs down and update these README files and these wiki files, but that’s exactly, like, what we’ve been doing.
198 00:28:19.750 ⇒ 00:28:25.850 Uttam Kumaran: The other piece that’s, that’s helpful is to have documents that, the actual
199 00:28:26.100 ⇒ 00:28:41.869 Uttam Kumaran: cursor or other agentic environments can read to go find out where to go. Otherwise, every time you’re trying to do something, it’s gonna scan and sort of learn this. Instead, if it can go to one README file, be like, okay, I understand what this repo is about, I understand what CTA is about, I understand what our goals are.
200 00:28:41.870 ⇒ 00:28:49.000 Uttam Kumaran: I can now direct the user. So this is where they’re happening. It’s going to be a mix of README files, agents, MD files.
201 00:28:49.040 ⇒ 00:28:56.189 Uttam Kumaran: And I’m… there’s a… I think both Cursor and Claude Code have great documentation on how to leverage
202 00:28:56.440 ⇒ 00:28:59.659 Uttam Kumaran: you know, the creation of these markdown files for
203 00:28:59.810 ⇒ 00:29:02.190 Uttam Kumaran: Creating this, like, shared context, basically.
204 00:29:05.270 ⇒ 00:29:05.710 Katherine Bayless: It makes me feel.
205 00:29:05.710 ⇒ 00:29:10.300 Uttam Kumaran: The one thing we can do is we can add a step to the agent’s MD file that says.
206 00:29:10.660 ⇒ 00:29:16.420 Uttam Kumaran: after every PR is pushed, make sure to update the wiki, or… we can start to add those rules in.
207 00:29:17.500 ⇒ 00:29:30.959 Katherine Bayless: Yeah, yeah, yeah, and I mean, I think it’s specifically, like, some of that, like, corrective back and forth that’s, like, happening as you’re doing the EDA and figuring out the joins and all that stuff, like, I mean, some of the articles that you had shared, too, kind of call this out, right, where it’s, like.
208 00:29:30.960 ⇒ 00:29:40.510 Katherine Bayless: you want to train the AI not just on, like, you know, the context and the correct answer, but, like, also all of the things that weren’t correct but were learned, like, along the way, so that it can…
209 00:29:40.510 ⇒ 00:29:43.520 Katherine Bayless: Yeah. From those gotchas and stuff, too.
210 00:29:43.520 ⇒ 00:29:44.160 Uttam Kumaran: Yeah.
211 00:29:44.430 ⇒ 00:30:09.329 Katherine Bayless: I’m also curious, okay, so the other question I had, more for Kai, to a certain extent, like, I know we’ve talked about parking sort of canonical, like, definitions or logic, or even maybe benchmarks. I think we could potentially get towards that, in the repo, so that, you know, there is sort of the official definition of attendee, for example, versus registrant and that kind of thing. So, like, how do you envision that structure being incorporated into this?
212 00:30:10.640 ⇒ 00:30:18.159 Uttam Kumaran: Yeah, so for me, I think the biggest piece is gonna be trying to use this concept that Snowflake has of, like, semantic
213 00:30:18.290 ⇒ 00:30:22.580 Uttam Kumaran: Semantic views, and basically try to leverage
214 00:30:22.800 ⇒ 00:30:26.139 Uttam Kumaran: Column level and table level definitions.
215 00:30:26.400 ⇒ 00:30:33.830 Uttam Kumaran: much heavier. So that that stays in the warehouse layer to understand the relationships and, like, what
216 00:30:34.050 ⇒ 00:30:38.869 Uttam Kumaran: like, basically, like, what is… what is a metric? Like, all those definitions.
217 00:30:39.090 ⇒ 00:30:41.399 Uttam Kumaran: I’m speaking with the Snowflake team
218 00:30:41.710 ⇒ 00:30:52.290 Uttam Kumaran: later this week, a little bit about how best to use this and scale this up, so I should have some more information, but this is what they’ve recommended that we take a look at for
219 00:30:52.410 ⇒ 00:30:57.800 Uttam Kumaran: putting in all that semantic information. Ideally, we want this to be…
220 00:30:57.950 ⇒ 00:31:11.119 Uttam Kumaran: either in Snowflake or in this repo, but having it in Snowflake, and is that… and having it being something that, like, can get updated more automatically is something we’re just gonna have to think about a little bit more.
221 00:31:11.690 ⇒ 00:31:25.159 Uttam Kumaran: I think this is, like, a little bit new, where I’m kind of thinking about what’s best, because, for example, we are… we also have models here. So, I think an internal debate we’re having is, like, how much documentation should go here.
222 00:31:25.180 ⇒ 00:31:33.580 Uttam Kumaran: Or how much documentation should be on the actual thing in Snowflake, and then maybe the CLI pulls from that?
223 00:31:33.690 ⇒ 00:31:39.270 Uttam Kumaran: I’m not… 100% sure yet. But…
224 00:31:39.780 ⇒ 00:31:46.740 Uttam Kumaran: I think, like, for example, for BI tools, right, like, let’s say we go with an BI tool that’s more agentic.
225 00:31:47.220 ⇒ 00:31:51.789 Uttam Kumaran: maybe it’s… if it has a deep integration with Snowflake, it can actually go pull those
226 00:31:51.930 ⇒ 00:31:54.590 Uttam Kumaran: things directly from Snowflake semantic views.
227 00:31:54.800 ⇒ 00:32:01.069 Uttam Kumaran: it may not be able to have access to these… the GitHub repo and the specific definitions. I’m not sure.
228 00:32:01.430 ⇒ 00:32:02.130 Katherine Bayless: Yeah.
229 00:32:02.330 ⇒ 00:32:05.090 Katherine Bayless: And it’s like, we live in exciting times.
230 00:32:05.090 ⇒ 00:32:16.659 Uttam Kumaran: Yeah. So, like, for example, we can put in descriptions here on the columns themselves, we can put in descriptions. The nice thing is, like, I want to use a CLI to help us keep all this
231 00:32:16.910 ⇒ 00:32:26.039 Uttam Kumaran: do it, but then also keeping it up to date is another thing. And then second is, like, so even to show you an example is, like, we’re…
232 00:32:26.400 ⇒ 00:32:33.350 Uttam Kumaran: In our data platform documentation, we can have metrics there as well, so part of it is, like.
233 00:32:34.330 ⇒ 00:32:42.529 Uttam Kumaran: Does this need to just live in Snowflake? Does this need to live in something that’s more business-facing as well, so people can see those definitions?
234 00:32:42.870 ⇒ 00:32:52.709 Uttam Kumaran: Yeah, I think it’s all… before, like, right, it was so hard to maintain column-level documentation and things like that, so nobody… I’ve never seen anybody use this significantly.
235 00:32:52.970 ⇒ 00:33:03.169 Uttam Kumaran: now, I think it’s becoming more relevant. So there is a… there is a thing about, like, hey, should we actually keep this in the spreadsheet, or should this be moved into something
236 00:33:04.160 ⇒ 00:33:07.629 Uttam Kumaran: That’s, like, more programmatic like this, that could be accessed programmatically.
237 00:33:08.310 ⇒ 00:33:24.680 Katherine Bayless: Yeah, totally. But I think, too, I mean, like, you know, obviously, same problem at every organization, but, you know, one of the things I’ve come across going through the pre-audit versus raw data is, like, it turns out there are several flavors of, senior executives, and, like, each use case wants, you know.
238 00:33:25.300 ⇒ 00:33:40.799 Katherine Bayless: definition, that kind of thing. And so, yeah, like, I think figuring out how to, like, give AI not just the definition of senior executive in all three flavors, but also, like, that context around, like, okay, is the person asking from marketing? Alright, well, they’re probably looking for this definition.
239 00:33:40.800 ⇒ 00:33:41.170 Uttam Kumaran: Yeah.
240 00:33:41.170 ⇒ 00:33:54.579 Katherine Bayless: They tend to measure. I mean, like, yeah, these are the things I want to kind of build towards for the future sort of thing. But yeah, like, just parsing all of that nuance around, like, who’s asking, and what’s it for, and then what’s the definition, and where’s the data?
241 00:33:55.500 ⇒ 00:33:56.240 Uttam Kumaran: Yeah.
242 00:33:56.770 ⇒ 00:34:01.220 Katherine Bayless: I’m curious, too, like, in terms of…
243 00:34:01.660 ⇒ 00:34:15.259 Katherine Bayless: behavioral governance, if you will, on the agents, like, like, especially as the code base gets bigger, like, right now we’re building so many things that just don’t exist yet, and so we’re fairly safe, but, like, as we get…
244 00:34:15.260 ⇒ 00:34:27.189 Katherine Bayless: more and more into this, like, we’ll wind up in scenarios where we probably will be wanting to, like, model a dataset that’s, like, either we’ve already kind of modeled something very similar, or it contains a component that should really.
245 00:34:27.199 ⇒ 00:34:27.649 Uttam Kumaran: Sure.
246 00:34:27.659 ⇒ 00:34:46.260 Katherine Bayless: part of. Actually, the DIM organization question from the planning last week is a good one to use as an example here. Like, if we start bringing in different data sets, but they still have companies, like, how good is this thing gonna be at saying, like, aha, these need to go in DIM organization versus creating another table?
247 00:34:46.710 ⇒ 00:34:47.830 Uttam Kumaran: Yeah, so…
248 00:34:48.080 ⇒ 00:35:04.829 Uttam Kumaran: I think there’s two ways to think about it. One is, like, similarly, like, how you’d use ChatGPT and you would say, you’re an expert dbt person, like, you can assume that all of that is already happening, meaning it’s gonna leverage data modeling best practices and dbt best practices, and more often than not.
249 00:35:05.150 ⇒ 00:35:09.480 Uttam Kumaran: what I’m seeing, its behavior, it will look for things before it just starts to build.
250 00:35:09.730 ⇒ 00:35:29.599 Uttam Kumaran: However, we will… we will also layer on within the agent’s MD file, best practices. For example, if we’re confident that, hey, go check out the models in Martz before building anything, so you’re skipping redundancies, we’ll just put… we’ll literally put that in there. And the agent’s MD file gets read every single time.
251 00:35:29.760 ⇒ 00:35:34.070 Uttam Kumaran: And so it becomes, like, sort of the policy files for any…
252 00:35:34.450 ⇒ 00:35:45.950 Uttam Kumaran: future thing, feature agent that, like, is reading from the repo. And so, like, if I could just pull, like, this document up, for example, there’s several different ways to do rules within
253 00:35:45.950 ⇒ 00:35:55.160 Uttam Kumaran: cursor, but again, this is sort of universal across plot code and everything. They’ve all agreed to sort of respect this, like, agent’s MD, so there’s…
254 00:35:55.160 ⇒ 00:36:12.289 Uttam Kumaran: project rules, you could do user rules, you could do stuff that’s just, like, this is just a simpler alternative that isn’t cursor-specific. So, like, for example, we would probably start… we would just continue to use this instead of anything that’s cursor-specific. And, yeah, you can put everything in there, like.
255 00:36:12.360 ⇒ 00:36:15.220 Uttam Kumaran: They have a lot of examples here, like.
256 00:36:15.470 ⇒ 00:36:33.000 Uttam Kumaran: different ways to always use a certain framework, or always style things in a certain way, or after pushing… before pushing a PR, almost having it as, like, a linting step. So, you can add all of these directly to the agent’s MD file, and…
257 00:36:33.000 ⇒ 00:36:51.210 Uttam Kumaran: that’s probably what I would continue to suggest. We don’t, like, we don’t have yet, like, a standard dbt modeling agents MD file. We do have a standard boilerplate repo, like, that’s… which is, like… but I think we’re just now getting to the point where we have some understanding of how to
258 00:36:51.240 ⇒ 00:36:52.699 Uttam Kumaran: Best do this, but…
259 00:36:52.990 ⇒ 00:37:04.190 Uttam Kumaran: it’s just gonna be that, like, we… as… as I think the people managing the platform are understanding how different users are using, we should just update the agents of default with the policies that we wanted others to follow.
260 00:37:06.740 ⇒ 00:37:10.539 Katherine Bayless: Yeah, rules. Intriguing. Have you played with rules?
261 00:37:10.790 ⇒ 00:37:28.169 Katherine Bayless: Have I played with rules yet? Does it listen to rules? No. I know, that’s why I’m like, Jay’s always like, this dumb thing never listens to any of the rules I give it, but, like, this idea of a formal rule structure is interesting. I’m using hooks now to basically stop it from doing dumb things.
262 00:37:28.380 ⇒ 00:37:29.660 Katherine Bayless: It’s… yeah.
263 00:37:29.660 ⇒ 00:37:38.870 Uttam Kumaran: Yeah, I mean, I’m finding it, like, it’s usually pretty respective of it, but I’m using cursor for pretty narrow tasks, like, rarely am I letting it
264 00:37:39.270 ⇒ 00:37:46.060 Uttam Kumaran: run, like, endless. You know, I’m usually coming in and just having it speed up piecemeal by piecemeal.
265 00:37:46.370 ⇒ 00:37:49.419 Uttam Kumaran: So, for that reason, it’s… it’s pretty… it’s been pretty good.
266 00:37:51.210 ⇒ 00:37:51.980 Uttam Kumaran: Yeah.
267 00:37:54.400 ⇒ 00:38:00.999 Katherine Bayless: Okay, different question. So, you mentioned the Asana MCP.
268 00:38:01.310 ⇒ 00:38:01.950 Uttam Kumaran: Yes.
269 00:38:02.400 ⇒ 00:38:04.480 Katherine Bayless: Can we dig into that a little bit?
270 00:38:04.650 ⇒ 00:38:06.780 Uttam Kumaran: Yes, so,
271 00:38:07.560 ⇒ 00:38:26.149 Uttam Kumaran: So I actually, look, today before this meeting, I wanted to go check whether that existed, because I have been late to create some tickets in our Asana board, and so I actually… I basically, sent in the link for Asana’s MCP, which I will pull up.
272 00:38:26.350 ⇒ 00:38:31.810 Uttam Kumaran: And I just, basically…
273 00:38:32.650 ⇒ 00:38:49.440 Uttam Kumaran: had Cursor follow the instructions on the website and actually help me install it. And so, on our side, where you can see that is, really, all you need to do is go in here and say, please help me install the Sana MCP, and you can just copy and paste this,
274 00:38:50.140 ⇒ 00:38:54.670 Uttam Kumaran: this URL in, and it will… it will help you do that. And so…
275 00:38:54.700 ⇒ 00:39:13.289 Uttam Kumaran: common… what basically I’m finding is anytime where I’m doing something manual, I should just see if cursor can do it automatically for me. But basically what it’s doing is there’s an MCP file as part of your cursor settings, and if you go here to settings and MCP, I have a bunch for a bunch of tools that we use.
276 00:39:13.290 ⇒ 00:39:21.479 Uttam Kumaran: But you have Asana here enabled. And so, basically, it now has access to all of these various tools. Of course.
277 00:39:21.490 ⇒ 00:39:27.009 Uttam Kumaran: I’m just really using, like, the GET project or workspace, and GET and Create.
278 00:39:27.180 ⇒ 00:39:28.860 Uttam Kumaran: tasks.
279 00:39:30.060 ⇒ 00:39:44.249 Uttam Kumaran: And so here’s a good example of, what I needed to do today, which is I just wanted to confirm it was working, and then I’ve been working on some models, and so I just said, hey, can you help? I’m, like, late on creating some models, can you just help… can you just check if
280 00:39:44.250 ⇒ 00:39:50.409 Uttam Kumaran: They already exist for some of these tickets, and if not, can you just make sure to put them in progress for the ones that we’re working on today?
281 00:39:50.410 ⇒ 00:39:56.869 Uttam Kumaran: And it started to go through it. It’s running these MCPs, which is, like, great.
282 00:39:56.960 ⇒ 00:40:01.200 Uttam Kumaran: You mentioned that you’re looking at the CTA workspace,
283 00:40:01.300 ⇒ 00:40:12.500 Uttam Kumaran: It’s gonna look at the work items that we’re already working on, it’s gonna check to see whether those tasks already exist, and it’s gonna create those tasks, and then it looks like it…
284 00:40:12.650 ⇒ 00:40:15.650 Uttam Kumaran: it just did that. So,
285 00:40:16.330 ⇒ 00:40:21.659 Uttam Kumaran: We have the CTA weekly sync, cursor demo, and then I think it’s…
286 00:40:22.380 ⇒ 00:40:34.769 Uttam Kumaran: I mean, I feel like it maybe created some tasks based on our last transcript. I just pushed this before we hopped on the meeting, but if we go into the project, we should be able to see that these tasks have
287 00:40:35.010 ⇒ 00:40:38.980 Uttam Kumaran: Now been made.
288 00:40:42.640 ⇒ 00:40:43.310 Uttam Kumaran: Yes.
289 00:40:46.670 ⇒ 00:40:59.380 Uttam Kumaran: So, for my workflow, I’m basically not gonna start work until anything is tracked in Asana. And so, usually what I do is I said, hey, today, I start… I start a new chat, and I said.
290 00:40:59.830 ⇒ 00:41:07.009 Uttam Kumaran: Today, I like to work on modeling Like, badge scan data?
291 00:41:08.130 ⇒ 00:41:12.420 Uttam Kumaran: start by creating an Asana ticket.
292 00:41:13.380 ⇒ 00:41:20.000 Uttam Kumaran: For this… And I don’t know if we have branches already… hooked into Asana.
293 00:41:20.760 ⇒ 00:41:36.059 Uttam Kumaran: But if possible, then I would say check out the relevant Asana branch so they get linked to the PR. And then I just say go, and then it goes ahead and does that, checks out the branch for me, and then I’m, like, ready to go. So, I just try to do that habitually as a first step.
294 00:41:36.250 ⇒ 00:41:45.300 Uttam Kumaran: We could also add that to the agent’s file, say, you shouldn’t work on anything without having an associated Asana ticket, please make sure that there is one before starting any work.
295 00:41:45.630 ⇒ 00:41:50.190 Uttam Kumaran: And so, it’s… it’s been pretty good.
296 00:41:50.780 ⇒ 00:41:54.719 Katherine Bayless: Yeah. Yeah, we used to enforce that on PRs at my old place, like, if…
297 00:41:54.720 ⇒ 00:41:58.360 Uttam Kumaran: Same, yeah, for the branch name and ticket association, yeah.
298 00:41:58.360 ⇒ 00:42:02.680 Katherine Bayless: Yeah, like, you couldn’t push anything unless it was linked to the ticket and everything.
299 00:42:02.680 ⇒ 00:42:04.159 Uttam Kumaran: I think it’s fair.
300 00:42:04.160 ⇒ 00:42:20.579 Katherine Bayless: Yeah, no, totally, right? I mean, it encourages good behavior. I also think, like, I know the Asana board is young at the moment, but, like, as it continues to build out, like, I think it’ll be cool to say, like, you know, okay, go through the, you know, the completed items, but tell me, like, which models should we build next, right?
301 00:42:20.580 ⇒ 00:42:21.250 Uttam Kumaran: Yes.
302 00:42:21.250 ⇒ 00:42:35.040 Katherine Bayless: did we wind up, sort of, like, doing repetitive actions for, even though they felt, you know, distant in time, and, like, using it for prioritizing that way? I was also curious, so there’s a Snowflake MCP. Have you played with it at all?
303 00:42:35.540 ⇒ 00:42:45.310 Uttam Kumaran: I have not, I actually… the… kind of the debate… one of the debates that’s happening is, like, MCP versus, like, CLI.
304 00:42:45.440 ⇒ 00:42:53.789 Uttam Kumaran: And for the most part, the way MCP works, is it actually has to load all of these tools and definitions into context.
305 00:42:53.820 ⇒ 00:43:01.500 Uttam Kumaran: like, all of this text that you’re seeing here, and then it basically uses them to make kind of like an API call.
306 00:43:01.510 ⇒ 00:43:18.810 Uttam Kumaran: So, if you’re able to give it a CLI, the agent can basically run CLI help, see everything it can do, and just start to use the terminal to do the same actions. Oftentimes, for most companies that are established, the CLI will actually be more expansive than what’s
307 00:43:18.810 ⇒ 00:43:26.350 Uttam Kumaran: available through the MCP. So, in some situations, I use MCP, some situations, I use the CLI.
308 00:43:26.350 ⇒ 00:43:36.550 Uttam Kumaran: Asana doesn’t have a command line interface. They do have an API, but, like, of course, like, I would have to go get an API key, or… the auth… this auth all goes through my user.
309 00:43:36.550 ⇒ 00:43:49.389 Uttam Kumaran: Same thing with Snowflake. The Snowflake CLI all goes through my Okta user, so I had to log in… everything had to log in through Okta. So, in this way, if you’re using MCP or CLI, you’re relying on all of your user auth.
310 00:43:49.660 ⇒ 00:43:53.379 Uttam Kumaran: And so I’ve been enjoying using
311 00:43:53.460 ⇒ 00:44:07.580 Uttam Kumaran: CLIs where available. Most tools, though, do not have command line interfaces for interacting with there, right? It’s not… not all these tools I’m using here are, like, development tools. But, like, GitHub, for example, has a great CLI that’s, like.
312 00:44:07.610 ⇒ 00:44:14.010 Uttam Kumaran: it’s really robust, so I most likely will actually probably stop using the MCPs.
313 00:44:14.950 ⇒ 00:44:26.920 Uttam Kumaran: that’s sort of one of the debates that’s happening now, which is MCP versus CLI. For me, I think it’s just really based on availability, in terms of what you use, because agents are quick enough to use the terminal to issue commands, and
314 00:44:27.240 ⇒ 00:44:28.040 Uttam Kumaran: Yeah.
315 00:44:28.380 ⇒ 00:44:36.800 Katherine Bayless: Yeah, no, that makes sense. And it’s funny, I was glancing at Jay, because we’ve talked in the past about, like, yeah, the authentication piece in agents is going to get interesting at some point.
316 00:44:36.800 ⇒ 00:44:46.769 Uttam Kumaran: Yeah, so the nice thing is, like, for all of the stuff I’m doing today, it’s all going through my credentials through Okta. And so, if anybody is to use
317 00:44:46.840 ⇒ 00:45:03.130 Uttam Kumaran: cursor and set up… and set up a Snowflake CLI, it will inherit any of their permissions that’s based in the tool, and I think that’s the best way to go. Like, we want to avoid procuring one time… we want to avoid procuring API keys for every single user.
318 00:45:03.340 ⇒ 00:45:06.509 Uttam Kumaran: And having people write their own scripts to access things, like…
319 00:45:06.900 ⇒ 00:45:12.609 Uttam Kumaran: I think more companies are gonna release APIs, or CLIs, or MCPs.
320 00:45:12.720 ⇒ 00:45:18.910 Uttam Kumaran: And we just want to make sure that they can all go through whatever their user tokens are, you know, for that, I feel like.
321 00:45:19.380 ⇒ 00:45:29.790 Katherine Bayless: Yeah, no, I think it totally makes sense at the moment. I’m like, I see a future, though, where it’s like, I want to be able to, like, scope my agents to have, like, less permissions than I do, or budget.
322 00:45:29.790 ⇒ 00:45:30.680 Uttam Kumaran: Yes.
323 00:45:30.680 ⇒ 00:45:40.900 Katherine Bayless: Or be able to, like, know that, like, that was the agent that was running in cursor versus I’ve got, you know, some other thing that’s happening over here, and they’re both authenticated as me, but they’re fundamentally different,
324 00:45:40.900 ⇒ 00:45:41.410 Uttam Kumaran: Yeah.
325 00:45:41.410 ⇒ 00:45:44.329 Katherine Bayless: agents and traffic. I mean, you know, future state, but…
326 00:45:44.330 ⇒ 00:45:49.170 Uttam Kumaran: Yeah, like, it’s just kind of like how we would set up service keys, at least now. So, if we were to have
327 00:45:49.490 ⇒ 00:45:57.809 Uttam Kumaran: But it is interesting, like, I’m not sure exactly how it’s gonna work. Like, for… if you take any of the BI tools, right, they typically will
328 00:45:57.950 ⇒ 00:46:04.419 Uttam Kumaran: There’s a way for them to pass your user information into the query to then understand, like, what you have access to.
329 00:46:05.810 ⇒ 00:46:11.659 Uttam Kumaran: for Snowflake, I think, similarly, we’re gonna have to think of a way for It’s a use…
330 00:46:12.080 ⇒ 00:46:21.859 Uttam Kumaran: your credentials, or… I don’t know. It’s a good question. I need to think about it. If we build a Snowflake agent or something, how… how it leverages the right access controls.
331 00:46:22.450 ⇒ 00:46:24.610 Katherine Bayless: Yeah, these are fun problems to solve.
332 00:46:25.330 ⇒ 00:46:26.050 Uttam Kumaran: Yeah.
333 00:46:26.360 ⇒ 00:46:38.910 Katherine Bayless: the… okay, wait, I had… oh, so on the CLI thing, too, similarly, kind of going back to context, and very specific, sort of narrow question, but, like, obviously AWS has a CLI, I’m kind of thinking.
334 00:46:38.910 ⇒ 00:46:39.360 Uttam Kumaran: Yes.
335 00:46:39.360 ⇒ 00:46:45.010 Katherine Bayless: Like, that, that big bucket where I just, like, dumped all of the marketing.
336 00:46:45.010 ⇒ 00:46:47.309 Uttam Kumaran: Yes, I have it open, yes.
337 00:46:48.460 ⇒ 00:47:05.140 Katherine Bayless: Oh, yeah, yeah, yeah, the archive one. Yeah, yeah. So, like, where I dumped all of the archive data, frankly, also, separate question is, should those be tables? Like the S3 tables bucket, kind of instead, maybe? I don’t know. But, but I was thinking, like, with some of these models, it might be interesting
338 00:47:05.540 ⇒ 00:47:11.020 Katherine Bayless: If you had the, like… AWS CLI kind of rigged up, too, to say, like.
339 00:47:11.020 ⇒ 00:47:11.600 Uttam Kumaran: Yeah.
340 00:47:11.600 ⇒ 00:47:22.649 Katherine Bayless: a separate skill that’s like, okay, also go out to the, like, you know, graveyard of data and see if there’s, like, stuff in here that might be relevant, or, like, I don’t know, that kind of thing.
341 00:47:22.650 ⇒ 00:47:26.969 Uttam Kumaran: Given we had a narrow scope for… yeah, we had a pretty narrow scope here, so I
342 00:47:27.370 ⇒ 00:47:33.850 Uttam Kumaran: We didn’t do it, but yes, it would be great for us to set up like, AWS Cloud CLI,
343 00:47:33.980 ⇒ 00:47:42.169 Uttam Kumaran: and so you can go access S3 directly, and pull in any relevant information.
344 00:47:43.890 ⇒ 00:47:52.429 Uttam Kumaran: And maybe even, like, create some documentation here on, like, what is in those files, because it’s maybe hard to do the semantic definitions there.
345 00:47:52.770 ⇒ 00:47:59.359 Katherine Bayless: Well, and like, it’s not data that we’d want to, like, lean on or anything necessarily, but it is sometimes, like, I mean, sometimes it’s helpful to.
346 00:47:59.360 ⇒ 00:48:00.260 Uttam Kumaran: Yeah.
347 00:48:00.260 ⇒ 00:48:00.780 Katherine Bayless: But…
348 00:48:00.780 ⇒ 00:48:04.049 Uttam Kumaran: But, like, go through programmatically, open some of those, and yeah.
349 00:48:06.440 ⇒ 00:48:07.460 Katherine Bayless: Interesting.
350 00:48:07.460 ⇒ 00:48:15.609 Uttam Kumaran: Because the alternative is, like, a user has to go in and go into the folder, download each one, right? Or write a script to download it.
351 00:48:15.980 ⇒ 00:48:16.750 Katherine Bayless: Yeah.
352 00:48:16.750 ⇒ 00:48:17.330 Uttam Kumaran: Yeah.
353 00:48:17.990 ⇒ 00:48:33.399 Katherine Bayless: Okay. Other thought is… I’m assuming yes, but presumably, again, kind of getting towards future state, where we’re needing to prioritize what’s next versus knowing what we need right now. Sure. But the Snowflake CLI, would you be able to, like.
354 00:48:33.400 ⇒ 00:48:39.450 Katherine Bayless: essentially create a skill that’s something around, like, you know, looking at usage patterns on the Snowflake data.
355 00:48:39.520 ⇒ 00:48:49.920 Katherine Bayless: tell me what sort of streamlet apps we should build next, or something like that, right? Like, would there be ways to bring in, like, access and usage and consumption stuff in order to inform what we would want to build?
356 00:48:50.940 ⇒ 00:49:08.559 Uttam Kumaran: Yeah, so right now, all within Snowflake, there is a query history table, and you can see which users are querying and what their queries are. So, certainly, you can have an agent go profile all those queries and build some type of, like, profile of, like, what are the… what could be the questions that are being asked.
357 00:49:08.620 ⇒ 00:49:11.890 Uttam Kumaran: I think until we have it in, like, natural language.
358 00:49:11.910 ⇒ 00:49:15.410 Katherine Bayless: The queries themselves may not 100% represent.
359 00:49:15.730 ⇒ 00:49:33.280 Uttam Kumaran: they just maybe, like, someone just, like, hit go on an entire table. So that’s what I’m kind of thinking about, is, like, if we can get the natural language piece, we can really identify what it is, the question that they’re answering. But yes, and then, again, nicely, I believe
360 00:49:33.400 ⇒ 00:49:43.880 Uttam Kumaran: with the CLI, if not, I think with the new Codex CLI that they released, we will be able to create Streamlip apps and deploy them much quicker.
361 00:49:44.330 ⇒ 00:49:55.690 Uttam Kumaran: So yeah, I’m kind of with you. It’s like, I think you kind of pushed me to think a little bit more about how much we do within Snowflake, and without this sort of, like, quick, rapid development.
362 00:49:55.690 ⇒ 00:50:09.070 Uttam Kumaran: so much of that in the past, we had to do via the UI, and it’s so slow, that now we have access to agents and be able… can issue these quer… issue these commands, I feel like we could actually do a lot directly within Snowflake.
363 00:50:09.220 ⇒ 00:50:10.959 Uttam Kumaran: And rapidly prototype.
364 00:50:11.450 ⇒ 00:50:14.640 Uttam Kumaran: Streamlit apps, you know, for use cases.
365 00:50:15.310 ⇒ 00:50:15.890 Katherine Bayless: Yeah.
366 00:50:17.250 ⇒ 00:50:24.600 Uttam Kumaran: And again, Streamlit is an open source library, so you can build something locally, and then basically, like, port it into Snowflake.
367 00:50:24.860 ⇒ 00:50:36.070 Uttam Kumaran: Because I know for Snowflake, you have to go into Snowflake and open it, versus if you want to do local testing, you could do a lot of it. They use a lot of the same… I think for the most part, they’re one-to-one, so…
368 00:50:36.660 ⇒ 00:50:40.719 Katherine Bayless: Yeah, I mean, for the little app I published, I was able to run it locally before I moved it into.
369 00:50:40.720 ⇒ 00:50:41.480 Uttam Kumaran: Okay.
370 00:50:41.480 ⇒ 00:50:44.119 Katherine Bayless: And it was literally just copy and paste.
371 00:50:44.120 ⇒ 00:50:50.840 Uttam Kumaran: Yeah, so that’s a… that’s my only thing, is, like, they’re gonna try to make Snowflake look a lot more like this.
372 00:50:51.060 ⇒ 00:50:53.060 Katherine Bayless: I will say, though, it’s…
373 00:50:53.570 ⇒ 00:51:01.790 Uttam Kumaran: they’re not, like, a develop… they’re not an IDE or, like, development environment company. So they want more of the people in Snowflake.
374 00:51:01.930 ⇒ 00:51:14.779 Uttam Kumaran: where I will push back is that, like, it’s actually helpful to be able to do some of this locally, call Snowflake, call AWS, like, call these other things, versus doing all of your development right within the Snowflake UI.
375 00:51:14.810 ⇒ 00:51:23.949 Uttam Kumaran: That’s actually, I would say, at this point, like, we may… like, we may only go into the UI to, like, set up certain things or do exploratory stuff and access Streamlit.
376 00:51:24.020 ⇒ 00:51:29.079 Uttam Kumaran: Like, otherwise, I think spending less time in the UI is actually, like, more of the goal here.
377 00:51:29.940 ⇒ 00:51:31.290 Katherine Bayless: Yeah, totally.
378 00:51:31.650 ⇒ 00:51:32.320 Uttam Kumaran: Yeah.
379 00:51:33.490 ⇒ 00:51:38.620 Katherine Bayless: Okay, well, 5 minutes on the clock, I totally sucked up a lot of the question time, but… Others?
380 00:51:44.560 ⇒ 00:51:52.029 Uttam Kumaran: So one thing I can do is, as I’m also working, I will save some of the transcripts of how I’m interacting with Cursor directly to the repo.
381 00:51:52.240 ⇒ 00:51:55.699 Uttam Kumaran: But again, some of this is, like, learned
382 00:51:55.970 ⇒ 00:52:07.690 Uttam Kumaran: skills, so if you’re… if you’re stuck at any point on, like, how do I do this, or my cursor is looping, or whatever, I’m happy to… to help. But I think, Kyle, it’s actually good to hear that you’re sort of knee-deep in it already, so…
383 00:52:07.690 ⇒ 00:52:22.309 Kyle Wandel: Yeah, and like, on the call, I was trying to integrate the Snowflake client, because VS Code has an extension for it, but it looks like my agents can’t access it, so that might be one big difference between Cursor and VS Code right now, is that the agents can access your Snowflake interface.
384 00:52:22.310 ⇒ 00:52:29.509 Kyle Wandel: But I was looking into that, but yeah, this is a, like, it’s an excellent tool, and like I said before, it’s crazy that people were able to do it.
385 00:52:29.920 ⇒ 00:52:36.049 Kyle Wandel: do this well before these tools were available. Having all the interfaces into one, basically, in…
386 00:52:36.180 ⇒ 00:52:38.839 Kyle Wandel: All the clients into one interface is incredible.
387 00:52:39.370 ⇒ 00:52:51.499 Uttam Kumaran: Yeah, and I would say don’t worry about the Snowflake extension, because that’s actually different than this, than the CLI. Like, Snowflake CLI is, like, in your terminal, you can type in, like.
388 00:52:51.570 ⇒ 00:53:00.179 Uttam Kumaran: Snow CLI and query, versus the extension is almost… I actually probably have the extent. The extension is, like.
389 00:53:00.290 ⇒ 00:53:05.619 Uttam Kumaran: it’ll almost show you, like, the left part of Snowflake directly in here.
390 00:53:05.620 ⇒ 00:53:06.200 Kyle Wandel: Yep.
391 00:53:06.430 ⇒ 00:53:10.909 Uttam Kumaran: Which is still really nice, and you could still do it, but yeah, different thing.
392 00:53:10.910 ⇒ 00:53:15.060 Kyle Wandel: It’s… wow, okay, so basically what it is, is it’s accessing your terminal,
393 00:53:15.060 ⇒ 00:53:19.149 Uttam Kumaran: It’s accessing your terminal and issuing commands that go and hit Snowflake.
394 00:53:19.150 ⇒ 00:53:19.670 Kyle Wandel: Makes sense.
395 00:53:19.670 ⇒ 00:53:20.110 Uttam Kumaran: S.
396 00:53:20.110 ⇒ 00:53:31.040 Kyle Wandel: Okay, yeah, it’s wild. It’s wild how similar these, Cursor and VS Code now look. Like, that’s the exact same setup and everything. No, so I’m telling you, Cursor is built on VS Code.
397 00:53:31.040 ⇒ 00:53:34.320 Uttam Kumaran: Like, it is… it is a wrapper on VS Code. Like…
398 00:53:34.540 ⇒ 00:53:37.590 Uttam Kumaran: Because VS Code’s open source, so…
399 00:53:37.590 ⇒ 00:53:41.359 Kyle Wandel: There’s a lot of companies that just built their companies on top of it. Yeah.
400 00:53:41.360 ⇒ 00:53:41.960 Uttam Kumaran: Yeah.
401 00:53:44.700 ⇒ 00:53:52.160 Katherine Bayless: Yeah, I mean, I feel like in the future, it’s like, this is gonna be everybody’s basically just, like, desktop. I mean, some people will be developers, some people won’t be, but it’s like, hey, yeah.
402 00:53:52.160 ⇒ 00:53:53.940 Uttam Kumaran: I think so, yeah. I think so.
403 00:53:53.940 ⇒ 00:53:58.149 Katherine Bayless: file and chat, I feel like that’s what the GUI of the future is.
404 00:53:58.150 ⇒ 00:54:01.620 Uttam Kumaran: Yeah, some people are liking Claude for work,
405 00:54:01.840 ⇒ 00:54:06.479 Uttam Kumaran: For me, it’s too simple… it’s, like, too simple. I need, like, much more control.
406 00:54:06.610 ⇒ 00:54:07.140 Uttam Kumaran: But…
407 00:54:07.140 ⇒ 00:54:07.850 Katherine Bayless: It’s fun.
408 00:54:07.850 ⇒ 00:54:08.840 Uttam Kumaran: It’s nice.
409 00:54:08.840 ⇒ 00:54:26.970 Katherine Bayless: I like the Cloud Code, or, like, the desktop app, and using Cloud Code there when I’m doing, like, kind of one-off-y things, where I’m like, I just need to kind of come up with, like, a Python notebook to tackle something silly, right? Like, but definitely whenever I’m, like, working on real stuff, like, having this kind of environment is, yeah, mandatory.
410 00:54:26.970 ⇒ 00:54:29.689 Uttam Kumaran: Yeah, and for data work, again, it’s much more sporadic.
411 00:54:30.170 ⇒ 00:54:30.810 Katherine Bayless: Yeah.
412 00:54:30.810 ⇒ 00:54:31.390 Uttam Kumaran: Yeah.
413 00:54:32.910 ⇒ 00:54:39.150 Uttam Kumaran: Okay, great, so I can send this meeting, I’ll send some links, And…
414 00:54:39.520 ⇒ 00:54:42.980 Uttam Kumaran: Please give Cursor or VS a shot this week, and let me know.
415 00:54:43.150 ⇒ 00:54:44.830 Uttam Kumaran: How it works.
416 00:54:45.330 ⇒ 00:54:47.579 Uttam Kumaran: Yeah, appreciate the time.
417 00:54:48.170 ⇒ 00:54:49.590 Katherine Bayless: Well, thank you for the…
418 00:54:49.590 ⇒ 00:54:50.160 Kyle Wandel: growth.
419 00:54:51.060 ⇒ 00:54:57.169 Kyle Wandel: Thank you. If I have any questions about how to download the CLI, I’ll let you know, but, please. Resources, yep.
420 00:54:57.620 ⇒ 00:54:59.020 Uttam Kumaran: Okay, okay, perfect.
421 00:55:00.220 ⇒ 00:55:02.790 Katherine Bayless: Jay and I are gonna go downstairs and talk about goals.
422 00:55:02.790 ⇒ 00:55:03.820 Kyle Wandel: Cool.
423 00:55:06.580 ⇒ 00:55:07.380 Uttam Kumaran: Thanks, everyone.
424 00:55:07.590 ⇒ 00:55:08.280 Kyle Wandel: You like it.
425 00:55:08.840 ⇒ 00:55:09.260 Uttam Kumaran: by…