Vibe Coding Noir

NoirCon 2 Berlin 2025 · June 2025 · 58:15

Aztec head of developer relations Josh Crites leads a hands-on workshop on vibe coding with Noir. Participants learn how to use AI coding assistants to write and iterate on zero-knowledge circuits and privacy-preserving apps. The workshop was part of the NoirCon 2 program.

Speakers

Topics

From NoirCon 2 Berlin 2025, hosted by Aztec Network.

Transcript

[Music] Okay, I do have some slides just things that I've that came to mind when I was like, "Okay, um, what should I cover?" And we'll go through this. Then I want to just like get into some of the tools that I've been using in cursor um and hear from you guys about certain tools that we should use or check out. I don't know like this lino suggested tools for this. I don't know

if you guys are using cursor. Um I found that to be one of the best IDEs. I don't know if you guys have tried anything else. Some of the tools I've used have suggested things like like wind surf. haven't heard of it or haven't tried it, but uh I think it's another AI powered IDE or RU is one that I didn't I wasn't familiar with until one of the tools I installed created RU configuration files. I was like, "Oh, that's another thing to add to the list." Um >> sorry, I forgot to connect to the Wi-Fi. You got another password.

>> Yes. Uh saw the QR code to the regular Yeah, I've used IDA. A I D E R which is basically like a it's for using it on the terminal basically. So you just chat with it like that. >> Okay. It's just a terminal like CL. >> Yeah, a TUI. I can't remember. But uh like I don't use an editor like uh cursor.

>> Oh, >> like I don't use an ID. >> Okay. So you use like Vim. >> Yeah. >> Okay. >> Very basic. >> So not use an editor that's either like >> well don't use an ID super skilled or just like fully vibe code. I don't even want to see that code and make it work. >> Just chat and that's it. >> There are the apps like are lovable or like bolt at new or like you don't see code. You like have to click buttons to see the code. Um, so it tries to hide it away from you as much as possible with the people that I've seen use those more extensively or not developers and I don't be interesting to see if

you're not doing web I think they're very web development focused like we're you have specialized components like I'm not sure how well it would handle if it's even possible. So a friend who's not a coder recommended me something I haven't actually uh haven't checked it out Google >> thing you mention secondly >> uh a i d e r chart >> oh jewels yeah >> d i d e r >> jewels yeah I mean you know the coder so it's >> okay >> interesting I wrote you to add a slide to this if you guys want to get the slides they're on the QR Um,

you >> I was pretty bad connection. Oh, >> okay. Yeah, it's fine. >> But you did quite >> Yeah. Yeah. Yeah. It's crying, but it's good. >> It's everything in German. >> Yeah, I know. It's my VPN, I guess. >> And the connector is like that. Oh, >> yeah. The internet soft as well.

I was just going to make a slide and start taking notes of tools. So, um, if you guys get these slides, then we can see. It's weird that this button for adding a slide didn't show up on the German and now it's in English. E. >> So we had a I what was it? >> D E R >> I think.

>> And then we have >> this is what you're talking about right now. >> Yeah. >> Okay. >> Yeah. Do you guys And you said jewels. Jewel. >> Yeah. Uh jewels like a name. >> Yeah. also rabbits >> uh for the commits. >> Yeah, not sure.

>> Finish unhelpful AI gather. >> No, no, no. Um, not to get too in the weeds on this, but >> yeah, kind of the suggested tools I had for what I've been setting up is cursor IDE, the Cloud AI API access. Um, some of the >> Sorry, code rabbit. >> Code rabbit. >> Yeah, >> I know. I know how to rabbit somewhere. um that here cloud AI API access. I'm using some MCPS, the model context protocols where it's um running a local tool to add

context to the AI. Um and some of them provide AI access themselves. Like the one that I'm most impressed with right now is um taskmaster which essentially does like project management um and breaking down large complex problems into manageable coding tasks. >> Can you please give a very short uh 101 to MCP for for >> Yeah. So like the the hello world example of an MCP is um like the timestamp MCP >> which is essentially like when you're running these LLM these models >> um >> they don't have context into like a lot of the current state of the world

whether that's like you see someone searching the web for information um or whe even just like the time stamp on the computer like what time is it you ask an LM what time is it like has no idea >> so the the basic MCP example is like it's just a time stamp server which all it does is um it's a tool that the LLM can call to get the time stamp. So it it it you prompt it be like okay what time is it? It it has some context and it knows what tools are available to it and it's like oh I can use this tool to get the time stamp. So it'll call it and all it will do is like return the current time stamp for your machine >> right. Um, so the way that a lot of these MCPs are being like tools are set

up is they're like published as npm packages. >> Okay. Um, and then there's just a bunch of commands that like MCP developers will make available >> and it's just running pretty much regular code, deterministic code that's fetching information about um I mean they can really query anything but it's really common for like your file system um to read information in your files um create new files. There's plugins like um actually like >> but your LM needs to support these MCP servers right?

