惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
有赞技术团队
有赞技术团队
B
Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
Apple Machine Learning Research
Apple Machine Learning Research
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
The Cloudflare Blog
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
M
MIT News - Artificial intelligence
Recent Announcements
Recent Announcements
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
博客园 - Franky
小众软件
小众软件

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Vibe Code Your First Midnight dApp with AI Agent Skills
M Zidan Fato · 2026-04-30 · via DEV Community

Your AI coding assistant doesn't know Compact. It knows TypeScript, Solidity, Rust, but Midnight's ZK smart contract language didn't exist when most models were trained. Ask it to write a Compact contract and you'll get plausible-looking code that won't compile.

midnight_agent_skills is a set of 4 agent skills that fix this. Install them once, and your AI assistant has accurate knowledge of Compact syntax, the Midnight SDK, network config, and the gotchas that trip up real builders.

This is a walkthrough of using those skills to build your first Midnight dApp.


What are agent skills?

Agent skills are structured knowledge files that AI coding assistants load at context time. Instead of relying on training data, the assistant reads the skill files directly, so it gets accurate, current information rather than hallucinated guesses.

The midnight_agent_skills package has 4 skills:

  • midnight-concepts: ZK architecture, DUST/NIGHT tokenomics, Kachina protocol
  • midnight-compact: Compact language, circuits, ledger operations, best practices
  • midnight-api: SDK integration, wallet connection, contract deployment
  • midnight-network: Node setup, Docker, indexer, proof server

Step 1: Install the skills

npx skills add https://github.com/mzf11125/midnight_agent_skills

Enter fullscreen mode Exit fullscreen mode

Or pick individual skills:

npx skills add https://github.com/mzf11125/midnight_agent_skills --skill midnight-compact
npx skills add https://github.com/mzf11125/midnight_agent_skills --skill midnight-api

Enter fullscreen mode Exit fullscreen mode


Step 2: Start the proof server

Midnight generates ZK proofs client-side, your data stays on your machine. You need a local proof server running before you can deploy anything.

docker run -p 6300:6300 midnightnetwork/proof-server -- \
  'midnight-proof-server --network preprod'

Enter fullscreen mode Exit fullscreen mode

Check it's up:

curl http://localhost:6300
# We're alive 🎉!

Enter fullscreen mode Exit fullscreen mode


Step 3: Scaffold your project

npx create-midnight-app my-first-dapp
cd my-first-dapp

Enter fullscreen mode Exit fullscreen mode


Step 4: Write your contract

Open your AI assistant and ask it to write a Midnight contract. With the skills loaded, it knows the correct syntax.

Here's a simple owner-gated counter, only the deployer can increment it:

pragma language_version >= 0.20;
import CompactStandardLibrary;

export ledger counter: Counter;
export ledger owner: Bytes<32>;

witness local_secret_key(): Bytes<32>;

export circuit initialize(): [] {
  const pk = publicKey(local_secret_key()).bytes;
  owner.write(disclose(pk));
}

export circuit increment(): [] {
  const caller = publicKey(local_secret_key()).bytes;
  assert(disclose(caller) == owner.read(), "Not authorized");
  counter.increment(1);
}

Enter fullscreen mode Exit fullscreen mode

Things the skills teach your AI that it wouldn't otherwise know:

  • export circuit not function, circuits declare constraints, they don't execute
  • disclose() is required when moving witness data to the public ledger, the compiler rejects code without it
  • Counter uses .increment() and .read(), not .value()
  • No recursion, no unbounded loops, circuits must compile to a fixed-size constraint system

Step 5: Compile

compact build src/counter.compact src/managed/counter

Enter fullscreen mode Exit fullscreen mode

Success looks like:

Fetching public parameters for k=10 [====================] 192.38 KiB
  circuit "increment" (k=10, rows=29)
Overall progress [====================] 1/1

Enter fullscreen mode Exit fullscreen mode


Step 6: Deploy

With the midnight-api skill loaded, your AI generates the correct facade 4.x pattern:

import { WalletFacade } from '@midnight-ntwrk/wallet-sdk-facade';
import { CounterContract } from './managed/counter/contract/index.js';

// facade 4.x, the old WalletFacade.init() hangs silently on standalone nodes
const wallet = new WalletFacade(shielded, unshielded, dust);
await wallet.start();

const contract = new CounterContract();
const deployed = await contract.deploy(providers, { privateCounter: 0 });
console.log('Deployed at:', deployed.deployTxData.public.contractAddress);

Enter fullscreen mode Exit fullscreen mode

The skills include the SDK compatibility matrix. Your AI knows that wallet-sdk-facade@2.x uses WalletFacade.init() which hangs silently on standalone nodes, and that 4.x switched to new WalletFacade(...) + .start().


Step 7: Run a pre-flight check

Before you spend hours debugging, run:

npx midnight-doctor

Enter fullscreen mode Exit fullscreen mode

It reads your package.json, running Docker containers, and config files, then cross-references them against a known compatibility matrix. The midnight-api skill documents the most common silent failures:

Symptom Root cause
waitForSyncedState() hangs forever facade 2.x + standalone node mismatch
Transactions silently fail Duplicate @midnight-ntwrk/ledger-v7 in node_modules
Indexer crash-loops Missing subscription: block in indexer.yml

What the skills know that your AI doesn't

The skills pull from the official Midnight docs plus 19 community articles from the Midnight Aliit Fellowship, builders documenting real production failures.

Mental model shifts:

  • Circuits declare constraints, they don't execute. assert is a constraint declaration, not a runtime guard, if the condition is false, the proof can't be generated.
  • disclose() is a compile-time annotation, not encryption. The compiler tracks witness data through arithmetic and rejects undeclared disclosures.
  • Block limits are hard limits, not gas costs. BlockLimitExceeded means your transaction can't execute at all.

On-chain design patterns:

  • Flat maps over struct maps, reading a struct pulls every field into the circuit
  • Off-chain computation + Merkle root, the chain verifies, it doesn't compute
  • Minimal on-chain state, only what the chain needs to enforce

Common syntax gotchas:

  • counter.read() not counter.value()
  • Enum access uses . not ::, GameState.playing not GameState::playing
  • Witness functions have no body, declaration only
  • return inside for loops is not allowed, use fold

Install and start building

npx skills add https://github.com/mzf11125/midnight_agent_skills

Enter fullscreen mode Exit fullscreen mode

The skills are open source. If you hit a pattern that's missing, PRs are open.

Repo: https://github.com/mzf11125/midnight_agent_skills