MoreRSS

site iconThe Practical DeveloperModify

A constructive and inclusive social network for software developers.
Please copy the RSS to your reader, or quickly subscribe to:

Inoreader Feedly Follow Feedbin Local Reader

Rss preview of Blog of The Practical Developer

Solved: Surveiller le cloud (GCP, AWS) avec Centreon? ou AlertManager?

2026-01-27 23:13:48

🚀 Executive Summary

TL;DR: Organizations face a dilemma monitoring hybrid cloud (AWS, GCP) and on-premise infrastructure: extend traditional Centreon or adopt cloud-native Prometheus/AlertManager. The article compares these approaches, including a hybrid model, to guide selection based on infrastructure dynamics and operational needs.

🎯 Key Takeaways

  • Centreon, using API-based Plugin Packs, offers a unified dashboard and leverages existing IT skillsets for monitoring stable hybrid environments, but can face latency and scalability issues with ephemeral cloud resources.
  • Prometheus and AlertManager are designed for dynamic, cloud-native, and containerized workloads, featuring powerful service discovery, PromQL for flexible querying, and an efficient time-series data model.
  • A hybrid strategy, where Prometheus collects cloud-native metrics and forwards critical alerts via AlertManager webhooks to Centreon, allows leveraging Prometheus’s flexibility while maintaining Centreon’s mature centralized alert management.

Choosing between Centreon and Prometheus with AlertManager for cloud monitoring in AWS and GCP requires a deep dive into architecture, scalability, and integration. This guide compares both solutions, provides configuration examples, and outlines a hybrid approach to help you select the right toolset for your cloud and on-premise infrastructure.

The Challenge: Cloud Monitoring Crossroads

You’re managing a hybrid infrastructure with critical workloads on-premise and across multiple cloud providers like AWS and GCP. Your existing monitoring stack, perhaps built around a traditional tool like Centreon, is robust for your servers and network gear. However, as you scale in the cloud, you face a new set of challenges:

  • Ephemeral Infrastructure: Cloud resources (VMs, containers, functions) are created and destroyed dynamically. Traditional host-based, static monitoring struggles to keep up.
  • Service-Oriented Metrics: You need to monitor managed services like RDS, S3, BigQuery, and Pub/Sub, which don’t have an “agent” you can install. Monitoring is done via APIs (e.g., CloudWatch, Google Cloud Monitoring).
  • Metric Volume and Cardinality: Cloud-native applications, especially those using microservices and containers, generate a massive volume of high-cardinality metrics (e.g., metrics per container ID).
  • Tooling Mismatch: The question arises—do you extend your existing, trusted tool (Centreon) to the cloud, or adopt a cloud-native stack like Prometheus and AlertManager?

This decision impacts everything from team skillset requirements to the reliability of your alerting. Let’s explore three practical solutions to this common problem.

Solution 1: The Centreon-Centric Approach

For organizations with a significant investment in Centreon, extending it to monitor the cloud is a logical first step. This approach leverages Centreon’s powerful framework and connects it to cloud provider APIs, treating cloud services as just another set of resources to be monitored.

How It Works

Centreon integrates with cloud platforms primarily through its “Plugin Packs” and the underlying Nagios-style plugins. The workflow is typically:

  1. Connectors: You use specific monitoring plugins (like centreon-plugin-Cloud-Aws-Api or centreon-plugin-Cloud-Gcp-Api) that query the cloud provider’s monitoring API (e.g., AWS CloudWatch, Google Cloud Monitoring).
  2. Authentication: The Centreon poller is configured with secure credentials (e.g., an AWS IAM user with specific permissions or a GCP Service Account key) to authenticate against the API.
  3. Service Checks: You define service checks in Centreon that execute these plugins. For example, a check for an AWS RDS instance would call the plugin, which in turn queries the CloudWatch API for metrics like CPUUtilization or FreeableMemory.
  4. State-Based Alerting: Centreon evaluates the returned metrics against predefined WARNING and CRITICAL thresholds and generates alerts based on state changes (OK, WARNING, CRITICAL, UNKNOWN).

Example: Monitoring an AWS EC2 Instance’s CPU

First, you install the necessary AWS plugin on your Centreon poller. Then, within the Centreon UI, you would configure a new host and a service check. The underlying command might look something like this:

/usr/lib/centreon/plugins/centreon_aws_ec2_api.pl \
--plugin=cloud::aws::ec2::plugin \
--mode=cpu \
--aws-secret-key='SECRET_KEY' \
--aws-access-key='ACCESS_KEY' \
--region='eu-west-1' \
--dimension-name='InstanceId' \
--dimension-value='i-0123456789abcdef0' \
--warning-cpu-utilization='80' \
--critical-cpu-utilization='95'

This command checks the CPU utilization for a specific EC2 instance (i-0123456789abcdef0) and will change state if the utilization exceeds 80% (Warning) or 95% (Critical).