>> Uh >> sorry, >> your LM LLM needs to support these MCP servers or they're like just centrally available and anybody can >> they're just available and you download them. There's a GitHub repository of like common MCPs. I think anybody can contribute to it, but there's like literally hundreds of them. like integrate with Google Drive and GitHub and Slack and other project management tools. Um there's one that I set up in cursor that does browser. It it will like connect to a local host in your browser and it can like parse logs and take screenshots of what is whatever's running.

um which is really nice for development because you don't have to go through like copy pasting errors. You just like have um the MCP running your browser tools and it uh just basically gets all the information from there. It's like this context wouldn't normally be available in the in publish that MCP server or do you use it for your >> I haven't made an MCP server. I'm talking about ones that I use. Oh, so like if I pull up cursor, I can show the not views.

Let's see how how this goes with like >> slow internet. I'll just reference this Noir password checker app. Um, if you have, but here's my cursor settings. So like if I go to cursor settings, just click cursor in the the gear in the top right. There's a bunch of general settings. I was I guess I am practicing cursors also been making a lot of updates. So um it changes quite regularly. It's getting much better much quicker. Um, you can

turn off privacy mode and you can actually have agents run stuff for you in the background if you have long running jobs. I tried it for a bit, but looks like privacy mode's got on and my most of my tool is still working. So, I'm just going to leave it like that. But in this tools integrations, this is where you turn on MCPs. Um, and it looks like by default it's recommending that I connect to GitHub. And what it can do with GitHub is it can do pull request reviews. It can create issues for you. It can see what's assigned to you. It can like do all of the GitHub things that you need as part of a project. Um, this Bugbot, I think I signed up for it initially, but it's like 50 bucks a month or something. Like it's it's expensive enough that I was like, I'm just going

to leave this running for fun. Um, but it's probably worth like at least it's probably worth paying for one month honestly. Just see how it goes. Um, but it probably depends a lot on the team that you're working with as well if this is something you want to do. Um, also connecting to Slack says you can work with cursor through Slack. Like that's kind of crazy. Um, I don't even know what that would look like. I guess pure vibe coding. You're not even in your editor. You're just building apps from Slack. Um, but the these tools that I've been using, Taskmaster AI, um, Playright Testing Framework, and then browser tools.

Um, these are MCPs that I just installed. from uh >> where did I find these? Taskmaster I heard about at a previous V coding meetup. Um playright Pedro actually found it. Yes, we saw it yesterday. I think we started playing with it. Um it's really nice for building user interfaces and getting feedback programmatically. Um just like playright testing. Um and then browser tools is like actually doing like the more browser debugging set of things. Um but generally if you look at these these servers um you just see death max here.

Um there's also smithy which we talked about as um as a way to find their own they have their own rappers around. >> Yeah. >> MCPS. We can always get the MCP itself. Uh it's like uh you can show smither maybe. >> Yeah. >> Um >> yeah, >> it's just like a ton of MCPS you can get.

>> It's useful just to read through like what MCPs there are. This GitHub repo is also uh just an awesome repository, but you can just see some of the okay some of the just examp um fetching web content, access to file system, doing git stuff. So like an LLM if you're just prompting it with chat isn't going to have access to your git system, but you run the git MCP and then now the LLM can actually do git operations. So it can like um commit files, it can craft commit messages, it can push branches and open PRs and that sort of thing. Um I guess pull PRs would

be more GitHub specific, but um there's memory systems like oh I want my LLM to have additional memory about a specific topic. Like you could run an MCP like Pedro's building an MCP for Aztec network where we have a bunch of information about all the nodes that are running on our network like their uptime, what the current validator set is, like how many attestations we're missing, all this stuff. It's like, oh, we can just wrap this information in an MCP and then now we can use natural language to query information about the Aztec network instead of having to do these JSON RPC calls, which just makes it accessible to like the entire community in the Discord. Like most people in Discord aren't crafting JSON RPC requests using curl commands, right?

>> Like >> um so this just like makes all of that information available through natural language, which is super cool. Uh >> it's also the the way that you use for example uh cursor it always asks for small models to do things for it. It's just a tool calling. So you could actually use a small model that that would be like trained in our stuff for example and then use cursor as through MCP. So basically um just craft circuits. Let's say that you're like, okay, use this MCP to craft this circuit and it would be a MCP connecting to a small model that's very well training on in

>> do you need to like specify that you want to use the same screen or >> it will just know I mean you need to install it here like >> install it yes but uh then >> but then the the the model itself will know if it needs to call >> because you're like if you provide a tool MCP tool that says uh a model to um to write more circuits. >> Yeah. So, >> and then then the AI is like, "Okay, Marcus, I don't know how to do it." Oh, but here's the soul. I can >> usually it does know how to do it, but maybe not as efficiently as your >> Sometimes it's not as efficient as I say.

