feat(ultrawork-manifesto-web): create static manifesto site with sisyphuslabs-inspired design

This commit is contained in:
justsisyphus
2026-01-30 15:03:46 +09:00
parent 3fb6edb269
commit d7713ca8be
5 changed files with 617 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 704 KiB

View File

@@ -0,0 +1,281 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ultrawork Manifesto</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=JetBrains+Mono:wght@400&display=swap" rel="stylesheet">
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header>
<div class="hero-container">
<img src="../public/images/hero.png" alt="Ultrawork Hero" class="hero-image">
<h1 class="hero-title">Manifesto</h1>
</div>
</header>
<main>
<!-- Section 1 -->
<section id="human-intervention">
<h2>Human Intervention is a Failure Signal</h2>
<div class="gold-gradient-text bottleneck-text">
HUMAN IN THE LOOP = BOTTLENECK<br>
HUMAN IN THE LOOP = BOTTLENECK<br>
HUMAN IN THE LOOP = BOTTLENECK
</div>
<p>Think about autonomous driving. When a human has to take over the wheel, that's not a feature - it's a failure of the system. The car couldn't handle the situation on its own.</p>
<h3>Why is coding any different?</h3>
<p>When you find yourself:</p>
<ul>
<li>Fixing the AI's half-finished code</li>
<li>Manually correcting obvious mistakes</li>
<li>Guiding the agent step-by-step through a task</li>
<li>Repeatedly clarifying the same requirements</li>
</ul>
<p>...that's not "human-AI collaboration." That's the AI failing to do its job.</p>
<p><strong>Oh My OpenCode is built on this premise</strong>: Human intervention during agentic work is fundamentally a wrong signal. If the system is designed correctly, the agent should complete the work without requiring you to babysit it.</p>
</section>
<div class="divider">
<img src="../public/images/orb-divider.png" alt="Divider">
</div>
<!-- Section 2 -->
<section id="indistinguishable-code">
<h2>Indistinguishable Code</h2>
<p class="highlight-box"><strong>Goal: Code written by the agent should be indistinguishable from code written by a senior engineer.</strong></p>
<p>Not "AI-generated code that needs cleanup." Not "a good starting point." The actual, final, production-ready code.</p>
<p>This means:</p>
<ul>
<li>Following existing codebase patterns exactly</li>
<li>Proper error handling without being asked</li>
<li>Tests that actually test the right things</li>
<li>No AI slop (over-engineering, unnecessary abstractions, scope creep)</li>
<li>Comments only when they add value</li>
</ul>
<p>If you can tell whether a commit was made by a human or an agent, the agent has failed.</p>
</section>
<div class="divider">
<img src="../public/images/orb-divider.png" alt="Divider">
</div>
<!-- Section 3 -->
<section id="token-cost">
<h2>Token Cost vs. Productivity</h2>
<p><strong>Higher token usage is acceptable if it significantly increases productivity.</strong></p>
<p>Using more tokens to:</p>
<ul>
<li>Have multiple specialized agents research in parallel</li>
<li>Get the job done completely without human intervention</li>
<li>Verify work thoroughly before completion</li>
<li>Accumulate knowledge across tasks</li>
</ul>
<p>...is a worthwhile investment when it means 10x, 20x, or 100x productivity gains.</p>
<h3>However:</h3>
<p>Unnecessary token waste is not pursued. The system optimizes for:</p>
<ul>
<li>Using cheaper models (Haiku, Flash) for simple tasks</li>
<li>Avoiding redundant exploration</li>
<li>Caching learnings across sessions</li>
<li>Stopping research when sufficient context is gathered</li>
</ul>
<p>Token efficiency matters. But not at the cost of work quality or human cognitive load.</p>
</section>
<div class="divider">
<img src="../public/images/orb-divider.png" alt="Divider">
</div>
<!-- Section 4 -->
<section id="cognitive-load">
<h2>Minimize Human Cognitive Load</h2>
<p><strong>The human should only need to say what they want. Everything else is the agent's job.</strong></p>
<p>Two approaches to achieve this:</p>
<div class="approach-container">
<div class="approach">
<h3>Approach 1: Prometheus (Interview Mode)</h3>
<p>You say: "I want to add authentication."</p>
<p>Prometheus:</p>
<ul>
<li>Researches your codebase to understand existing patterns</li>
<li>Asks clarifying questions based on actual findings</li>
<li>Surfaces edge cases you hadn't considered</li>
<li>Documents decisions as you make them</li>
<li>Generates a complete work plan</li>
</ul>
<p><strong>You provide intent. The agent provides structure.</strong></p>
</div>
<div class="approach">
<h3>Approach 2: Ultrawork (Just Do It Mode)</h3>
<p>You say: "ulw add authentication"</p>
<p>The agent:</p>
<ul>
<li>Figures out the right approach</li>
<li>Researches best practices</li>
<li>Implements following conventions</li>
<li>Verifies everything works</li>
<li>Keeps going until complete</li>
</ul>
<p><strong>You provide intent. The agent handles everything.</strong></p>
</div>
</div>
<p>In both cases, the human's job is to <strong>express what they want</strong>, not to manage how it gets done.</p>
</section>
<div class="divider">
<img src="../public/images/orb-divider.png" alt="Divider">
</div>
<!-- Section 5 -->
<section id="predictable-continuous">
<h2>Predictable, Continuous, Delegatable</h2>
<p><strong>The ideal agent should work like a compiler</strong>: markdown document goes in, working code comes out.</p>
<h3>Predictable</h3>
<p>Given the same inputs:</p>
<ul>
<li>Same codebase patterns</li>
<li>Same requirements</li>
<li>Same constraints</li>
</ul>
<p>...the output should be consistent. Not random, not surprising, not "creative" in ways you didn't ask for.</p>
<h3>Continuous</h3>
<p>Work should survive interruptions:</p>
<ul>
<li>Session crashes? Resume with <code>/start-work</code></li>
<li>Need to step away? Progress is tracked</li>
<li>Multi-day project? Context is preserved</li>
</ul>
<p>The agent maintains state. You don't have to.</p>
<h3>Delegatable</h3>
<p>Just like you can assign a task to a capable team member and trust them to handle it, you should be able to delegate to the agent.</p>
<p>This means:</p>
<ul>
<li>Clear acceptance criteria, verified independently</li>
<li>Self-correcting behavior when something goes wrong</li>
<li>Escalation (to Oracle, to user) only when truly needed</li>
<li>Complete work, not "mostly done"</li>
</ul>
</section>
<div class="divider">
<img src="../public/images/orb-divider.png" alt="Divider">
</div>
<!-- Section 6 -->
<section id="core-loop">
<h2>The Core Loop</h2>
<div class="ascii-art">
Human Intent → Agent Execution → Verified Result
↑ ↓
└──────── Minimum ─────────────┘
(intervention only on true failure)
</div>
<p>Everything in Oh My OpenCode is designed to make this loop work:</p>
<table>
<thead>
<tr>
<th>Feature</th>
<th>Purpose</th>
</tr>
</thead>
<tbody>
<tr>
<td>Prometheus</td>
<td>Extract intent through intelligent interview</td>
</tr>
<tr>
<td>Metis</td>
<td>Catch ambiguities before they become bugs</td>
</tr>
<tr>
<td>Momus</td>
<td>Verify plans are complete before execution</td>
</tr>
<tr>
<td>Orchestrator</td>
<td>Coordinate work without human micromanagement</td>
</tr>
<tr>
<td>Todo Continuation</td>
<td>Force completion, prevent "I'm done" lies</td>
</tr>
<tr>
<td>Category System</td>
<td>Route to optimal model without human decision</td>
</tr>
<tr>
<td>Background Agents</td>
<td>Parallel research without blocking user</td>
</tr>
<tr>
<td>Wisdom Accumulation</td>
<td>Learn from work, don't repeat mistakes</td>
</tr>
</tbody>
</table>
</section>
<div class="divider">
<img src="../public/images/orb-divider.png" alt="Divider">
</div>
<!-- Section 7 -->
<section id="future">
<h2>The Future We're Building</h2>
<p>A world where:</p>
<ul>
<li>Human developers focus on <strong>what</strong> to build, not <strong>how</strong> to get AI to build it</li>
<li>Code quality is independent of who (or what) wrote it</li>
<li>Complex projects are as easy as simple ones (just take longer)</li>
<li>"Prompt engineering" becomes as obsolete as "compiler debugging"</li>
</ul>
<p><strong>The agent should be invisible.</strong> Not in the sense that it's hidden, but in the sense that it just works - like electricity, like running water, like the internet.</p>
<p>You flip the switch. The light turns on. You don't think about the power grid.</p>
<p class="final-statement">That's the goal.</p>
</section>
</main>
<footer>
<div class="footer-content">
<img src="../public/images/footer-pattern.png" alt="Footer Pattern" class="footer-pattern">
<p><strong>just ulw ulw</strong></p>
</div>
</footer>
</body>
</html>