Pros & Cons

  • Pros:
    • Unified Dashboard: Provides a single pane of glass for both on-premise and cloud resources.
    • Existing Skillset: Your team can leverage their existing Centreon expertise.
    • Mature Alerting: Benefits from Centreon’s robust notification, escalation, and dependency logic.
  • Cons:
    • API Polling Latency: Relies on periodic polling of cloud APIs, which can have delays (e.g., CloudWatch metrics can have a 1-5 minute lag).
    • Scalability Concerns: Can become cumbersome and slow if you are polling thousands of cloud resources, potentially hitting API rate limits.
    • Less Suited for Ephemeral Resources: Auto-discovery of resources is possible but often requires more complex configuration compared to cloud-native solutions.

Solution 2: The Prometheus & AlertManager Stack

This approach embraces the cloud-native ecosystem. Prometheus is a pull-based monitoring system designed for the dynamic, service-oriented world of containers and microservices, making it a natural fit for monitoring cloud environments.

How It Works

The Prometheus stack uses a different paradigm:

  1. Exporters & Service Discovery: Instead of agents, Prometheus “scrapes” metrics from HTTP endpoints. For cloud services, you use specialized exporters (e.g., stackdriver_exporter for GCP, cloudwatch_exporter for AWS) that query the cloud APIs and expose the metrics in a Prometheus-compatible format. Crucially, Prometheus has built-in service discovery for AWS (EC2) and GCP (GCE), automatically finding new instances to monitor.
  2. Time-Series Database (TSDB): Prometheus stores all data as time-series, which is highly efficient for the high volume of metrics from cloud applications.
  3. PromQL: You query and analyze data using the powerful Prometheus Query Language (PromQL), which allows for complex aggregations and calculations on the fly.
  4. AlertManager: Alerting rules are defined in Prometheus based on PromQL expressions. When an alert fires, it is sent to AlertManager, which handles deduplication, grouping, silencing, and routing of notifications to different receivers (Slack, PagerDuty, email, etc.).

Example: Scraping GCP Metrics and Alerting on High CPU

Your prometheus.yml configuration would use service discovery to find and scrape metrics from all GCE instances in a project:

# prometheus.yml
scrape_configs:
  - job_name: 'gcp-gce-instances'
    gce_sd_configs:
      - project: 'your-gcp-project-id'
        zone: 'europe-west1-b'
        port: 9100 # Assuming node_exporter is running on this port
    relabel_configs:
      - source_labels: [__meta_gce_instance_name]
        target_label: instance

Next, you would define an alerting rule in a separate file (e.g., gce_alerts.yml):

# gce_alerts.yml
groups:
- name: gce_instance_alerts
  rules:
  - alert: HighCpuUtilization
    expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
    for: 10m
    labels:
      severity: critical
    annotations:
      summary: "High CPU utilization on {{ $labels.instance }}"
      description: "{{ $labels.instance }} has had a CPU utilization above 90% for the last 10 minutes."

This rule will fire if any instance’s CPU utilization (calculated from the node_exporter metric) remains above 90% for 10 minutes. AlertManager would then take over to route the notification.

Pros & Cons

  • Pros:
    • Cloud-Native Design: Built for dynamic, ephemeral environments with powerful service discovery.
    • Powerful Query Language: PromQL is extremely flexible for slicing and dicing metrics.
    • Vibrant Ecosystem: A huge number of official and community-built exporters, integrations, and dashboards (e.g., Grafana).
  • Cons:
    • Steeper Learning Curve: Requires learning PromQL and a new operational model (pull vs. push/check).
    • Not a Complete Solution: Prometheus focuses on metrics. For logs (Loki) and traces (Tempo), you often need to add other components. Centreon offers a more all-in-one experience.
    • Long-Term Storage: Requires a separate solution like Thanos or Cortex for long-term, highly available metric storage.

Head-to-Head Comparison: Centreon vs. Prometheus/AlertManager for Cloud

Feature Centreon Prometheus & AlertManager
Architecture Centralized pollers executing checks (push/active check model). State-based (OK, WARN, CRIT). Decentralized scrapers pulling metrics from endpoints. Stores data as time-series.
Cloud Integration Via API-based plugins (Plugin Packs). Requires manual or semi-automated configuration of hosts/services. Native service discovery for major cloud providers. Uses exporters to query cloud APIs (e.g., cloudwatch_exporter).
Dynamic Environments Can be challenging. Relies on auto-discovery modules or API scripts to keep configuration in sync. Excellent. Service discovery automatically detects and removes targets as they are created and destroyed.
Alerting Mature and powerful. Features complex dependencies, acknowledgements, scheduled downtime, and escalation chains built-in. Highly flexible rules via PromQL. AlertManager handles grouping, silencing, and routing but lacks Centreon’s deep dependency logic out-of-the-box.
Data Model Stores performance data (RRDtool) and state. Less suited for high-cardinality metrics. Time-series with labels. Optimized for high-volume, high-cardinality data from sources like containers.
Best For Hybrid environments with a strong on-premise footprint. Teams invested in a traditional ITIL/NOC workflow. Cloud-native, containerized, and microservice-based workloads. DevOps teams that value flexibility and integration.