>> Yeah. Yeah. Yeah. Exactly. So, that's why I was wondering how does it choose? Uh >> yeah, it just uh it just thinks about it. Yeah. >> It's pretty good. Like in this taskmaster example, um they have example like specific prompts that you'd want to do at specific steps like initialize my initialize taskmaster AI in my project and we'll just like this is guaranteed to run. >> Yeah. >> The setup even if even if you like okay like okay one 1.1 like milestone 1.1 is done. Uh okay let's go 1.2 now. You can basically tell it like this and okay, it will understand that you're like done with 1.1 like oh 1.1 okay but yeah I

don't feel so confident about this and it's like he understands that you actually not want to move forward you just want like and start adding some tests you know so it's like just a natural just like you would talk with the project manager like you don't have to tell project manager oh we can move to the next milestone but that's the project manager job to know that they need Um, so it's it's it it's called and the same with task master like you could treat as a as a as a human project manager. >> Yeah. >> So adding these MCP servers to your project in cursors like if I want to add browser tools I just add this like it's just a few lines.

Um yeah you can see oh your keys you can't see the end of it. Sorry. Fo save. >> You can see the wall. It's off. >> Um, but yeah, then I can just like turn this on. So like if I just if I just start task faster. >> Hopefully it works with shaky internet. Okay. So it just now I'm running the Taskmaster AI tool. Um, so I can open the chat. I'll just ask what task am I Yeah, this is mostly interesting because it really loses track on what where it's

at. And this is very important for context. Just the fact that you have specific idea on where in the world PRV is your task. It's really important that it won't like try to write or think about the front end if it's not in the task the current assets. just narrow it down to the actual >> just like a human. But >> yeah, >> I might wait on this just to get through some of the higher level points. Um cuz this like I'm basically halfway through a project that I initialized with Taskmaster that's already broken up a bunch of stuff and I can like contextualize like this a little better if we go through some of this other

stuff. Um, so yeah, basically what I did before I started this project, I just have cursor, I set up my cloud API key, and then I have noir installed like Nargo and EB. Um, just like basic noir tooling. Um, MCPs really get to this problem of like context. Providing the right context to an AI is super important to help it succeed. Um and cursor does some context gathering automatically just by like whatever project you open in cursor. Um so like it will index your codebase. Um you can actually add specific files to your cursor. There's a cursor ignore file. It's a specific type of configuration file that you can tell cursor to ignore things. Um but you want

to give the AI enough context to be helpful but not too much context that it doesn't get confused. Like sometimes it can just get stuck coding in loops of like lint I see it commonly with lint errors. >> Yeah. >> Um it'll just do the repetitive task and just like clearly can't figure it out. It just doesn't have the right context. Um so um fine-tuning that depending on the size of the codebase you're working with. like the projects that I've been working with and mostly what we do on Devril is like example projects and it's never too much context but like Aztec packages where the entire Aztec engineering team is building the entire blockchain in our monor repo like it's way too much context you just like drop u basic

questions of like what's in this repo to an AI and it just it it's too much information it can't >> but how can you separate it out but how can you say like here's here's the repo so that you have it for reference. So don't ask me stupid questions like it may be look in it just go and do that yourself but only do that if you need to. >> Yeah. Um at least with Aztec packages there are parts of the code pace that like depending on what you're working on you may never touch. Like there's a tons of cryptography stuff in C++. The whole proving system for anybody doing engineering work on the network network side of things right now would never need to know anything about the

proving system of that. So you can just like cursor ignore all of irrelevant information basically. Man, you could it could you can you can be really persuasive persuasive persuasive with I know I don't say really look at this folder every file in this folder but and most of most of most of the eyes will be okay this will fill up my context and it's true like you can do it once it just fill your context window all at once one task so maybe it's worth it maybe it's not so cursor you know just like again narrow it down to exactly what you want to look and then you can reliably say yeah all the folders you can see are everything that you want to

I mean you don't need to touch any anything else so an example if you have like sensitive information in your end files sometimes you're like okay I I would prefer to ignore the environ variables sometimes you just don't like if you're doing doing something locally or something you you're okay like there are no actual secrets you may want to have like a mlocal and that will be fine to to to send to send to the eye so I can run stuff. So yeah, it's it's just to narrow it down in general, but I guess it feels like there should be a way to do to automate that too.

>> There's you can So the second point like tagging folders and files. I mean there's probably an MCP that can help you >> that would be the way to do it. >> Find appropriate tool to be like oh I haven't got enough information but I don't want to bust my contact with clean up. >> Yeah. Yeah. >> Have you guys uh uh been able to sort of find the correlation between the context and the token size limit between these models? Because like is there a way to know that okay maybe giving the token size is too big or something?

