Background: (The Original CryptoCurrency Classroom Project)

In 2012/2013, I was hired to teach an 'IT' class in San Antonio, Texas. At the time, that pretty much meant the following:

  • No one around me had any idea what I was supposed to teach or how I was supposed to teach it.
  • As long as I had a valid reason to bring new technologies into the classroom, I was encouraged to do so, as it was a high school magnet program.

That was until I unleashed a version of Litecoin that allowed students to participate in a local (LAN) blockchain.

Again, this was 2012. Cryptocurrency was just new enough, and news articles about hacking and the dark web scary enough, that anything associated with the word 'crypto' tended to elicit a fair/healthy amount of skepticism. (When the school IT department saw the Bitcoin/Litecoin specific traffic in my classroom, they issued a proclamation that my head was to be removed ASAP.) — It took some convincing, but we all got on the same page eventually!

Enter Google's AntiGravity

After working with Google's AntiGravity for the last few weeks to convert my classroom CTF activities to a portable Docker format (here), I decided to take on something a bit more challenging: Stand up a working cryptocurrency with a focus on education that anyone can use if they know how to type docker-run.

Lesson 1: (Have the AI Create and Consistently Refer to Planning Documents.)

Given a complex task such as 'Let's build a Dockerized cryptocurrency for classroom/educational use,' the first order of business was to define the requirements and develop a plan. Here's what I did:

  • I handed AntiGravity the Litecoin codebase I was using, along with a working Blockchain explorer and compatible CPU miner code. (All stuff I had worked out previously and have a reasonable understanding of.)
  • I explained my requirements to the AI agent: (I told Antigravity how I used the provided program, and I gave it a detailed list of concepts I emphasized in class.)
  • I then asked AntiGravity to create a document called Master_Planning.md. I stated that this document would eventually provide a step-by-step plan to build an application that meets the outlined requirements.
  • I gave it the first step, 'develop peer-to-peer networking code,' and then asked it to suggest the next steps needed to complete the project. We then reviewed and developed the Master_Planning.md document in stages.

Outlining each step in enough detail to start took me about 2 hours. I took my time here because I knew I would use this document to rein in the AI at each step of the process. By the time I was done, I felt it was flexible and provided all the constraints I needed.

Lesson 2: (Is it Vibe Coding or is it Log Analysis?)

Eventually, in software development, you will reach a point where you have many moving parts, some of which are transparent while the application is running. Once I put the AI in charge, tracking the program flow and determining the best route forward given the application's current state proved immediately challenging. I had no idea whether what I saw in the WEB UI was supported by solid underlying mechanics.

  • Example: At one point, the program displayed an IP Address of X.X.X.X in a column on the right side of the WEB UI as a confirmed peer.
  • My Question: Was it actually communicating, or was the web interface a big fat liar? — Twice throughout this process, I learned the WEB UI was indeed a big fat liar, and AntiGravity had created code stubs, intending to come back, but never did.
  • I don't think these AI agents will be unionizing any time soon. It's still probably not ok to treat them harshly when they slack off. Full disclosure: I raised my voice and then promptly apologized. — If AntiGravity is mad at me, it's still accepting my credit card. So we're all good.

It Might be Log Analysis!

  • Programming through Log Analysis: A solid approach.
  • I found that, in many cases, the most effective solution was for the agent to identify where in the code a specific action takes place (connection events, disconnection events, handshakes, new block creation, etc.).
  • I directed the agent to generate verbose log files throughout those sections of the code. (I also had the agent create a document called Logging_Increase.md, where I had it document exactly what logging was increased, what code was used to increase the logging, and what it should do to revert those changes if requested at a later time.)
  • At that point, I would run the program, point the agent to the log files, have it perform a comparative analysis, identify the problem, explain the problem in a separate 'explanation_for_stupid_human.md' file, and propose a solution.
  • I spent a lot of time assessing behaviour like this, adjusting log verbosity, conducting manual assessments, and asking the agent to do the same.
  • Summary: The AI Agent is amazing and now indispensible weapon in my Arsenal. However, it's highly error-prone, and you must be willing to spend time drilling down using technical language and manual review.
  • I really did feel like, throughout this process, that the agent was only as accurate as I was precise and vigilant.

Lesson 3 (Workflow Tip): Create a Folder for 'Future Prompts' and Populate it With Documents While the Agent is Working

  • Early in my journey, I found I would prompt the AI, wait a few minutes, review the results, rinse, repeat.
  • This may seem obvious, but having a folder with simple .txt files ready to go significantly improved my productivity!
  • I would evaluate the look and feel, modular components, or missing features, and develop future task prompts in advance while the slacker AI worked on the current task.
  • This was helpful because once I implemented Feature X and confirmed it was working well, I could navigate to the prompts folder and select the next pre-written starting point.

Lesson 4 (AntiGravity Isn't What I Would Call a Security Nut)

At one point, I built in a wallet import/export feature.

  • This was accessible via an API endpoint.
  • It exported the node user's private keys
  • It had no authentication requirements.
  • I discovered this after it had been there for some time.

Even now, the node user's wallet.dat file, which contains private wallet addresses, is unencrypted within the container.

  • I'm ok with that because I want students to see what it is.
  • In this case, it's not a bug. It's a feature. — Deal with it.

Conclusion

I am, at best, an average coder. I can produce practical applications on my own, but they have always been limited in form, function, or both due to time constraints or my own skill limitations. The last few weeks working with Google's AntiGravity have shown me what a true workforce multiplier can do. It has a long way to go, but it's worth giving a spin if you haven't yet. They have a free tier you can experiment with.

Josh Beck