Solution 3: The Hybrid Approach – Best of Both Worlds?

You don’t always have to choose. A hybrid approach can be a powerful strategy, especially during a transition period or in complex environments where each tool plays to its strengths.

How It Works

The goal is to integrate the two systems. A common and effective pattern is to use Prometheus for what it does best (collecting cloud-native metrics) and feed critical alerts into Centreon to leverage its powerful notification engine.

  1. Prometheus scrapes metrics from cloud services and applications.
  2. Alerting rules are defined in Prometheus.
  3. When an alert fires, Prometheus sends it to AlertManager.
  4. AlertManager is configured with a webhook_config receiver that forwards the alert to a custom script or API endpoint on the Centreon side.
  5. This script then uses the Centreon API (or a passive check mechanism like NSCA/Gorgone) to create/update a service status within Centreon.

This way, your Network Operations Center (NOC) can still use Centreon as their single source of truth for alerts, while your DevOps teams can leverage the power and flexibility of Prometheus for cloud monitoring.

Example: Forwarding Prometheus Alerts to Centreon

In your alertmanager.yml, you would define a receiver that points to a webhook listener on your Centreon server:

# alertmanager.yml
route:
  receiver: 'centreon-webhook'

receivers:
- name: 'centreon-webhook'
  webhook_configs:
  - url: 'http://your-centreon-server/path/to/webhook-listener.php'
    send_resolved: true

The webhook-listener.php script would be responsible for parsing the JSON payload from AlertManager and translating it into a passive check result for a corresponding service in Centreon. For example, it could extract the alert’s status (‘firing’ or ‘resolved’) and map it to a Centreon state (CRITICAL or OK).

When to Use This Approach

  • You have a mature Centreon deployment with complex on-call schedules, escalations, and reporting that you cannot easily replicate.
  • Your DevOps teams need the flexibility of Prometheus and PromQL for monitoring dynamic cloud applications.
  • You are in a multi-year transition from traditional infrastructure to the cloud and need a bridge between the two monitoring worlds.

Conclusion: Making the Right Choice

The choice between Centreon and Prometheus/AlertManager is not just about technology; it’s about matching the tool to your architecture, your team, and your operational model.

  • Go with Centreon if your primary focus is on providing a unified view of a stable, hybrid infrastructure and you value its mature, all-in-one feature set for traditional IT operations.
  • Choose Prometheus & AlertManager if your infrastructure is heavily cloud-native, containerized, and dynamic. This stack is built for the scale and ephemerality of modern cloud environments.
  • Consider a Hybrid approach to leverage the strengths of both platforms, using Prometheus for cloud data collection and Centreon for centralized alert management and reporting. This offers a pragmatic path forward for complex organizations.

Ultimately, the best solution is one that provides clear, actionable insights into the health of your systems, regardless of where they run.

Darian Vance

👉 Read the original article on TechResolve.blog

Support my work

If this article helped you, you can buy me a coffee:

👉 https://buymeacoffee.com/darianvance

Solved: Please stop recommending ChatGPT for logo design.

2026-01-27 23:11:27

🚀 Executive Summary

TL;DR: AI-generated logos create significant technical debt for IT professionals due to their non-scalable raster format, workflow bottlenecks, and high copyright risk. The article advocates for treating logos as technical assets, proposing solutions like emergency command-line vectorization, self-service SVG toolkits, and a “Design-as-Code” CI/CD pipeline for sustainable, scalable asset management.

🎯 Key Takeaways

  • AI image generators produce non-scalable, fixed-resolution raster images (PNG/JPEG) that are unsuitable for logos, leading to blurriness at different sizes and inability to be programmatically styled.
  • Emergency vectorization can be performed using Inkscape’s command-line interface (e.g., inkscape –actions=”file-open:file.png;trace-bitmap;export-filename:file.svg;export-do”) to convert raster images to a scalable SVG format, though the output may require further optimization.
  • A “Design-as-Code” workflow integrates professional design tools with CI/CD pipelines, utilizing Git for version control and tools like SVGO (npx svgo –folder=src/assets/svg –output=dist/assets/svg) for automated SVG optimization, ensuring technically sound and brand-consistent assets.

AI image generators are powerful but produce non-scalable, legally ambiguous raster images unsuitable for logos. This guide explains the technical pitfalls of using tools like ChatGPT for logo design and provides scalable solutions for IT professionals, from emergency vectorization to integrating proper design assets into a CI/CD pipeline.