>> I'm not sure. There might be tooling >> there probably >> that you can run. >> Yeah. I don't know. I'd say this is like current probably current research in the AI community. >> Yeah. Yeah. I'm just trying to use these tools. Yeah. >> Um but with with cursor you can tag files and sites uh files folders and sites. So like if I go to >> Yeah, you can index stuff as well. Just uh >> if I just do at@ it gives me all these things I can tag. So I can tag specific code. I can tag documentation.

Um, I have the Aztec protocol docs and the noir docs index in cursor which is just another setting like uh if I go to indexing um you just add docs here just add a doc and you just paste a URL and you index a doc site. This is super useful because like especially with Aztec protocol and noir, well, not so much noir now, but the docs are changing regularly. Um, and like some of the models we're using have been trained like 6 months ago. So, it's not even that old, but it's like old enough that like, oh, the docs have have been updated since then. Like, let me add the docs at the site um to the context. Um, but you can tag these sites, you can tag

files and folders. So like you could tag an entire folder, be like, "Oh, I'm working in this folder. Oh, I'm work I'm working in this file, but look in this folder for relevant information and if you know that as a person, just tell the AI that directly in your in your prompt and it's going to likely be better." Um, so you can tag I guess you can tag all sorts of things. Um, here that will just like highlight this to the AI because when you're when you're providing context like the most recent thing in the context window is going to get more emphasis just like in conversations you have with people like the more recent things you say are going to be more top of mind to a to a person. Um, so if you just like want to highlight on those specific things that you

>> Yeah. So, so for example, if you if you that's that's where I guess the human behind the the human behind the machine is the one that can uh point to this to these things. So, if you have like a monor repo with different services and just knowing where things are so you can tag that specific folder even if you don't do exactly. So, I've been doing a ton of express stuff as like sometimes I don't I don't remember. I could actually search for what is the route that I want to refer to but I'm too lazy and I actually I would prefer it to know the wall context of the wall because it's maybe it's a post route but then that also changes the get and I'm not even

remembering that. So I'll just point to the wall folder and say oh here's express this is everything that's express there is nothing outside of this that will reference this because it's a minor repo. So you can just instead of having the wall context say hey here's the wall code base will just use a ton of uh ton of context uh just knowing where things are but you can actually point in a more again narrow direction to be able to do a better job. So the human behind machine is definitely um yeah it's key to the success the AI model software development expertise actually like people are like oh it's going to take software jobs but it's like I don't know we're solving problems by

writing software and having context on the problem and appropriate ways to get there is more important than actually like executing like actually typing the characters in the proper sequence. to create the the app that compiles and the AIS can't do that. I mean, presumably there's a there may be come a time when they can they can do that, but I think >> fundamental reason why they can't do that. >> There's no there's no fundamental reason. >> No. >> Right. Right. >> Like solving relevant problems for humans is always going to be a human problem, right? I mean, which problems to solve for humans is always problem.

>> Yeah, you can think. I mean if you've done some web to I was a contractor in kind of web two thing uh and it was like oh here's this um AWS request I need to add this thing to visit request and actually we didn't even know or want or care or others didn't want us to know what it was doing. We just we were tasked with something to do and we're like oh here comes a request I need to add this field to this request and send it back somewhere and okay that's that's my job like I do that some 9 to5 and that's then go home and AI will take those jobs AI won't take the job that we keep going

>> we're I don't know how much time we have um one minute >> what >> oh no it's 5 seconds he's joking It was it half an hour, right? >> Um >> 3:00. >> No, I I think we have more time. >> We'll go check on this. >> 4:15. 4. >> And I'm You guys can leave too. Like I was just planning on being here more than 45 minutes and just talking about this as long as you guys wanted cuz I am very optimistic about this. I think it's >> super super interesting stuff and I want to make it as capable as possible. Um but just moving on adding documentation

sites. I mentioned that setting agent rules. You can basically specify ways that you want agents to interact um with your codebase. You can basically do coding style. You can view how they interact at GitHub um how they manage projects. Like these are very flexible and a lot of the MCPS will actually specify specific types of coding or rules for how to like use them which is helps them succeed. There's like pattern matching for when they know um which MCPs to follow. There's this idea of like self-gathering context which we talk about how important context is for for LM to be successful. I've been using agents to just comment the out of my code that's running and then all the comments get fed back into the AI so

they have much more visibility into what's actually happening during execution and it just makes them way more successful when they're trying to execute stuff. So like I don't even have to write all the log statements. I don't need to think about what to do. I just basically try to make the code execution as visible as possible. Um AI solves the problem and then just like remove all the code and it's like a couple prompts. Like it feels like a lot cuz it's adding hundreds of lines of code into my file but it's like easy to as well. So just thinking about ways to make your code more visible because that's how you make these LM successful like how do you get this context in? Um so that's like writing readmes and code comments. um use the LMS to make sure these stay up to date. Like writing reference docs and

