Practical code examples for common AgentRegistry use cases.
Publish a package to your local registry:
# In your package directory
npm config set registry http://localhost:4873
# Publish
npm publish
# Verify
curl http://localhost:4873/my-package | jq .
Publish a package programmatically:
const fs = require('fs');
async function publishPackage() {
const tarball = fs.readFileSync('./my-package-1.0.0.tgz');
const payload = {
name: 'my-package',
versions: {
'1.0.0': {
name: 'my-package',
version: '1.0.0',
main: 'index.js'
}
},
'dist-tags': { latest: '1.0.0' },
_attachments: {
'my-package-1.0.0.tgz': {
data: tarball.toString('base64')
}
}
};
const res = await fetch('http://localhost:4873/my-package', {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
console.log(await res.json());
}
publishPackage();
Connect to the admin WebSocket and fetch stats:
// First get the token from admin page
const adminRes = await fetch('http://localhost:4873/-/admin');
const html = await adminRes.text();
const token = html.match(/ADMIN_SESSION_TOKEN\s*=\s*['"]([^'"]+)['"]/)[1];
// Connect WebSocket
const ws = new WebSocket(`ws://localhost:4873/-/admin/ws?token=${token}`);
ws.onmessage = (e) => {
const msg = JSON.parse(e.data);
console.log(msg.type, msg.data);
};
ws.onopen = () => {
// Request stats
ws.send(JSON.stringify({ action: 'getStats', payload: {} }));
// Request packages
ws.send(JSON.stringify({ action: 'getPackages', payload: {} }));
};
Manage IP allowlist via WebSocket:
// Enable allowlist in 'allow' mode
ws.send(JSON.stringify({
action: 'updateAllowlistConfig',
payload: { enabled: true, mode: 'allow' }
}));
// Add allowed IP range
ws.send(JSON.stringify({
action: 'addAllowlistEntry',
payload: {
pattern: '192.168.1.0/24',
description: 'Local network'
}
}));
// Test if IP would be allowed
ws.send(JSON.stringify({
action: 'testIP',
payload: { ip: '192.168.1.50' }
}));
Search both local and upstream packages:
async function searchPackages(query) {
const res = await fetch(`http://localhost:4873/-/v1/search?text=${query}`);
const data = await res.json();
return data.objects.map(obj => ({
name: obj.package.name,
version: obj.package.version,
description: obj.package.description,
isLocal: obj.package.isLocal
}));
}
// Usage
const results = await searchPackages('lodash');
console.log(results);
Use the CLI for backups:
# Create backup
bun run cli.ts backup
# Output: Created backup: backups/agentregistry-backup-2026-01-24.zip
# Restore from backup
bun run cli.ts restore backups/agentregistry-backup-2026-01-24.zip
# List available backups
ls -la backups/
Quick test to verify registry is working:
#!/bin/bash
# Create test package
mkdir -p /tmp/test-pkg && cd /tmp/test-pkg
echo '{"name":"test-pkg","version":"1.0.0"}' > package.json
echo 'module.exports = "hello"' > index.js
# Pack and publish
npm pack
npm publish --registry http://localhost:4873
# Verify
curl -s http://localhost:4873/test-pkg | jq '.versions["1.0.0"].name'
# Output: "test-pkg"
# Cleanup
npm unpublish test-pkg@1.0.0 --registry http://localhost:4873 --force