Symptoms: The Technical Debt of an AI-Generated Logo

You’ve seen it happen. A project manager or a junior developer, empowered by the latest AI tools, proudly presents a “logo” for a new internal service, generated in seconds via a prompt to ChatGPT or Midjourney. While the initial concept might be interesting, the asset itself is the beginning of a long chain of technical debt. This is not a critique of the idea, but a diagnosis of the deliverable.

As a DevOps or IT professional, you’re the one who has to integrate this asset into production systems, and the symptoms of a poor foundation become immediately apparent:

  • The Unusable Raster Asset: The logo is invariably a 72 DPI, 1024×1024 pixel PNG or JPEG file. It looks fine in a chat window, but when you try to use it as a 32×32 pixel favicon, it becomes a blurry mess. When a marketing colleague asks for a high-resolution version for a banner, it’s unusable. It cannot be scaled, its colors cannot be programmatically changed for a dark mode theme, and it’s fundamentally a dead end.
  • The Workflow Bottleneck: The front-end application requires an SVG for clean rendering. The CI/CD pipeline needs a monochrome version for build status notifications. The technical documentation needs a variant with a transparent background. The single, flat raster image fails all of these use cases, creating an immediate, unplanned work item: “Fix the logo.”
  • The Copyright Ticking Time Bomb: The most severe symptom is the legal and compliance ambiguity. Who owns this AI-generated image? What training data was used to create it? Does it inadvertently copy protected elements from existing trademarks? Using such an asset for any public-facing or business-critical application is an unacceptable risk. The terms of service for many AI generators are murky at best regarding commercial use and ownership.

This isn’t a design problem; it’s an engineering problem. You’ve been handed a poorly built dependency, and now you have to manage the fallout.

Solution 1: Emergency Triage – Command-Line Vectorization

It’s 4:00 PM on a Friday and the deployment is blocked waiting for a usable favicon. You don’t have time to engage a designer. The immediate goal is to convert the provided raster image into a scalable vector graphic (SVG). This is a lossy, imperfect process, but it can unblock you in an emergency.

We can use the powerful, open-source vector graphics editor Inkscape, which has a robust command-line interface perfect for scripting. The goal is to use its “Trace Bitmap” functionality to generate SVG paths from the pixels.

Steps for CLI Vectorization:

  1. Install Inkscape on your machine or a build agent. Ensure it’s available in your system’s PATH.
  2. Place the raster logo (e.g., crappy-logo.png) in your working directory.
  3. Run the Inkscape command to perform the tracing and export. The modern Inkscape CLI uses an action-based system.
inkscape --actions="file-open:crappy-logo.png;select-all:all;trace-bitmap;export-filename:logo-traced.svg;export-do;file-close"

This command performs the following actions in sequence:

  • file-open:crappy-logo.png: Opens the input file.
  • select-all:all: Selects the image object on the canvas.
  • trace-bitmap: Runs the default bitmap tracing algorithm. You can add parameters for more control (e.g., trace-bitmap:scans,8 for 8 color layers).
  • export-filename:logo-traced.svg: Sets the output file name.
  • export-do: Executes the export.
  • file-close: Closes the file without saving changes to the original.

Result: You now have a logo-traced.svg file. This SVG is often complex, with many unnecessary nodes, and may have visual artifacts. It will likely need manual cleanup in Inkscape’s GUI or optimization, but it’s a scalable vector format that can get you through the immediate deployment.

Solution 2: The Sustainable Stopgap – A Self-Service SVG Toolkit

The best way to fix a recurring problem is to provide better tools and processes. Instead of letting team members resort to external AI generators, empower them to create simple, consistent, and technically sound assets for internal projects. Since SVG is just XML, developers can create and modify it with code.

Hand-Crafted SVGs for Internal Tools

For a new microservice or an internal dashboard, a complex, artistic logo is overkill. A simple, geometric logo is often sufficient. You can create a template that developers can easily modify.

Here is an example of a simple, hand-written SVG for a tool called “BuildBox”. It’s just a box with a checkmark, using your company’s approved brand colors.

<svg width="100" height="100" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
  <!-- A simple, solid background box with rounded corners -->
  <rect 
    x="5" y="5" 
    width="90" height="90" 
    rx="10" ry="10" 
    fill="#333F4F" /> <!-- Your company's primary dark color -->

  <!-- A 'check' symbol to indicate success/builds -->
  <path 
    d="M30 50 L45 65 L70 40" 
    stroke="#4CAF50" <!-- Your company's success color -->
    stroke-width="8" 
    fill="none" 
    stroke-linecap="round" 
    stroke-linejoin="round" />
</svg>

A developer can copy this, change the fill and stroke colors, or adjust the path data to create a different icon. It’s version-controllable, incredibly lightweight, and requires no specialized tools.