building like mermaid diagrams um and then sending those pictures into the AI like use AI to write these like I'm having AI structure this huge project and I'm just like okay make some mermaid diagrams so like other LLMs can get context on what this thing even looks like. Um it's been super useful. I talked about these MCPS browser access browser automation taskmaster. Um, we can get more into that like actually using cursor in a minute and ignoring files and large monitor repos and even that. Um, there's this difference between thinking models and non-thinking models. I don't have a good intuition on this. Well, my current intuition is like thinking models, it's easier for them to get confused, but they're much better at like more complex reasoning tasks. So,

they need less guidance, but they have more opinion. They're more opinionated about how they execute things. So like maybe for coding they're it depends on the problem. You just have to figure out what sorts of problems they're good at. But like this is Claw Opus Gemini 2.5 approach at GPTO3. um versus like non-thinking models which are much better at like more specifically scope tasks like coding tasks particularly um but they need more explicit instruction and like the one of the things I like about Taskmaster is it's literally generating the explicit instruction for these like more non-thinking models to execute coding instructions and it just doesn't super well um so like cloud force on it um GPT4.1 so in terms of usage Like how do

you separate the thinking and non-thinking? What >> for? >> When I'm using uh cursor. >> Mhm. >> I don't I just have it on auto most of the time honestly. So I don't even pick. Okay. Um there's this thing in Taskmaster where you can basic like specify the main model that you're using for writing code and then there's like a research model that they suggest for like I think that's the when they're analyzing complexity of a project they break down tasks based on complexity and I think the the agent that's analyzing the complexity of the task is a research model and then basically if if it's too complex it breaks it into subtasks and then it makes sure it's complexity is

below a certain threshold. for it to actually be able to execute like in for example like it needs to be below complexity level 8 for like a claw 4 sonnet to be able to execute it effectively or something. So it's like does complexity analysis if it's too high it's like okay subtasks and then each subtask will be more um or less complex. What's the best combination of the agent um or agents and uh model like which uh >> suited for the agent setting?

>> So here's what I'm using for taskmaster for example which is like breaking doing this like project management task breaking up. So like my main model is claude for sonnet which I believe is just doing the a lot of the coding tasks. My research agent is GPT4.0 from OpenAI. >> I think I think it's not for code tasks. I think it's just for the model like >> Yeah. I I mean just for the cursor settings. >> Yeah. >> Oh. >> Uh I don't know. I think it depends. I just auto.

>> Okay. Okay. I was I was coding with Pedro yesterday and he's like selecting based on what he was doing like picking between like >> the reason is like I I I just think that will always give you the cheapest one they can pay for. >> Yeah. >> So they'll they'll just spare the shittiest one. >> Yeah. So what which one is the best that can handle the agent uh system best? >> I I use I just defaulted for >> Yeah. Okay. about four. >> I've seen familiar use the pro the >> there's like opus and then there's like max as well which are more expensive but I've seen I think four actually scores as well or higher on some tasks as like >> or I mean you don't need the maximum model for the agent task maybe agent

need to go fast through the whole pipeline and or yeah >> yeah I mean this would be again something where like I'd probably just do similar tasks with different agents and see how it compares. Um cuz I mean a lot of the reports I read are I mean people literally make businesses out of doing this analysis now and like >> and what about Gemini? >> I haven't even used I've heard it's good though like I heard Google's like catching up on >> I've tried Jina going clock on cursor as well.

>> It's good because it has a higher context but I feel it a lot. Okay. >> I just tend to go for plus four. But really depends if you really need a big context may may pay off >> cuz it was one reason to come base. >> Yeah. >> And we should try analyzing SL packages with John and I. >> Yeah. See what happens. >> Uh we'll jump in back here. >> Yeah. Talked about indexing relevant documentation sites um at ESC and L and then tagging them when you have specific questions.

>> Um I have a doubt about documentation. So let's say you make changes in your documentation like I I often try to delete and add it back but the index date never changes. So let's say you made a lot of changes past the date then how does the >> you need to reindex it doesn't track it. >> Yeah I've tried to do that but it doesn't do that. It just says that it's index at that time. I try to delete it. It tried to reync but >> Oh I see. >> Yeah. Uh >> so this was index. >> Oh okay index. >> Okay. You could reindex. Okay. Now, >> yeah. Yeah, I'm pretty sure.

>> Yeah, that should I mean there could also cursor just be having issues. I >> mean, they only got to 1.0. >> Oh, yeah. See, it's uh 12 again. >> Yeah, I could have tried it. Yeah, >> it didn't. >> I tried to close and open back again. >> But would it be that something needs to have changed in the document for it to realize that it needs to reindex it? It could be it could be smart enough to see that movie has changed. >> You can try to mess around with the documents and then >> yeah um cursor rules. There's different types you can different cursor rules you can