View File

@@ -0,0 +1,336 @@
/* Design System */
:root {
/* Colors */
--bg-primary: #0a0a0a;
--bg-secondary: #0E1115;
--text-primary: #ffffff;
--text-muted: #99A1AF;
--text-dim: #6A7282;
--accent: #87F0F2;
--accent-glow: #ABF5F7;
/* Gold gradient for emphasis */
--gold-gradient: linear-gradient(180deg, #f0daaf 0%, #e4c380 50%, #5d5135 100%);
/* Typography */
--font-primary: 'Inter', system-ui, sans-serif;
--font-mono: 'JetBrains Mono', monospace;
/* Layout */
--max-width: 800px;
--spacing-section: 80px;
}
/* Reset & Base Styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
background-color: var(--bg-primary);
color: var(--text-primary);
font-family: var(--font-primary);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* Typography */
h1, h2, h3 {
font-weight: 700;
line-height: 1.2;
margin-bottom: 1.5rem;
}
h1 {
font-size: 3.5rem;
letter-spacing: -0.02em;
}
h2 {
font-size: 2.5rem;
color: var(--text-primary);
margin-bottom: 2rem;
letter-spacing: -0.01em;
}
h3 {
font-size: 1.5rem;
color: var(--accent);
margin-top: 2rem;
margin-bottom: 1rem;
}
p {
margin-bottom: 1.5rem;
color: var(--text-muted);
font-size: 1.125rem;
}
strong {
color: var(--text-primary);
font-weight: 600;
}
ul {
list-style: none;
margin-bottom: 2rem;
padding-left: 1.5rem;
}
ul li {
position: relative;
margin-bottom: 0.75rem;
color: var(--text-muted);
font-size: 1.125rem;
}
ul li::before {
content: "→";
position: absolute;
left: -1.5rem;
color: var(--accent);
}
code {
font-family: var(--font-mono);
background: var(--bg-secondary);
padding: 0.2em 0.4em;
border-radius: 4px;
font-size: 0.9em;
color: var(--accent);
}
/* Layout */
header {
position: relative;
width: 100%;
height: 60vh;
min-height: 400px;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: var(--spacing-section);
}
.hero-container {
position: relative;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.hero-image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
opacity: 0.6;
mask-image: linear-gradient(to bottom, black 50%, transparent 100%);
-webkit-mask-image: linear-gradient(to bottom, black 50%, transparent 100%);
}
.hero-title {
position: relative;
z-index: 1;
font-size: 5rem;
text-transform: uppercase;
letter-spacing: 0.1em;
text-shadow: 0 0 30px rgba(135, 240, 242, 0.3);
animation: fadeIn 1.5s ease-out;
}
main {
max-width: var(--max-width);
margin: 0 auto;
padding: 0 2rem;
}
section {
margin-bottom: var(--spacing-section);
}
/* Components */
.divider {
display: flex;
justify-content: center;
margin: var(--spacing-section) 0;
opacity: 0.5;
}
.divider img {
width: 100px;
height: auto;
}
/* Specific Styles */
.gold-gradient-text {
font-family: var(--font-mono);
font-weight: 700;
font-size: 1.5rem;
line-height: 1.4;
background: var(--gold-gradient);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin-bottom: 2rem;
text-align: center;
border: 1px solid rgba(240, 218, 175, 0.2);
padding: 2rem;
border-radius: 8px;
background-color: rgba(240, 218, 175, 0.05);
}
.highlight-box {
background: var(--bg-secondary);
border-left: 4px solid var(--accent);
padding: 1.5rem;
border-radius: 0 8px 8px 0;
font-size: 1.25rem;
color: var(--text-primary);
}
.approach-container {
display: grid;
grid-template-columns: 1fr;
gap: 2rem;
margin: 2rem 0;
}
@media (min-width: 768px) {
.approach-container {
grid-template-columns: 1fr 1fr;
}
}
.approach {
background: var(--bg-secondary);
padding: 2rem;
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.05);
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.approach:hover {
transform: translateY(-5px);
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
border-color: rgba(135, 240, 242, 0.2);
}
.ascii-art {
font-family: var(--font-mono);
white-space: pre;
overflow-x: auto;
background: var(--bg-secondary);
padding: 2rem;
border-radius: 8px;
color: var(--accent);
margin-bottom: 2rem;
font-size: 0.9rem;
line-height: 1.4;
border: 1px solid rgba(135, 240, 242, 0.1);
}
/* Table */
table {
width: 100%;
border-collapse: collapse;
margin: 2rem 0;
background: var(--bg-secondary);
border-radius: 8px;
overflow: hidden;
}
th, td {
padding: 1rem 1.5rem;
text-align: left;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
th {
background: rgba(135, 240, 242, 0.05);
color: var(--accent);
font-weight: 600;
text-transform: uppercase;
font-size: 0.85rem;
letter-spacing: 0.05em;
}
td {
color: var(--text-muted);
}
tr:last-child td {
border-bottom: none;
}
tr:hover td {
background: rgba(255, 255, 255, 0.02);
color: var(--text-primary);
}
/* Footer */
footer {
margin-top: var(--spacing-section);
padding: 4rem 0;
background: linear-gradient(to top, #000 0%, transparent 100%);
text-align: center;
position: relative;
}
.footer-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 2rem;
}
.footer-pattern {
width: 100%;
max-width: 1200px;
height: auto;
opacity: 0.3;
mask-image: linear-gradient(to bottom, transparent, black 20%, black 80%, transparent);
-webkit-mask-image: linear-gradient(to bottom, transparent, black 20%, black 80%, transparent);
}
.final-statement {
font-size: 2rem;
font-weight: 700;
color: var(--text-primary);
text-align: center;
margin-top: 3rem;
letter-spacing: -0.02em;
}
/* Animations */
@keyframes fadeIn {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
/* Scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--bg-primary);
}
::-webkit-scrollbar-thumb {
background: var(--bg-secondary);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--text-dim);
}