Solution 3: The Professional Fix – Integrating Design into the CI/CD Pipeline

For any customer-facing product or long-running project, logos and other design assets must be treated as first-class citizens of the development lifecycle. This means engaging professional designers and integrating their output into your automated workflows—a “Design-as-Code” approach.

The “Design-as-Code” Workflow

  1. Source of Truth: A designer creates the logo in a professional vector tool like Adobe Illustrator or Figma. The master file is stored and versioned.
  2. Commit to Git: The designer exports a “raw” but clean SVG from the source file and commits it to a specific directory in the project’s Git repository (e.g., /src/assets/svg).
  3. Automated Optimization: A CI pipeline (e.g., GitHub Actions, GitLab CI) triggers on any change to the SVG asset directory. The pipeline runs a tool like SVGO (SVG Optimizer) to clean, compress, and standardize the assets.

Here’s an example command for an SVGO optimization step in a CI script:

# Install SVGO as a dev dependency in your project
npm install --save-dev svgo

# Run SVGO from your package.json scripts or CI file
# This command processes a folder, outputs to a build folder,
# and keeps the code human-readable.
npx svgo --folder=src/assets/svg --output=dist/assets/svg --pretty --indent=2

This process ensures that every logo and icon in your system is:

  • Professionally designed: Aligned with brand guidelines.
  • Technically sound: A clean, optimized SVG.
  • Version controlled: Changes are tracked in Git.
  • Automated: No manual “can you export this for me” requests.

Comparison: Choosing the Right Tool for the Job

To put it all in perspective, here is how the different approaches stack up against key technical requirements.

Feature AI Image Generator Self-Service SVG Professional Design Workflow
Scalability (Vector vs. Raster) Raster. Poor scalability. Vector. Infinitely scalable. Vector. Infinitely scalable.
Editability Extremely difficult. A flat image. Simple. Edit colors and shapes in code. Excellent. Master files are fully editable.
Copyright Risk High. Ownership is ambiguous. None. The asset is original code. None. Clear work-for-hire ownership.
Brand Consistency Very low. AI has no context of your brand. Moderate. Can use brand colors and simple shapes. High. Enforces brand guidelines.
Initial Speed Very fast (seconds). Fast (minutes). Slow (hours to days).
Long-term Maintainability None. It’s a dead-end asset creating debt. Good. Version controlled and easy to update. Excellent. Managed and automated pipeline.

While AI image generation is a fascinating technology, it is the wrong tool for creating foundational brand assets like logos. By treating logos as critical technical assets and applying engineering principles to their management, you can avoid technical debt and build more robust, professional systems.

Darian Vance

👉 Read the original article on TechResolve.blog

Support my work

If this article helped you, you can buy me a coffee:

👉 https://buymeacoffee.com/darianvance

MCP Server: Talk to Your Architecture from Your Favorite AI Tools

2026-01-27 23:09:41

I've been using AI coding assistants daily for over a year now.

Claude Code for complex refactoring, Cursor for quick edits, GitHub Copilot for autocomplete. But there was always a frustrating gap: these tools couldn't see my architecture documentation.

Every time I asked Claude to "add a new endpoint to the payment service," it would guess. It didn't know that our payment service talks to Stripe, uses Redis for caching, and has specific security requirements documented in our ADRs. I'd spend more time correcting the AI than writing code myself.

Today, we're closing that gap. Archyl now exposes a full MCP (Model Context Protocol) server with 56 tools that give AI assistants complete visibility into your architecture.

What is MCP?

Model Context Protocol is Anthropic's open standard for connecting AI assistants to external tools and data sources. Think of it as a universal adapter between LLMs and the systems they need to interact with.

Instead of copy-pasting context into prompts, MCP lets AI assistants directly query your tools. They can read data, take actions, and stay synchronized with your actual systems.

And Archyl's MCP server means your architecture documentation becomes a first-class data source for any AI assistant.

What Can You Do With It?

Here's where it gets exciting. With the Archyl MCP server, your AI assistant can:

Query Your Architecture

Ask natural questions and get real answers:

"Which elements are linked to the Payment Processor system?"
"What containers does the User Service depend on?"
"Show me all systems that interact with our PostgreSQL database"
"What ADRs affect the authentication flow?"
The AI doesn't guess. It queries your actual documented architecture and returns precise, structured information.

Claude Code querying architecture via MCP

Navigate the C4 Model

Your AI understands the full hierarchy:

List all projects in your organization

Drill down from systems to containers to components
Explore relationships and dependencies
Understand the technology stack at each level
When you ask "what technologies does the Order Service use?", the AI returns the actual documented stack, not a hallucinated guess.

Modify Documentation

This is the killer feature. The MCP server supports write operations:

Create new systems, containers, and components