like types of cursor rules you can add. So like you have rules that are always applied or they're automatically attached based on the LLM's analysis. um or like the agent can request to use a rule so it's not automatically applied but it will notify you or like manual so only if you trigger it um you can scope them by folders so like this is super customizable again and like something you uh I don't know maybe want to play with I haven't gotten too deep on cursor rules but um it is a thing that's there if you have like different um conventions for different parts of the repo or something um you got to keep your code working, especially if you're like vibe coding really quickly on something and just like iterating fast. Agents can get code

into a bad state very quickly because they're just writing so much code. Um, if you don't have tests set up, like I've seen this happen on like ripple it for example, where like they'll write a bunch of code and you're like telling it to add some features or make some changes and then you try to run it again and it just doesn't run because it introduced some bug and you're like, "Okay, try to go back to whatever previous working version." and I can't get back to the previous working version cuz it's just confused itself too much. I think Replet has version control baked in now I think. Um, but essentially use version control. And one thing that was like talking to somebody at Aztec about this last week about um security concerns about using AI to write so much code and I was like I've actually

written way more tests and there's way more coverage on my projects now than ever before because you literally just tell AI to write tests for my project and it will just spit out 50 tests for you in a minute and it's like this one takes an afternoon to do before. Um, so now like you learn about test-driven development in school, right? Where you write the tests first and then you implement the software to actually like make all the tests pass. But like nobody ever actually writes software like that. But like you could feasibly do that in a real work environment using AI because you have like a spec that defines what it should do, just have it write the test for you really quickly and then the AI is just implementing all the software to make all your tests pass. So like um that's actually a really good way to

work with agents because then you know if you have good test coverage if the AIS are going to break things you'll just instantly know when you run your tests like oh this broke this. Um so it's kind of related to like uh visibility as well. um a tool that I've used a little bit um I don't know if you guys have tried it but the openi codeex like if you have chatgpd just go to chatgpd.com there's a pull it up [Music] >> there's a tab now for codeex

um which will index public repos on your file um and basically set up a coding environment for an agent to actually run code. Um I guess it's quite similar to cursor but like this is all an agent has like complete control to run whatever it wants to investigate your um repo. And then there's actually buttons here like I have this uh task running on the nor examples repo. Um and you basically start a conversation with an agent with all the relevant code here and there's like it's suggesting changes to my codebase based on my

prompts. Um, I can comment like basically do a PR review right in um this window and like change this and it will um adjust like make some adjustments and then I can literally just open a poll request with with whatever changes it has like right here. So, I just like open a poll request, open it up, um, and it's really easy to merge your code right back into GitHub. So, it's I find like this was useful for making like small edits to a codebase. Um, and I didn't even need to open an editor, but it's just another tool that might fit

into like a a dev workflow depending on what you're trying to do. Um, I think it works on your phone, too, which is pretty crazy to see. Um so opening codeex additional resources um deep wiki does like documentation based on GitHub repositories. I think someone did one on Aztec packages which was like pretty good. There were some definitely some significant errors with like how it understood Aztec. The difficulty with this is like if you're just learning about a new subject, you actually wouldn't even know where the AI is like bullshitting you in terms of like what's wrong about the documentation that's generated. So like this one's a little dangerous depending on what you're

learning about. Um I guess it's like that with anything, right? If you're talking to chat GPT about a domain you don't know about, you're just not going to know when it's lying to you or hallucinating. Um but these are some some additional tools. Um, I was thinking of doing like breakout sessions. This is a smaller session. We've already been going for um, well, we've been going for about 45 minutes, but um, I was thinking it might be fun to try to write a simple noir project, but um, I could also just go through this um, this noir password checker example and how I've been using some like MCPS to uh, basically build this thing. um might be worthwhile since we already kind of

jumped in here. But yeah, any questions? >> Yeah. Uh is there like a repo full of examples of different types of circuits uh that you have already pre-built? Um maybe there's no examples. Um, and they're it's largely kind of like getting started examples. So, they're quite simple. Um, I'll show you what's in here, but there's like generating a solidity verifier contract.

Um, there's a couple web starter examples where we have like a V app, uh, vanilla app that's like no framework. Um there's a recursion example which serger have um there's a simple serger than this but it's mainly for like yeah if showing how to set up a project will be in webpack.

Um yeah recursion is like um verifying proofs in other circuits. Um so there's a few examples here. not a ton. >> Um, I can talk through my setup on this Noir password checker app. So, I went to Claude and I was basically like, "Hey, I'm doing a workshop on coding with Noir and I want to create an example project. Like, what should I do my example on?" Um, >> also would be nice to see how you set up the test quest. I've never used that before. Yeah, I'll get I'll get to that.

Um cuz first what I started was with was this prompt. It's like oh I want to start a new app. Um and it's like okay here's someam here's some ideas for circuits you could write. It was like age checker um password strength checker. Then there were some like more advanced ones. I don't I don't recall I don't like the age checker one that much because like you essentially need if you just rely on user input and proofs it's like not secure. you're just trusting someone to be honest, which ZK Ps don't help with that. So, I was like, "Oh, password password checker." Like, let's do that one. Password checker is kind of cool because I can create a circuit that checks that a password is a certain length and has a certain number of uppercase and lowercase letters and

