c0c1161107
Hop-State: A_06FN6MKF0WCARDK2YKNXW4G Hop-Proposal: R_06FN6MGR770N9G10AM5TS50 Hop-Task: T_06FN6KXWAMZC0WB4KWSWV90 Hop-Attempt: AT_06FN6KXWAQ9AHXMSDGV4R40
569 lines
14 KiB
Cheetah
569 lines
14 KiB
Cheetah
{{template "base/head" .}}
|
|
<style>
|
|
.hop-agent-home {
|
|
--hop-agent-accent: color-mix(in srgb, var(--color-primary) 62%, var(--color-text));
|
|
color: var(--color-text);
|
|
margin: 0 auto;
|
|
max-width: 1120px;
|
|
padding: clamp(4.5rem, 8vw, 7.5rem) clamp(1.25rem, 4vw, 2.5rem) clamp(5rem, 9vw, 8rem);
|
|
width: 100%;
|
|
}
|
|
|
|
.hop-agent-home *,
|
|
.hop-agent-home *::before,
|
|
.hop-agent-home *::after {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.hop-agent-home > :first-child {
|
|
margin-top: 0 !important;
|
|
}
|
|
|
|
.hop-agent-home h1,
|
|
.hop-agent-home h2,
|
|
.hop-agent-home h3,
|
|
.hop-agent-home p,
|
|
.hop-agent-home ol,
|
|
.hop-agent-home table {
|
|
margin: 0;
|
|
}
|
|
|
|
.hop-agent-home h1,
|
|
.hop-agent-home h2,
|
|
.hop-agent-home h3 {
|
|
color: var(--color-text);
|
|
text-wrap: balance;
|
|
}
|
|
|
|
.hop-agent-label {
|
|
color: var(--color-text-light-2) !important;
|
|
font-size: 0.78rem;
|
|
font-weight: 700;
|
|
letter-spacing: 0.12em;
|
|
line-height: 1.35;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.hop-agent-hero {
|
|
align-items: center;
|
|
display: grid;
|
|
gap: clamp(2.5rem, 5vw, 5rem);
|
|
grid-template-columns: minmax(0, 1fr) clamp(280px, 29vw, 400px);
|
|
}
|
|
|
|
.hop-agent-hero-copy {
|
|
min-width: 0;
|
|
}
|
|
|
|
.hop-agent-hero h1 {
|
|
font-size: clamp(3.2rem, 6.1vw, 5.5rem);
|
|
font-weight: 700;
|
|
letter-spacing: -0.06em;
|
|
line-height: 0.96;
|
|
margin-top: 1.35rem;
|
|
max-width: 16ch;
|
|
}
|
|
|
|
.hop-agent-hero h1 span {
|
|
display: block;
|
|
}
|
|
|
|
.hop-agent-hero h1 span:last-child {
|
|
color: var(--hop-agent-accent);
|
|
}
|
|
|
|
.hop-agent-lede {
|
|
color: var(--color-text-light-2) !important;
|
|
font-size: clamp(1.12rem, 1.7vw, 1.32rem);
|
|
line-height: 1.6;
|
|
margin-top: 2rem !important;
|
|
max-width: 68ch;
|
|
}
|
|
|
|
.hop-agent-actions {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 0.75rem;
|
|
margin-top: 2rem;
|
|
}
|
|
|
|
.hop-agent-actions .button {
|
|
margin: 0;
|
|
}
|
|
|
|
.hop-agent-note {
|
|
color: var(--color-text-light-2) !important;
|
|
font-size: 0.9rem;
|
|
line-height: 1.55;
|
|
margin-top: 1.2rem !important;
|
|
}
|
|
|
|
.hop-agent-mascot {
|
|
align-items: center;
|
|
display: flex;
|
|
justify-content: center;
|
|
margin: 0;
|
|
min-width: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.hop-agent-mascot img {
|
|
display: block;
|
|
filter: drop-shadow(0 1.5rem 2.5rem color-mix(in srgb, var(--color-primary) 18%, transparent));
|
|
height: auto;
|
|
max-width: 100%;
|
|
width: 400px;
|
|
}
|
|
|
|
.hop-agent-flow {
|
|
border-top: 1px solid var(--color-secondary);
|
|
display: grid;
|
|
gap: clamp(3rem, 7vw, 6rem);
|
|
grid-template-columns: minmax(220px, 0.7fr) minmax(0, 1.3fr);
|
|
margin-top: clamp(3.5rem, 5vw, 5rem);
|
|
padding-top: clamp(2.25rem, 3.5vw, 3.5rem);
|
|
}
|
|
|
|
.hop-agent-section-heading h2 {
|
|
font-size: clamp(2.2rem, 4vw, 3.6rem);
|
|
font-weight: 650;
|
|
letter-spacing: -0.045em;
|
|
line-height: 1.04;
|
|
margin-top: 0.9rem;
|
|
}
|
|
|
|
.hop-agent-section-heading > p:last-child {
|
|
color: var(--color-text-light-2) !important;
|
|
font-size: 1rem;
|
|
line-height: 1.6;
|
|
margin-top: 1.2rem !important;
|
|
max-width: 48ch;
|
|
}
|
|
|
|
.hop-agent-steps {
|
|
border-top: 1px solid var(--color-secondary);
|
|
list-style: none;
|
|
padding: 0;
|
|
}
|
|
|
|
.hop-agent-steps li {
|
|
align-items: start;
|
|
border-bottom: 1px solid var(--color-secondary);
|
|
display: grid;
|
|
gap: 1rem;
|
|
grid-template-columns: 2rem minmax(7rem, 0.42fr) minmax(0, 1fr);
|
|
padding: 1.45rem 0;
|
|
}
|
|
|
|
.hop-agent-step-number {
|
|
color: var(--color-text-light-2);
|
|
font-family: var(--fonts-monospace);
|
|
font-size: 0.75rem;
|
|
font-weight: 700;
|
|
line-height: 1.7;
|
|
}
|
|
|
|
.hop-agent-steps h3 {
|
|
font-size: 1.08rem;
|
|
font-weight: 650;
|
|
letter-spacing: -0.015em;
|
|
line-height: 1.35;
|
|
}
|
|
|
|
.hop-agent-steps p {
|
|
color: var(--color-text-light-2) !important;
|
|
font-size: 0.96rem;
|
|
line-height: 1.58;
|
|
}
|
|
|
|
.hop-agent-why {
|
|
border-top: 1px solid var(--color-secondary);
|
|
margin-top: clamp(3.5rem, 5vw, 5rem);
|
|
padding-top: clamp(2.25rem, 3.5vw, 3.5rem);
|
|
}
|
|
|
|
.hop-agent-why .hop-agent-section-heading {
|
|
max-width: 760px;
|
|
}
|
|
|
|
.hop-agent-table-wrap {
|
|
margin-top: clamp(2.75rem, 5vw, 4.5rem);
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.hop-agent-compare {
|
|
border-collapse: collapse;
|
|
min-width: 700px;
|
|
width: 100%;
|
|
}
|
|
|
|
.hop-agent-compare caption {
|
|
clip: rect(0 0 0 0);
|
|
height: 1px;
|
|
margin: -1px;
|
|
overflow: hidden;
|
|
padding: 0;
|
|
position: absolute;
|
|
width: 1px;
|
|
}
|
|
|
|
.hop-agent-compare th,
|
|
.hop-agent-compare td {
|
|
border-bottom: 1px solid var(--color-secondary);
|
|
padding: 1.1rem 1rem 1.1rem 0;
|
|
text-align: left;
|
|
vertical-align: top;
|
|
}
|
|
|
|
.hop-agent-compare thead th {
|
|
color: var(--color-text-light-2);
|
|
font-size: 0.72rem;
|
|
font-weight: 700;
|
|
letter-spacing: 0.1em;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.hop-agent-compare tbody th {
|
|
color: var(--color-text);
|
|
font-size: 0.94rem;
|
|
font-weight: 650;
|
|
width: 19%;
|
|
}
|
|
|
|
.hop-agent-compare td {
|
|
color: var(--color-text-light-2);
|
|
font-size: 0.94rem;
|
|
line-height: 1.5;
|
|
width: 40.5%;
|
|
}
|
|
|
|
.hop-agent-compare td:last-child {
|
|
color: var(--color-text);
|
|
font-weight: 550;
|
|
}
|
|
|
|
.hop-agent-install {
|
|
border-top: 1px solid var(--color-secondary);
|
|
display: grid;
|
|
gap: clamp(3rem, 7vw, 6rem);
|
|
grid-template-columns: minmax(220px, 0.7fr) minmax(0, 1.3fr);
|
|
margin-top: clamp(3.5rem, 5vw, 5rem);
|
|
padding-top: clamp(2.25rem, 3.5vw, 3.5rem);
|
|
}
|
|
|
|
.hop-agent-install-copy h2 {
|
|
font-size: clamp(2.2rem, 4vw, 3.6rem);
|
|
font-weight: 650;
|
|
letter-spacing: -0.045em;
|
|
line-height: 1.04;
|
|
margin-top: 0.9rem;
|
|
}
|
|
|
|
.hop-agent-install-copy > p:last-of-type {
|
|
color: var(--color-text-light-2) !important;
|
|
font-size: 1rem;
|
|
line-height: 1.6;
|
|
margin-top: 1.2rem !important;
|
|
max-width: 42ch;
|
|
}
|
|
|
|
.hop-agent-repo-link {
|
|
align-items: center;
|
|
display: inline-flex;
|
|
font-weight: 650;
|
|
gap: 0.45rem;
|
|
margin-top: 1.5rem;
|
|
}
|
|
|
|
.hop-agent-repo-link::after {
|
|
content: '↗';
|
|
font-size: 0.9em;
|
|
}
|
|
|
|
.hop-agent-install-list {
|
|
border-top: 1px solid var(--color-secondary);
|
|
}
|
|
|
|
.hop-agent-install-command {
|
|
border-bottom: 1px solid var(--color-secondary);
|
|
padding: 1.45rem 0;
|
|
}
|
|
|
|
.hop-agent-install-command code {
|
|
background: color-mix(in srgb, var(--color-secondary) 42%, transparent);
|
|
border-radius: var(--border-radius);
|
|
color: var(--color-text);
|
|
display: block;
|
|
font-family: var(--fonts-monospace);
|
|
font-size: clamp(0.78rem, 1.35vw, 0.94rem);
|
|
line-height: 1.55;
|
|
margin-top: 0.85rem;
|
|
overflow-x: auto;
|
|
padding: 0.85rem 1rem;
|
|
white-space: pre;
|
|
}
|
|
|
|
.hop-agent-finish {
|
|
align-items: end;
|
|
border-top: 1px solid var(--color-secondary);
|
|
display: grid;
|
|
gap: 2rem;
|
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
margin-top: clamp(3rem, 4.5vw, 4.5rem);
|
|
padding-top: clamp(2.25rem, 3.5vw, 3.5rem);
|
|
}
|
|
|
|
.hop-agent-finish h2 {
|
|
font-size: clamp(2.3rem, 4.8vw, 4.4rem);
|
|
font-weight: 650;
|
|
letter-spacing: -0.05em;
|
|
line-height: 1;
|
|
}
|
|
|
|
.hop-agent-finish p {
|
|
color: var(--color-text-light-2) !important;
|
|
font-size: 1rem;
|
|
line-height: 1.6;
|
|
margin-top: 1rem !important;
|
|
max-width: 60ch;
|
|
}
|
|
|
|
.hop-agent-finish .button {
|
|
margin: 0;
|
|
}
|
|
|
|
@media (max-width: 800px) {
|
|
.hop-agent-hero {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.hop-agent-mascot img {
|
|
width: min(70vw, 320px);
|
|
}
|
|
|
|
.hop-agent-flow {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.hop-agent-install {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.hop-agent-flow .hop-agent-section-heading {
|
|
max-width: 620px;
|
|
}
|
|
}
|
|
|
|
@media (max-width: 620px) {
|
|
.hop-agent-home {
|
|
padding-top: 3.5rem;
|
|
}
|
|
|
|
.hop-agent-hero h1 {
|
|
font-size: clamp(2.75rem, 13vw, 4rem);
|
|
max-width: none;
|
|
}
|
|
|
|
.hop-agent-mascot img {
|
|
width: min(72vw, 260px);
|
|
}
|
|
|
|
.hop-agent-actions {
|
|
align-items: stretch;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.hop-agent-actions .button,
|
|
.hop-agent-finish .button {
|
|
width: 100%;
|
|
}
|
|
|
|
.hop-agent-steps li {
|
|
gap: 0.4rem 0.8rem;
|
|
grid-template-columns: 1.6rem minmax(0, 1fr);
|
|
}
|
|
|
|
.hop-agent-steps p {
|
|
grid-column: 2;
|
|
}
|
|
|
|
.hop-agent-table-wrap {
|
|
overflow: visible;
|
|
}
|
|
|
|
.hop-agent-compare {
|
|
display: block;
|
|
min-width: 0;
|
|
}
|
|
|
|
.hop-agent-compare thead {
|
|
clip: rect(0 0 0 0);
|
|
height: 1px;
|
|
margin: -1px;
|
|
overflow: hidden;
|
|
position: absolute;
|
|
width: 1px;
|
|
}
|
|
|
|
.hop-agent-compare tbody,
|
|
.hop-agent-compare tr,
|
|
.hop-agent-compare th,
|
|
.hop-agent-compare td {
|
|
display: block;
|
|
width: 100%;
|
|
}
|
|
|
|
.hop-agent-compare tbody th,
|
|
.hop-agent-compare tbody td {
|
|
width: 100%;
|
|
}
|
|
|
|
.hop-agent-compare tbody tr {
|
|
border-bottom: 1px solid var(--color-secondary);
|
|
padding: 1.35rem 0;
|
|
}
|
|
|
|
.hop-agent-compare tbody th,
|
|
.hop-agent-compare td {
|
|
border: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
.hop-agent-compare td {
|
|
margin-top: 0.8rem;
|
|
}
|
|
|
|
.hop-agent-compare td::before {
|
|
color: var(--color-text-light-2);
|
|
content: 'Standard Git';
|
|
display: block;
|
|
font-size: 0.68rem;
|
|
font-weight: 700;
|
|
letter-spacing: 0.09em;
|
|
margin-bottom: 0.2rem;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.hop-agent-compare td:last-child::before {
|
|
color: var(--color-text-light-2);
|
|
content: 'Hop';
|
|
}
|
|
|
|
.hop-agent-finish {
|
|
align-items: start;
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.hop-agent-install-command code {
|
|
font-size: 0.76rem;
|
|
}
|
|
}
|
|
</style>
|
|
<main id="hop-main" tabindex="-1" role="main" aria-label="Hop, agent-first version control" class="page-content hop-agent-home">
|
|
<section class="hop-agent-hero" aria-labelledby="hop-agent-title">
|
|
<div class="hop-agent-hero-copy">
|
|
<p class="hop-agent-label">Agent-first version control</p>
|
|
<h1 id="hop-agent-title"><span>Tell agents what to build.</span><span>Hop handles the Git.</span></h1>
|
|
<p class="hop-agent-lede">Run one coding agent or many. Hop captures the request, isolates every attempt, combines concurrent edits, and routes real conflicts through an agent reconciliation loop. Once checks pass, the agent lands the result automatically by default. You do not have to manage a branch or write a commit.</p>
|
|
<div class="hop-agent-actions">
|
|
{{if .IsSigned}}
|
|
<a class="ui primary button" href="{{AppSubUrl}}/repo/create">Create a repository</a>
|
|
<a class="ui basic button" href="{{AppSubUrl}}/explore/repos">Explore repositories</a>
|
|
{{else}}
|
|
<a class="ui primary button" href="{{AppSubUrl}}/user/sign_up">Create a Hop account</a>
|
|
<a class="ui basic button" href="#why-hop">Why use Hop?</a>
|
|
{{end}}
|
|
</div>
|
|
<p class="hop-agent-note">Git stays underneath for compatibility. The mechanics disappear from your workflow.</p>
|
|
</div>
|
|
<figure class="hop-agent-mascot">
|
|
<img src="{{AssetUrlPrefix}}/img/hop.svg?v=4" alt="Hop robot mascot" width="512" height="512" decoding="async" fetchpriority="high">
|
|
</figure>
|
|
</section>
|
|
|
|
<section class="hop-agent-flow" aria-labelledby="hop-agent-flow-title">
|
|
<div class="hop-agent-section-heading">
|
|
<p class="hop-agent-label">One instruction in. Working code out.</p>
|
|
<h2 id="hop-agent-flow-title">From prompt to landed code, without Git ceremony.</h2>
|
|
<p>Hop runs the version-control workflow around your agents. You stay focused on the outcome.</p>
|
|
</div>
|
|
<ol class="hop-agent-steps">
|
|
<li>
|
|
<span class="hop-agent-step-number">01</span>
|
|
<h3>Prompt captured</h3>
|
|
<p>Your instruction becomes durable state before any agent touches the project.</p>
|
|
</li>
|
|
<li>
|
|
<span class="hop-agent-step-number">02</span>
|
|
<h3>Agents work in parallel</h3>
|
|
<p>Each agent runs in its own Hop workspace. Several can edit the same files at the same time.</p>
|
|
</li>
|
|
<li>
|
|
<span class="hop-agent-step-number">03</span>
|
|
<h3>Hop reconciles</h3>
|
|
<p>Compatible hunks merge automatically. A real conflict starts an agent reconciliation loop, then runs the checks again. Ordinary code conflicts never get handed back to you.</p>
|
|
</li>
|
|
<li>
|
|
<span class="hop-agent-step-number">04</span>
|
|
<h3>Code lands</h3>
|
|
<p>After required checks pass, the agent lands by default and Hop synchronizes the project. No manual commit, rebase, or merge.</p>
|
|
</li>
|
|
</ol>
|
|
</section>
|
|
|
|
<section class="hop-agent-why" id="why-hop" aria-labelledby="hop-agent-why-title">
|
|
<div class="hop-agent-section-heading">
|
|
<p class="hop-agent-label">Why not just Git?</p>
|
|
<h2 id="hop-agent-why-title">Git stores code. Hop runs the work.</h2>
|
|
<p>Git was designed to track and exchange source history, not to coordinate autonomous coding agents. Hop keeps Git underneath, then adds an agent workflow with state, isolation, evidence, reconciliation, and automatic landing after checks.</p>
|
|
</div>
|
|
<div class="hop-agent-table-wrap">
|
|
<table class="hop-agent-compare">
|
|
<caption>Comparison of standard Git workflows and Hop</caption>
|
|
<thead>
|
|
<tr><th scope="col">Work</th><th scope="col">Standard Git</th><th scope="col">Hop</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr><th scope="row">Start</th><td>You create a branch or worktree.</td><td>Starting a task creates an isolated agent attempt.</td></tr>
|
|
<tr><th scope="row">Save progress</th><td>You decide when and how to commit.</td><td>Checks and follow-ups capture immutable checkpoints.</td></tr>
|
|
<tr><th scope="row">Parallel edits</th><td>Incompatible overlapping edits require manual conflict handling.</td><td>Hop three-way-merges compatible edits and sends unresolved conflicts through agent reconciliation.</td></tr>
|
|
<tr><th scope="row">Verify</th><td>Validation is conventionally attached to commits.</td><td>Hop records evidence for the exact checkpoint and requires checked reconciliation.</td></tr>
|
|
<tr><th scope="row">Finish</th><td>You merge, rebase, and clean up.</td><td>The agent lands checked work automatically by default.</td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="hop-agent-install" id="install-hop" aria-labelledby="hop-agent-install-title">
|
|
<div class="hop-agent-install-copy">
|
|
<p class="hop-agent-label">Install Hop</p>
|
|
<h2 id="hop-agent-install-title">One install. No Git busywork.</h2>
|
|
<p>Install the Hop CLI, then tell your agents what to build. Hop handles isolated workspaces, checkpoints, reconciliation, and landing.</p>
|
|
<a class="hop-agent-repo-link" href="https://githop.xyz/GnosysLabs/Hop" target="_blank" rel="noreferrer">Official Hop repository</a>
|
|
</div>
|
|
<div class="hop-agent-install-list" aria-label="Hop installation commands">
|
|
<div class="hop-agent-install-command">
|
|
<p class="hop-agent-label">macOS and Linux</p>
|
|
<code>curl -fsSL https://githop.xyz/GnosysLabs/Hop/raw/branch/main/scripts/install.sh | sh</code>
|
|
</div>
|
|
<div class="hop-agent-install-command">
|
|
<p class="hop-agent-label">Windows PowerShell</p>
|
|
<code>irm https://githop.xyz/GnosysLabs/Hop/raw/branch/main/scripts/install.ps1 | iex</code>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="hop-agent-finish" aria-labelledby="hop-agent-finish-title">
|
|
<div>
|
|
<h2 id="hop-agent-finish-title">Git compatibility without Git busywork.</h2>
|
|
<p>Keep Git-compatible hosting and tooling underneath. The day-to-day branch, commit, rebase, and conflict choreography disappears.</p>
|
|
</div>
|
|
{{if .IsSigned}}
|
|
<a class="ui primary button" href="{{AppSubUrl}}/repo/create">Create a repository</a>
|
|
{{else}}
|
|
<a class="ui primary button" href="{{AppSubUrl}}/user/sign_up">Create a Hop account</a>
|
|
{{end}}
|
|
</section>
|
|
</main>
|
|
{{template "base/footer" .}}
|