Skip to content

Instantly share code, notes, and snippets.

View jkschneider's full-sized avatar

Jonathan Schnéider jkschneider

View GitHub Profile

Moderne: The Platform for Multi-Repository Agentic Workflows

The Problem

AI coding agents are powerful but fundamentally single-repository tools. When an organization needs to make changes across dozens, hundreds, or thousands of repositories—whether migrating frameworks, fixing vulnerabilities, or enforcing standards—they face a gap:

Agents can edit code. But who orchestrates the fleet?

Moderne's Unique Value

@jkschneider
jkschneider / organization.yml
Last active February 18, 2025 18:23
Put in `/.moderne/organization.yml`
name: Equifax
metadata: false
devCenterConfiguration:
upgradesAndMigrations:
- title: Spring Boot 3
measures:
- name: Major
recipe:
id: org.openrewrite.java.dependencies.search.FindMinimumDependencyVersion
options:
#
# Copyright 2024 the original author or authors.
# <p>
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# <p>
# https://www.apache.org/licenses/LICENSE-2.0
# <p>
# Unless required by applicable law or agreed to in writing, software
@jkschneider
jkschneider / abstract.md
Created April 8, 2018 14:05
Repave and repair talk

Repave and repair your applications with confidence

If a security vulnerability is reported in a common java library today, would you be able to identify affected applications and repair your whole organization before dinner time?

In this talk, we're going to stitch together a continuous delivery platform, application monitoring, automated canary analysis, and organization-wide code search to show you how you can identify affected applications in minutes and repair your organization's code. We'll start with the assumption that we are working with a complex multi-platform (some K8S, some GCP, multiple Cloud Foundry foundations over private VSphere) environment like those found in many organizations.

Some of the tools we'll demonstrate include Spinnaker for continuous delivery, Kayenta for automated canary analysis, Micrometer for metrics collection, Prometheus for monitoring, and Rewrite for code search.

Bio

How many places does my birthday exist in our source code?

Let's get a bit more specific. How many places does the year of my birthdate exist in a literal somewhere in the codebase. Comments don't count. Variable names don't count.

Can you imagine doing something like this with a regular expression?

// 12-05-1983
class Hey {
  void itsYourBirthday() {
⚠️
📈
///usr/bin/env jbang "$0" "$@" ; exit $?
//DEPS com.konghq:unirest-java:3.14.2
import kong.unirest.HttpResponse;
import kong.unirest.Unirest;
import kong.unirest.UnirestException;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.io.*;
import java.util.concurrent.*;
import java.util.function.Consumer;
ExecutorService executorService = Executors.newSingleThreadExecutor();
System.out.println("Executing command: " + args[0]);
try {
Process proc = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", args[0]});
StringBuilder sb = new StringBuilder();
Result "org.openrewrite.benchmarks.java.StarImportBenchmark.noStarImport":
N = 238
mean = 333.142 ±(99.9%) 10.826 ms/op
Histogram, ms/op:
[200.000, 225.000) = 0
[225.000, 250.000) = 0
[250.000, 275.000) = 19
[275.000, 300.000) = 59
[300.000, 325.000) = 56
package io.moderne.common.monitoring;
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.binder.MeterBinder;
import org.openrewrite.internal.lang.NonNull;
import oshi.SystemInfo;
import oshi.hardware.GlobalMemory;