CtrlK
BlogDocsLog inGet started
Tessl Logo

neomatrix369/content-distiller

Extract actionable insights and valuable artifacts from web posts, articles, and technical documentation. Use when summarizing content, extracting key ideas from URLs/articles, preserving code snippets and diagrams, or creating visual summaries. Triggers on requests like "summarize this post", "extract insights from", "distill this article", "what are the key takeaways", or when a URL is shared for analysis.

97

1.25x

Quality

100%

Does it follow best practices?

Impact

94%

1.25x

Average score across 5 eval scenarios

Overview
Skills
Evals
Files

task.mdevals/scenario-3/

Extract Insights from Multiple Articles

Problem/Feature Description

A tech newsletter curator needs to process three different articles for their weekly digest. The articles vary significantly in depth and technical complexity. They need summaries that match the density of each article - some require just the core points, while others deserve deeper analysis with code examples and frameworks.

The three articles cover: (1) a simple productivity tip, (2) a technical tutorial on React hooks, and (3) a comprehensive deep-dive on distributed systems architecture.

Input Files

The following files are provided as inputs. Extract them before beginning.

=============== FILE: inputs/article-simple.txt ===============

The Power of Small Commits

Git commits should be atomic and focused. That's the advice I'd give to any developer.

Instead of bundling multiple changes into one massive commit, break them down. Each commit should represent one logical change. This makes code review easier, debugging simpler, and rollbacks cleaner.

Start tomorrow: before committing, ask yourself "does this commit do exactly one thing?" If not, split it up. =============== END FILE ===============

=============== FILE: inputs/article-technical.txt ===============

Custom Hooks for API Data Fetching

React hooks transformed how we manage state and side effects. Here's a reusable pattern I've used across multiple projects for cleaner API data fetching.

The Problem

Fetching data requires managing loading states, errors, and the data itself. Writing this boilerplate repeatedly is tedious and error-prone.

The Solution

A custom useApi hook encapsulates the entire fetch lifecycle:

import { useState, useEffect } from 'react';

function useApi(url) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    let cancelled = false;

    fetch(url)
      .then(res => res.json())
      .then(data => {
        if (!cancelled) {
          setData(data);
          setLoading(false);
        }
      })
      .catch(err => {
        if (!cancelled) {
          setError(err.message);
          setLoading(false);
        }
      });

    return () => {
      cancelled = true;
    };
  }, [url]);

  return { data, loading, error };
}

export default useApi;

The cancelled flag prevents setting state on unmounted components - a common source of React warnings.

Usage

function UserProfile({ userId }) {
  const { data, loading, error } = useApi(`/api/users/${userId}`);

  if (loading) return <Spinner />;
  if (error) return <Error message={error} />;
  return <Profile user={data} />;
}

This pattern keeps components clean and focused on rendering logic. =============== END FILE ===============

=============== FILE: inputs/article-deep.txt ===============

Designing Fault-Tolerant Distributed Systems

Building systems that span multiple machines introduces fundamental challenges that don't exist in single-server applications. This guide explores architectural patterns for resilience.

The CAP Theorem Reality

The CAP theorem states you can have at most two of: Consistency, Availability, and Partition tolerance. But here's what practitioners learn: partition tolerance is not optional in distributed systems. Network failures will happen.

The real choice is between CP (consistency over availability) and AP (availability over consistency). Banks choose CP - they'd rather fail a transaction than show incorrect balances. Social networks choose AP - they'd rather show slightly stale data than be unavailable.

Circuit Breaker Pattern

When a downstream service fails, naive systems amplify the problem by repeatedly retrying. The circuit breaker pattern prevents cascading failures:

  1. Closed state: Requests flow normally
  2. Open state: After N failures, immediately fail fast without calling downstream
  3. Half-open state: After timeout, allow limited test requests
class CircuitBreaker:
    def __init__(self, failure_threshold=5, timeout=60):
        self.failure_threshold = failure_threshold
        self.timeout = timeout
        self.failures = 0
        self.last_failure_time = None
        self.state = 'closed'

    def call(self, func, *args, **kwargs):
        if self.state == 'open':
            if time.time() - self.last_failure_time > self.timeout:
                self.state = 'half-open'
            else:
                raise CircuitBreakerOpen()

        try:
            result = func(*args, **kwargs)
            if self.state == 'half-open':
                self.state = 'closed'
                self.failures = 0
            return result
        except Exception as e:
            self.failures += 1
            self.last_failure_time = time.time()
            if self.failures >= self.failure_threshold:
                self.state = 'open'
            raise

Event Sourcing vs State Storage

Traditional databases store current state. Event sourcing stores every state change as an immutable event.

Benefits of Event Sourcing:

  • Complete audit trail automatically
  • Replay events to rebuild state
  • Temporal queries ("what was X's balance last Tuesday?")
  • Multiple read models from same events

Gotchas:

  • Events must be immutable - you can't delete customer data easily (GDPR compliance challenge)
  • Schema evolution is harder - you're stuck with old event formats
  • Query performance requires maintaining separate read models

The best approach? Hybrid - use event sourcing for critical audit trails, traditional storage elsewhere.

The Two-Phase Commit Problem

Distributed transactions across databases seem simple in theory: prepare all participants, then commit if all succeed. In practice, this is slow and fragile.

Consider this scenario:

  1. Coordinator asks both databases to prepare
  2. Both databases lock resources and respond "ready"
  3. Coordinator sends commit to Database A
  4. Network failure before reaching Database B
  5. Database A commits, Database B times out and rolls back

You now have inconsistent state that's difficult to recover from.

Modern Solution: Saga Pattern

Instead of locking distributed transactions, use a sequence of local transactions with compensating actions:

  • Book flight (local transaction)
  • If successful, book hotel (local transaction)
  • If hotel fails, cancel flight (compensating transaction)

Trade-off: You give up atomicity for resilience. Your system must handle intermediate states gracefully.

Key Architectural Principles

  1. Assume failure: Every network call can fail - design for it
  2. Idempotency: Retries are inevitable - make operations safe to repeat
  3. Observability: You can't SSH into problems - need comprehensive logging/metrics
  4. Gradual degradation: Lose features gracefully rather than complete failure

Mental Model: Distributed Systems as Unreliable Components

Think of each service as an unreliable component in a larger machine. Your architecture's job is to create reliability from unreliable parts - like how RAID creates reliable storage from unreliable disks. =============== END FILE ===============

Output Specification

Create three separate summary files:

  • summary-simple.md for the productivity tip article
  • summary-technical.md for the React hooks article
  • summary-deep.md for the distributed systems article

Each summary should match the depth and complexity of its source material.

Install with Tessl CLI

npx tessl i neomatrix369/content-distiller

evals

SKILL.md

tile.json