certain number of special characters. I can just give you a proof. You can check that it like meets all these criteria without you actually knowing password. Like, oh, that's kind of cool. Like, and could actually be useful if like some security team wants to implement that. Um, so I was like, "Okay, cool. Let's do that. Write me a product requirements document that describes what I should build or what I should implement for this um, password checker app." I told Cloud to do this. Um, the Taskmaster MCP specifically asked for product requirement documents and they're like generally I mean kind of extensive with user stories and all the features and like functional requirements. But I just tell Claude to write this and it writes

I didn't edit anything in this. Um there's an executive summary summary. So it's the privacy preserving web application that allows users to prove passwords meet security requirements without re revealing the password using Zj Snarks with noir. They demonstrate their password policies while maintaining privacy. Okay, cool. Problem statement goals and objectives target users core user stories. Um, and some of my other side projects, like I'm building a Discord bot using this Taskmaster thing, and it's super effective. Um, but I actually edited some of the stuff that they wrote for me in the PRD. I'm like, "Oh, I don't actually want the user story to do these two things." And then I added two more

things to this other thing. So, I did very minor edits to the PRD before I pasted it into my project. But basically, my repo started started the project and I just put prd.txt txt. >> And then I opened this up and I ran I just did the command that's like taskmaster initialize my project based on my PRD. I just ran that prompt and it created this folder. Uh well it created a couple things. It created all these rules. A lot of these rules are related developer workflow and improvement and taskmaster. So these all came with the taskmaster package and like this is what you get when you install Taskmaster. But like I ran the initialize and it set up all these

tasks. So um don't really need to read the details but kind of just like getting a sense of like it creates it analyzes the PRD and it's like okay here's highly like the high level what they want to do. Here's the complexity of various components like what do I need to do? It does all the analysis research. Okay, there's task ID one. This one got complex, so they added uh five subtasks. Um, and it will work on each subtask individually. They're kind of like scopes, so they can be done independently. Um, there's a dependencies list. So like if you look at some of these dependencies, um, like for task two, it's actually

number one is a dependency of number two. So that means task one needs to be completed first. If you look at some of these later ones like task ID 13, it only requires 2, three, and five to be done first. So these have various dependencies. You don't have to go into strict order, but like there is some ordering that's required and it has it defined here. Um there's a description. There's details of what's actually needed for the task. There's a status like deferred means like I actually started this task and I was like wait I don't want to do I don't want to finish this one. This one doesn't sound like fun. there's optimized circuit and comprehensive test cases. I was like they actually didn't give me very good recommendations on optimizing circuits because it didn't know the limitations around like loops

in noir >> are actually unrolled and you can't short you can't short circuit loops or anything like that in ZK circuits and that was largely what it's suggesting which is skip this um but it's basically just making this big task list and then when I open up my project now I'm like okay what is my current task Um >> it's going to be slow in that slow but um is basically doing project management. So the earlier tasks were a lot of like setting up this repo. So it set up the back end. It's a uh express

server. The circuits it wrote all these circuits for me. Um, well, let me run this task thing and I'll go into the circuits cuz that part's actually pretty much complete and I I've coded the whole thing. Um, my current task is setting up the CI and CD pipeline and build scripts which is currently marked as in progress in high priority. Um, yeah, CI would be nice. I think I set up the back end and then I actually haven't set up CI4 yet. So, I need to like set up a testing file for the back end. Um, which isn't the most exciting thing. I pretty much jumped into writing the circuit initially cuz I just wanted to see how good it was at it. Um, and we can actually go over like what's in the

circuit. It did I was very impressed with how well it wrote this motor circuit. Honestly um the circuit takes a password, a password length. These are all private inputs. Nothing's marked as public. Um, it should actually probably be public. It'll cost some improvement. But anyway, it takes the password, password length, the min length and max length of the password, the minimum character types. So like presumably all of these would actually be public. It's just

Yeah. Isaiah did a really good job writing the circuit. And it says like [Music] trying to figure it out.

Let's see if it's in. >> Yeah, this is incred. >> And then I think I'm sure you have all the test probably still pass.

>> It's going to Okay. Yep. All right. That's pass. So, I just made an edit and tested and it's all good. Um, but just going back to actually writing the circuit. Uh [Music] it's asserting that the h the password commitment matches the password when it's actually hashed. Um it's asserting that it meets all the min and max length requirements. And then this is the big biggest chunk of the circuit where it's just checking the special the different character types. So lowerase characters, uppercase characters, has number. Um, when I saw it writing all this stuff, so it wrote