Add relationships between elements
Create and update ADRs
Write project documentation
Define user flows
Ask Claude to "document the new notification service we just built" and it can create the C4 elements, link them to existing systems, and even draft an ADR explaining the design decision.

Stay in Sync

The AI always sees the latest state. No stale context, no outdated documentation. When your teammate updates the architecture, your AI assistant sees it immediately.

56 Tools, One Integration
We didn't build a minimal proof-of-concept. The MCP server exposes comprehensive functionality:

Projects & Settings: List, get, and manage projects. Configure AI providers and discovery settings.

C4 Model (All 4 Levels): Full CRUD for systems, containers, components, and code elements. Create relationships, manage overlays, handle the complete model hierarchy.

Documentation: Create and update architecture documentation. Link docs to specific C4 elements.

ADRs: Full Architecture Decision Record management. Create, update, list, and link ADRs to the elements they affect.

User Flows: Define and visualize user journeys through your system.

Discovery: Trigger AI-powered architecture discovery on your connected repositories.

Teams: Query team structure and project access.

Every tool returns structured data that AI assistants can reason about. No parsing HTML, no scraping UIs, no brittle integrations.

Getting Started in 2 Minutes

Here's how to connect Claude Code (or any MCP-compatible tool):

Step 1: Create an API Key

Go to your Archyl profile, click on "API Keys", and create a new key. Give it a descriptive name like "Claude Code" and select the scopes you need (read-only or full access).

Copy the key immediately — you won't see it again.

Step 2: Configure Your MCP Client

Add Archyl to your MCP configuration. For Claude Code, add this to your settings:

{
"mcpServers": {
"archyl": {
"url": "https://api.archyl.com/mcp",
"transport": "http",
"headers": {
"X-API-Key": "your_api_key_here"
}
}
}
}

Step 3: Start Talking to Your Architecture

That's it. Ask your AI assistant about your architecture and watch it fetch real data from Archyl.

Try these prompts:

"List all my Archyl projects"
"What systems exist in the E-commerce Platform project?"
"Show me the relationships for the Payment Gateway"
"Create a new ADR explaining why we chose PostgreSQL"
Why This Matters
Architecture documentation has always had a discoverability problem. You write it, it lives in a wiki or a diagram somewhere, and then nobody reads it. Engineers ask questions in Slack instead of checking the docs.

MCP changes the interaction model. Documentation isn't something you go read — it's something your AI assistant knows. When you ask "how does payment processing work?", the answer comes from your actual architecture, not the AI's training data.

This has profound implications:

Onboarding becomes instant. New engineers ask their AI about system architecture and get accurate answers from day one.

Context is always available. When writing code, the AI knows exactly what services exist, how they connect, and what decisions shaped them.

Documentation stays current. Because it's actively used, inaccuracies get noticed and fixed. Dead documentation is documentation nobody reads.

AI suggestions are grounded. When Claude suggests a design, it's informed by your actual architecture, not generic patterns.

The Bigger Picture

We're entering an era where AI assistants are genuine collaborators in software development. But they're only as good as the context they have access to.

Most AI interactions today are context-poor. You paste some code, add a brief description, and hope the AI figures out the rest. The results are mediocre because the AI is working blind.

MCP-powered integrations flip this model. Your AI has persistent, queryable access to everything it needs: your code (via repository integration), your architecture (via Archyl), your issues (via Jira/Linear integrations), your documentation (via Notion/Confluence integrations).

The AI becomes a true team member with access to team knowledge.

Archyl's MCP server is our contribution to this vision. Your architecture shouldn't be locked in a diagram tool. It should be accessible to every tool your team uses, including your AI assistants.

What's Next

This is version 1. Here's what we're building next:

Proactive suggestions: The MCP server could watch for architecture changes and suggest documentation updates.

Cross-reference linking: Connect ADRs to specific commits, link documentation to CI/CD events, create a web of interconnected knowledge.

Custom queries: Define organization-specific queries like "show me all services owned by the payments team."

Audit logging: Track every MCP interaction for compliance and debugging.

Try It Now

The MCP server is available today on all Archyl plans. If you're already using Claude Code, Cursor, or another MCP-compatible tool, you can connect in minutes.

Create an API key, add the configuration, and start talking to your architecture.

And if you're not using Archyl yet, sign up for free and see how AI-powered architecture documentation works. Connect a repository, run discovery, and then connect your favorite AI assistant.

Your architecture is too important to be locked in static diagrams. Let your AI assistants explore it.

Want to learn more about Archyl's AI capabilities? Check out our post on AI-Powered Architecture Discovery, or start with the basics in our Introduction to the C4 Model.

Building a Nim library: Monika

2026-01-27 23:07:38

Recently I went through a phase of learning Nim. It was a good time, but I ultimately decided not to dwell too deep into it. This journey however spawned a microlibrary: Monika.

