CtrlK
BlogDocsLog inGet started
Tessl Logo

oh-my-ai/humaniser

Removes common AI-writing tells and rewrites prose to sound natural and human, using an interactive intake, voice calibration, and a second-pass audit.

100

1.00x
Quality

100%

Does it follow best practices?

Impact

100%

1.00x

Average score across 3 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

task.mdevals/scenario-2/

Rewrite a Technical Blog Post in the Author's Voice

Problem/Feature Description

A developer advocate at a developer tools company has been writing a series of informal technical blog posts for the past year. They recently handed an AI tool a rough outline and let it produce a full draft of their latest post, intending to clean it up themselves. Unfortunately, they ran out of time before the publication deadline and the post still sounds like it was written by a language model — not by them.

They've provided two things: a sample of their own genuine writing (from a previous blog post) and the AI-generated draft that needs to be rewritten. The rewrite should match their natural voice and rhythm as closely as possible based on the writing sample, while making the draft sound like a real person wrote it. The final blog post should be in the same general structure (keep the paragraph order), use conversational-but-technical register, and match UK English spelling. No chatbot wrappers. No change summary needed — just the finished post.

Output Specification

Write the rewritten blog post to rewritten_post.md. The file should contain only the finished post in Markdown format, ready to publish.

Input Files

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

=============== FILE: inputs/voice_sample.txt =============== I've been using Rust for about two years now, mostly for CLI tools and the occasional systems-level experiment. It's not a language you pick up in a weekend — the borrow checker will humble you pretty fast — but once things click, it's weirdly satisfying. You stop fighting the compiler and start working with it.

The thing people don't mention enough is how good the error messages have gotten. I've had the compiler explain a lifetime issue in enough detail that I actually understood what I was doing wrong, fixed it, and learned something. That doesn't happen much with other languages. Most of the time you get a stack trace and a prayer.

The downside is the compile times. On a large project, they're painful. I've started keeping a terminal tab open just for watching the build, which is a bit sad. There are workarounds — incremental compilation helps — but it's still a tax you pay. Whether it's worth it depends on what you're building. =============== FILE: inputs/draft_post.md ===============

Understanding Async Rust: A Comprehensive Overview

Let's dive in! In today's rapidly evolving software landscape, asynchronous programming has emerged as a pivotal paradigm that underscores the transformative potential of modern concurrent systems. Rust's async/await syntax serves as a testament to the language's unwavering commitment to both safety and performance — showcasing its unique ability to foster seamless concurrency without a garbage collector.

The Core Concepts

Async Rust is built on a foundation of futures, executors, and runtimes. Additionally, it leverages a sophisticated polling model that empowers developers to write non-blocking I/O code that could potentially scale to thousands of concurrent tasks. Experts agree that this approach is increasingly important in the modern cloud landscape, where organizations must align on best practices in order to unlock synergies between performance and reliability.

The async keyword transforms a function into one that returns a Future. This Future, when polled by an executor such as Tokio, drives the computation forward. It is worth noting that — unlike threads — Futures in Rust are lazy: they do nothing until polled. This is a fundamental concept that underscores the elegance of the design.

Common Pitfalls

Due to the fact that async Rust can be complex, beginners could potentially make mistakes. The most common issues involve Send bounds, pinning, and holding locks across await points. While challenges remain, the ecosystem continues to thrive and improve.

I hope this helps clarify async Rust for you! Let me know if you have any questions.

evals

SKILL.md

tile.json