these helper functions to check the character types and I was like, I don't know the character types. I don't want to look up the character types. I don't want to reason through this. And I also don't know the best the best syntax to like actually do all of these checks in a circuit in terms of like there's no bitwise operators in Noir. So like there's different syntax. And I was like I was like I actually don't even know if this is going to work. Um, but it wrote it and I was like, "Okay, now write some tests here." And like I'm looking at the test. I think the tests are actually much easier to read. Um, I probably want to do some more checking to make sure that like um character types actually match like expected character types. I

haven't gotten to the front end yet where I'm actually doing input in a browser and then passing that into the circuit. Um but given these tests I'm like okay at the high level like there's character codes they're being passed into the circuit and then it's checking like lengths um the number of character types and all these things and it's it's doing this it's checking um that the strength is valid. It's just checking that it works at all with mostly zeros. Um it's checking like too short um missing types.

>> You don't need the front end to verify this. just these are just running tests for the circuit and I'm so like um I'm just running like I just add this macro to these function calls in in Noir and just checking that the test should fail. Um and yeah, these last three or four are like failure cases. Um and the first two are success cases. I mean I could probably write a bunch more tests. Um I could have uh cursor write a bunch more tests for me. Uh but I was like happy with the state of this circuit to like start working on the next things. Um for the back end I didn't actually implement any logic yet. I think I just structured it and then um yeah didn't any logic

kit. Then the front end I had it set up uh react app um using Vit and I don't think I have any like proof generation or verification logic in the front end yet either. So like um >> yeah basically what it looks like when I'm working on this project is say what is my next task? Oh my next task is um setting up the CI pipeline. Okay, what's the plan for setting up the CI pipeline? And it lists a plan for me. And it's like, oh, do you want to start executing the me to execute the plan? And I just say yes. And then it's like, okay, run this command. And it's usually like um installing some package or running some

command to get some input or output. And I have it set up. So like I'm approving every command that cursor requests to run. You could turn that off if you're feeling very very you can really trust um the AI overlords. you can just have it uh run everything without checking. But I'm I still like to see the process that it's thinking through um and approving those things manually. But I'm pretty much just clicking yes, run, yes, run, yes, run every single time. Um but it helps me kind of like see into the reasoning process as well. And then um sometimes I'll there'll be llinter errors or or like it'll be editing a file and it reminds me to that I need to do this one thing and I can just like interrupt its flow. like I won't stop its current line of thought, but it'll

finish its thing and I'll just be like, "Okay, implement this other thing that I just thought of." And it will like go implement the other thing, and then it can come back and continue the task if I tell it to. Um, and so far with like my Discord bot project and this project, it's like pretty much what is the what is the next task? Execute the next task. Maybe I'll have to go on GitHub and like run some CI and just like check that CI is working. Um, but then I commit changes, push my branch, just repeat that. It's like kind of insane how little code I'm writing versus how many lines are being written by this agent. And it's like um I haven't also haven't gotten to the part

yet where I'm using these uh like playright or browser tools yet cuz I'm like still basically set up the the outline of the browser. Um and I haven't imported No.JS. I'm not like hitting errors yet. Um it'll be interesting to see like when I hit Noir.js errors of like um with like web assembly likely um how it actually reasons through solving the solving those sorts of issues. Um, but at least like a lot of the annoying parts of the early part of a project where it's like it's non-trivial amount of work to like set up uh testing and front ends and backends and these frameworks and stuff and uh it's kind of just it's actually make me

made me realize how much work it is because even with taskmaster and automating the entire thing I'm still spending like it probably took me an hour of work to get this far of like setting up a back end, writing a circuit and writing the front end and stuff and it's like if I wasn't even using AI tools it would have been a day. >> Um so huge speed improvement. Um and it just makes it more fun. It takes away a lot of the the most tedious annoying parts of of writing code. Um, so my hope for this sort of thing is like it just helps us get these like example applications out in the world in a published place more quickly cuz like this password checker again is like kind of a

kind of a nice idea. I mean, it's not like a super interesting project, but it's like almost easy enough for me to get to something that I can actually publish to a website and just like put it somewhere public so people can see it and try it that I'm like, "Oh, maybe I'll just actually do it." Like, if I had to code all this stuff by hand, there's no way I would take a password checker app like all the way to just publishing an MVP. You know what I mean? So um and also just doing it to like learn how to engage with these tools because the development workflow is so different now than it was like then for me than like two months ago just because of these tools. And um this GitHub MCT is just uh does it make everything natural language for GitHub as well? Uh

>> I haven't enabled it and the reason I haven't is because I do a lot of work in like Aztec pack like the Aztec protocol organization and New Orleans organization repost and I believe well let's just see um let's see what permissions it asks for. I mean it needs a rewrite to your >> I would imagine. So like that would mean it would be good for my personal repos but not necessarily like anything that I'm working on professionally. But like what I do since all of our code at Aztec and Noir is open source like I made I forked the Noir examples repo. Yeah. And now I do like work on my local branch