I started Nim on a whim because I wanted to have a system's programming language under my belt or at least native compilation, better speed and for the sake of applying what I was learning. I did C a lot of years ago, but I didn't want to deal with pointers directly and Rust syntax was a bit too much for me (even though I'm used to seeing some unsightly Scala's method signatures).

This library is actually a port from my own library JpnUtils written in Scala. It has a few extra functions that I didn't include in JpnUtils.

Monika is a Japanese strings microlibrary for Nim. It provides a clean, "implicit-style" API for handling characters, strings, and conversions.

Features

  • Implicit Conversions: Treat standard strings as Japanese objects via Nim converters.
  • Script Detection: Easily check for Hiragana, Katakana, and Kanji.
  • Diacritics: Detect Dakuten (voiced) and Handakuten (semi-voiced) marks.
  • Half-Width Conversion: Efficiently convert between full-width and half-width forms.
  • Punctuation Wrappers: Scala-style string wrapping for Japanese quotes.

Usage

Monika uses a converter to extend standard strings. Simply import Monika and start using the utility methods.

import monika/japaneseutils
import monika/punctuation
import monika/halfwidthconverter

if "こんにちは".hasHiragana:
  echo "Contains Hiragana!"

if "モニカ".hasKatakana:
  echo "Contains Katakana!"

if "学校".hasKanji:
  echo "Contains Kanji!"

# full-width to half-width
echo "ハロー、ワールド!".toHalfWidth
# Output: ハロー、ワールド!

# Check for voiced marks
if "が".hasDakuten:
  echo "This character is voiced."

let msg = "Hello"
echo msg.wrapInSingleQuotes # Output: 「Hello」
echo msg.wrapInDoubleQuotes # Output: 『Hello』

let s = "ガキ"
let h = "が".asRune()
let k = "エ".asRune()

if h.isSome:
  echo h.get.hiraToKata() # Output: カ
else:
  echo "empty string"

if k.isSome:
  echo k.get.kataToHira() # Output: え
else:
  echo "empty string"

let str = "日本語abcカナ"
echo str.containsOnly({Kanji, Katakana})  # false
let summary = str.scriptSummary()

echo summary.hiragana  # 0
echo summary.katakana  # 2
echo summary.kanji     # 3
echo summary.other     # 3

It was a good experience, but If I were to be honest; I don't see myself using Nim that much outside of really niche things and even so, I might reconsider it. Maybe I'll make a post in the future about what I don't like about the actual Nim ecosystem.

If you wanna check it out, the repo's here

Crumbling Promises of a Safer Humanity

2026-01-27 23:01:23

A wave of armed conflicts and international political crises is redrawing power lines and pushing millions into perishing wars in Ukraine, Palestine, in the Middle East, Sudan, Yemen, Ethiopia, and Afghanistan, and now the recent US attack on Venezuela are not isolated episodes. They are part of a broader breakdown of cooperation and human solidarity.

When the United States withdrew from international aid, abandoning 66 organizations including 31 UN entities, many working on peace, democracy, and climate — it’s a clear and loud message — “multilateralism is losing ground, and national interests are taking its place”. The cost is not abstract. It is a voice for lives, rights, and the dignity of people who depended on these institutions.

Instead of preventing wars and protecting civilians, a retreat from multilateralism is fueling human rights violations, shrinking democratic freedoms, and giving more space to authoritarian politics. The world today is watching a system unraveling that was built after 1945 to keep humanity away from the horrors of another world war under UN Charter to uphold human rights, and promote peace and prosperity through cooperation.

When the United Nations was created, its promise was simple but powerful “prevent conflict, defend human rights, and promote social progress through cooperation”. Over time, multilateralism took shape through international human rights law, WHO-led global health cooperation, and development cooperation for decolonization and poverty reduction. It never claimed to erase conflict completely—but it did create a space where negotiation could replace violence.

The UN Security Council, is no doubt meant to maintain international peace, is now split by veto politics. In June 2025, a Gaza ceasefire resolution failed because of a veto, despite deepening humanitarian tragedy. Permanent members have become “Judge and Jury”, blocking peace efforts on Ukraine, Syria, and occupied Palestinian territory. The victims are civilians, not governments.

The war in Ukraine, now in its third year, has taken tens of thousands of lives and displaced millions. Its shockwaves hit food security across Africa and the Middle East. Gaza faces one of the worst humanitarian crises of this century, with massive civilian casualties and the displacement of millions. These conflicts show how far multilateral tools have weakened when power politics takes precedence over human protection.

The consequences go far beyond war zones. According to the “2025 Sustainable Development Goals (SDG) Progress Report,” many targets are now stalled or going backward, especially in countries affected by conflict and climate shocks. COVID-19 widened inequalities. Climate disasters — from “flooding in Southeast Asia and drought in the Horn of Africa” have wiped out livelihoods where safety nets are already fragile.

Meanwhile, states are turning inward. Sanctions and unilateral actions taken outside international frameworks often deepen suffering. US policy swings from halting development aid and withdrawing the Paris Climate Agreement have damaged international cooperation and support for millions suffering in the crisis in various parts of the world.
The erosion of multilateralism has a clear human face. It is women facing heightened violence. It is refugees losing access to basic services. It is families in climate-hit communities losing both land and hope. When global cooperation collapses, accountability weakens, conflicts last longer, and people become disposable.

And at precisely this moment, global threats are multiplying. Pandemics, climate change, cyber insecurity, and mass displacement do not respect borders. No single state can solve them alone. Walking away from multilateralism today is like walking away from lifeboats during a storm.

This is not about defending a perfect system. Multilateralism was never perfect. The real question is simple and urgent. Can humanity afford its collapse right now?

If the answer is no—then and it must be rebuilding cooperation becomes both a moral responsibility and a practical necessity. Reforming the UN Security Council, strengthening international law, and defending human rights systems are not academic debates. They are survival strategies.

The retreat from multilateralism and rising human rights violations are not separate trends. They are interconnected crises that feed each other. A world where vetoes silence humanity is a world that drifts toward darkness.

This moment is time-sensitive. Delay comes with a cost of perishing human lives, freedoms crushed, and futures erased. We are faced with a choice: renew our commitment to working together, or accept a future where power replaces principle, and human dignity becomes collateral damage. If multilateralism fails, it is not institutions alone that collapse. It is the promise that every life matters.

🧠 Ensemble_Strategy

2026-01-27 23:00:59

Ensemble Strategy: Two AIs Are Better Than One

Washin Village AI Director Tech Notes #4

🎯 What is Ensemble?

Just like human teamwork, Ensemble Learning makes multiple AI models work together, combining their judgments for more accurate results.

Core concept: Two heads are better than one.

🔍 Why Do We Need Ensemble?

Single model limitations:

Model Pros Cons
Unified_v18 High accuracy (79.5%) Prone to errors on certain categories
Inc_v201 Different training data Lower accuracy (46%)

However! The probability of both models making the same mistake is very low.

💡 Ensemble Strategies

Strategy 1: Voting Mechanism

def ensemble_vote(predictions):
    """Majority voting"""
    from collections import Counter
    votes = Counter([p['class'] for p in predictions])
    return votes.most_common(1)[0][0]

Strategy 2: Weighted Confidence

def ensemble_weighted(predictions, weights):
    """Weighted average confidence"""
    combined = {}
    for pred, weight in zip(predictions, weights):
        for cls, conf in pred.items():
            combined[cls] = combined.get(cls, 0) + conf * weight
    return max(combined, key=combined.get)

Strategy 3: Validation Mode

def ensemble_validate(primary, secondary, threshold=0.85):
    """Primary model predicts, secondary validates"""
    if primary['confidence'] >= threshold:
        return primary['class']

    if primary['class'] == secondary['class']:
        return primary['class']

    return "needs_human_review"

📊 Our Configuration

Dual-Model Ensemble

Input Image
    │
    ├─→ Primary Model (Unified_v18) ──→ Prediction + Confidence
    │
    └─→ Validation Model (Inc_v201) ──→ Prediction + Confidence
    │
    ↓
Ensemble Decision Engine
    │
    ↓
Final Result

Decision Rules

Scenario Action
Primary confidence ≥ 90% Use primary result directly
Both models agree Use that result
Models disagree Choose higher confidence
Both uncertain Mark for human review

📈 Performance Comparison

Configuration Top-1 Accuracy Human Review Rate
Primary only 79.5% 0%
Ensemble (voting) 81.2% 0%
Ensemble (validation) 82.8% 5%

Conclusion: Ensemble + validation mode works best!

🔧 Actual Code

class EnsembleValidator:
    def __init__(self):
        self.primary = YOLO('Unified_v18.pt')
        self.secondary = YOLO('Inc_v201.pt')

    def predict(self, image):
        # Primary model prediction
        p1 = self.primary.predict(image)

        # High confidence: return directly
        if p1.confidence >= 0.90:
            return p1.class_name, "high_confidence"

        # Secondary model validation
        p2 = self.secondary.predict(image)

        if p1.class_name == p2.class_name:
            return p1.class_name, "validated"

        # Return higher confidence
        if p1.confidence > p2.confidence:
            return p1.class_name, "primary_higher"
        else:
            return p2.class_name, "secondary_higher"

💡 Lessons Learned

  1. Model diversity matters: Use different architectures or training data
  2. Weight allocation: Higher accuracy models get higher weights
  3. Speed tradeoffs: Ensemble is slower than single model
  4. Threshold tuning: Adjust confidence thresholds based on actual needs

Washin Village 🏡 by AI Director