From 7d0f10d21fe57c4f4ea33c7d53eb150dd8e26ff3 Mon Sep 17 00:00:00 2001 From: Juan Marquez Date: Wed, 27 May 2026 21:28:10 +0200 Subject: [PATCH] the forgeeeee --- .../web/templates/agent_detail.html | 60 ++--- .../web/templates/agent_detail_full.html | 5 +- core/src/forja_core/web/templates/agents.html | 72 ++--- .../forja_core/web/templates/approvals.html | 76 +++--- core/src/forja_core/web/templates/armory.html | 61 +++++ core/src/forja_core/web/templates/base.html | 128 ++++++--- core/src/forja_core/web/templates/deploy.html | 48 ++++ .../src/forja_core/web/templates/history.html | 23 -- core/src/forja_core/web/templates/home.html | 105 ++------ .../forja_core/web/templates/policies.html | 15 -- core/src/forja_core/web/templates/run.html | 55 ++-- .../forja_core/web/templates/tutorial.html | 90 +++++++ core/src/forja_core/web/ui.py | 132 +++++---- docs/forja-progress.html | 250 +++++------------- 14 files changed, 605 insertions(+), 515 deletions(-) create mode 100644 core/src/forja_core/web/templates/armory.html create mode 100644 core/src/forja_core/web/templates/deploy.html delete mode 100644 core/src/forja_core/web/templates/history.html delete mode 100644 core/src/forja_core/web/templates/policies.html create mode 100644 core/src/forja_core/web/templates/tutorial.html diff --git a/core/src/forja_core/web/templates/agent_detail.html b/core/src/forja_core/web/templates/agent_detail.html index 1b465eb..6ee81bb 100644 --- a/core/src/forja_core/web/templates/agent_detail.html +++ b/core/src/forja_core/web/templates/agent_detail.html @@ -3,12 +3,12 @@
{{ agent.name }} - v{{ agent.version }} - + v{{ agent.version }} + {{ agent.state }}
-
+
{{ agent.purpose }}
@@ -16,16 +16,16 @@
-
Owner
+
Smith
{{ agent.owner }}
-
Risk threshold (HITL)
+
Risk Threshold (Judgment)
{{ agent.risk_threshold_for_hitl }}
{% if agent.category %}
-
Category
+
Blade Type
{{ agent.category }}
{% endif %} @@ -34,68 +34,68 @@
-
LLM
-
+
LLM Steel
+
{{ agent.llm.provider }} / {{ agent.llm.model }}
- temp={{ agent.llm.temperature }} · max={{ agent.llm.max_tokens }} + temp={{ agent.llm.temperature }} · max={{ agent.llm.max_tokens }}
-
Guardrails
+
Guardrails (Forge Laws)
{% for g in agent.guardrails %} - {{ g }} + {{ g }} {% endfor %}
- +
-
Comportamiento
+
Edge & Temper
- +
- - View system prompt - expandir - + + View blade oath + show + -
+
{{ agent.system_prompt }}
-
Output schema
-
{{ agent.output_schema | tojson(indent=2) }}
+
Output schema
+
{{ agent.output_schema | tojson(indent=2) }}
- + {% if agent.input_label or agent.input_placeholder or agent.updated_at %} -
-
Metadatos
-
+
+
Anvil Marks
+
{% if agent.input_label %} -
Input label: {{ agent.input_label }}
+
Input label: {{ agent.input_label }}
{% endif %} {% if agent.input_placeholder %} -
Placeholder: {{ agent.input_placeholder }}
+
Example: {{ agent.input_placeholder }}
{% endif %} -
Last updated: {{ agent.updated_at.strftime('%Y-%m-%d %H:%M') if agent.updated_at else '—' }}
+
Last forged: {{ agent.updated_at.strftime('%Y-%m-%d %H:%M') if agent.updated_at else '—' }}
{% endif %} {% if agent.tags %}
-
Tags
+
Runes
{% for tag in agent.tags %} - {{ tag }} + {{ tag }} {% endfor %}
diff --git a/core/src/forja_core/web/templates/agent_detail_full.html b/core/src/forja_core/web/templates/agent_detail_full.html index f6ac41a..18ac80b 100644 --- a/core/src/forja_core/web/templates/agent_detail_full.html +++ b/core/src/forja_core/web/templates/agent_detail_full.html @@ -2,7 +2,10 @@ {% block content %}
-

{{ agent.name }} v{{ agent.version }}

+ +

{{ agent.name }} v{{ agent.version }}

{% include "agent_detail.html" %}
{% endblock %} diff --git a/core/src/forja_core/web/templates/agents.html b/core/src/forja_core/web/templates/agents.html index 1f284ed..2f725fc 100644 --- a/core/src/forja_core/web/templates/agents.html +++ b/core/src/forja_core/web/templates/agents.html @@ -1,41 +1,47 @@ {% extends "base.html" %} {% block content %} -

Registered Agents

- -
- -
-
- {% for a in agents %} - -
- - {{ a.icon or "🤖" }} - -
-
{{ a.name }}
-
v{{ a.version }} · {{ a.state }}
-
-
-
- {% else %} -
No agents registered.
- {% endfor %} -
+
+
+ +

Arsenal

+ FORGED BLADES
- -
-
-
-
- Select an agent from the list to see its configuration and behavior. +
+ +
+
+ {% for a in agents %} + +
+ + {{ a.icon or "◆" }} + +
+
{{ a.name }}
+
v{{ a.version }} · {{ a.state }}
+
+
+
+ {% else %} +
No forged blades in the Arsenal yet.
+ {% endfor %} +
+
+ + +
+
+
+
+ 🛡 Select a blade from the Arsenal to inspect its temper, purpose and edge. +
diff --git a/core/src/forja_core/web/templates/approvals.html b/core/src/forja_core/web/templates/approvals.html index 7a8d579..f5ca528 100644 --- a/core/src/forja_core/web/templates/approvals.html +++ b/core/src/forja_core/web/templates/approvals.html @@ -1,43 +1,51 @@ {% extends "base.html" %} {% block content %} -

🤝 Pending Approvals (HITL)

-

Executions with high-risk actions are paused here. Approve or reject so the graph can continue (or fail). The list updates after every action.

+
+
+ + JUDGMENT CHAMBER +
+

The Judgment

+

High-risk forgings pause here to be tempered or shattered. Approve or reject. The anvil waits.

-
-{% for ex in pending %} -
-
-
-
{{ ex.agent_name }} v{{ ex.agent_version }}
-
{{ ex.trace_id }}
+
+ {% for ex in pending %} +
+
+
+
{{ ex.agent_name }} v{{ ex.agent_version }}
+
{{ ex.trace_id }}
+
+
🛡️ AWAITING TEMPERING
-
AWAITING APPROVAL
-
-
- - +
+ + +
+
+ {% else %} +
+ 🛡️ No forgings currently await judgment. The Forge is quiet. +
+ {% endfor %}
-
-{% else %} -
No executions awaiting approval.
-{% endfor %}
{% endblock %} diff --git a/core/src/forja_core/web/templates/armory.html b/core/src/forja_core/web/templates/armory.html new file mode 100644 index 0000000..6c6dfbe --- /dev/null +++ b/core/src/forja_core/web/templates/armory.html @@ -0,0 +1,61 @@ +{% extends "base.html" %} + +{% block content %} +
+ +
+ +
+

The Armory

+

The Hall of Tempered Blades — every successful forging you have completed.

+
+
+ + {% if tempered %} +
+ {% for ex in tempered %} +
+
+
+
{{ ex.agent_name }} v{{ ex.agent_version }}
+
{{ ex.trace_id }}
+
+
+
TEMPERED
+
+ {{ ex.finished_at.strftime('%Y-%m-%d %H:%M') if ex.finished_at else ex.started_at.strftime('%Y-%m-%d %H:%M') }} +
+
+
+ +
+
+ ACTIONS
+ {{ ex.n_proposed_actions }} +
+
+ VIOLATIONS
+ {{ ex.n_violations }} +
+
+ + +
+ {% endfor %} +
+ {% else %} +
+
🛡️
+
No tempered blades yet
+

+ Successfully complete a forging on the Anvil and it will appear here as a proven, tempered blade. +

+ Go to the Anvil → +
+ {% endif %} + +
+{% endblock %} \ No newline at end of file diff --git a/core/src/forja_core/web/templates/base.html b/core/src/forja_core/web/templates/base.html index 67726f9..54726dd 100644 --- a/core/src/forja_core/web/templates/base.html +++ b/core/src/forja_core/web/templates/base.html @@ -3,28 +3,26 @@ - Forja • {{ title or "Cadena de Montaje" }} + The Forge • {{ title or "The Forge" }}
-
+ +
+
+ + THE FORGE + Fire • Hammer • Judgment + + + +
+
+ +
{% block content %}{% endblock %}
+ + + {% if not hide_tutorial_button %} + + Tutorial + + {% endif %} diff --git a/core/src/forja_core/web/templates/deploy.html b/core/src/forja_core/web/templates/deploy.html new file mode 100644 index 0000000..8c1b3de --- /dev/null +++ b/core/src/forja_core/web/templates/deploy.html @@ -0,0 +1,48 @@ +{% extends "base.html" %} + +{% block content %} +
+ +
+ +
+

The Battle

+

Where tempered agents finally face the real world in The Battle. Send them to Azure, AWS, GCP or on-prem.

+
+
+ +
+ +
+
☁️ Azure
+
Deploy as Azure Functions, Container Apps, or AKS with full governance baked in.
+
Coming soon
+
+ +
+
🟠 AWS
+
Lambda, ECS, EKS or SageMaker endpoints — with the same guardrails and audit trail.
+
Coming soon
+
+ +
+
🔵 Google Cloud
+
Cloud Run, GKE or Vertex AI with complete decision traceability.
+
Coming soon
+
+ +
+
🏠 On-Prem / Self-hosted
+
Docker, Kubernetes, or bare metal — the Forge travels with you.
+
Coming soon
+
+ +
+ +
+ A successfully tempered blade only becomes truly valuable once it enters The Battle. + This is where your agents (with their policies, versions and full audit history) are sent into real action on Azure, AWS, GCP or on-prem — carrying the strength they earned in the Forge. +
+ +
+{% endblock %} \ No newline at end of file diff --git a/core/src/forja_core/web/templates/history.html b/core/src/forja_core/web/templates/history.html deleted file mode 100644 index 28b40b4..0000000 --- a/core/src/forja_core/web/templates/history.html +++ /dev/null @@ -1,23 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -

📜 Execution History

- -
-{% for ex in executions %} -{% set sc = 'emerald' if ex.status == 'completed' else ('amber' if 'awaiting' in ex.status else 'red') %} -
-
-
{{ ex.trace_id }}
-
{{ ex.agent_name }} v{{ ex.agent_version }}
-
-
- {{ ex.status }} - {{ ex.n_proposed_actions }} acciones -
-
-{% else %} -
No executions yet.
-{% endfor %} -
-{% endblock %} diff --git a/core/src/forja_core/web/templates/home.html b/core/src/forja_core/web/templates/home.html index 27827a3..91ba284 100644 --- a/core/src/forja_core/web/templates/home.html +++ b/core/src/forja_core/web/templates/home.html @@ -1,89 +1,40 @@ {% extends "base.html" %} {% block content %} -
+
- -
-
- Forja -
- - -
-
Preparation
-
Execution Pipeline
-
Human Oversight & Completion
-
+
+

Define at The Hearth. Prove in The Crucible. Win in The Battle.

- +
- -
-
- PHASE 1 — PREPARATION -
Definition & Guardrails
-
+ + +
The Hearth
+

Define your agents: prompts, models, output schemas, risk thresholds and guardrails.

+
+ + + +
The Crucible
+

Put agents to the test. Run them with guardrails, handle Human-in-the-Loop decisions, and review successful runs.

+
+ + + +
The Battle
+

Deploy your proven agents to Azure, AWS, GCP or on-prem, ready for real action.

+
-
-
-
1. Agent Definition
-
Versioned YAML with prompt, model, output schema and risk threshold
-
-
-
2. Policy Application
-
Guardrails policy loaded and attached to the agent
-
-
- -
-
- PHASE 2 — EXECUTION PIPELINE -
The Main Processing Line
-
- -
-
- 3. Input Guardrails -
Validates input against policy before it reaches the LLM
-
-
- 4. LLM Reasoning -
The agent generates structured output using the configured model
-
-
- 5. Output Guardrails -
Validates the LLM response for safety and correctness
-
-
- 6. Action Proposal -
Generates actions with risk scores and rollback plans
-
-
+ +
+
The Forge Creed
+

+ The risk threshold is the critical temper point. If the blade glows white-hot, The Judgment must intervene. + Nothing leaves the Forge without passing through fire and hammer. +

- - -
-
- PHASE 3 — HUMAN OVERSIGHT & COMPLETION -
Critical Gate + Finalization
-
- - -
- -
{% endblock %} diff --git a/core/src/forja_core/web/templates/policies.html b/core/src/forja_core/web/templates/policies.html deleted file mode 100644 index 48d7d3c..0000000 --- a/core/src/forja_core/web/templates/policies.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "base.html" %} - -{% block content %} -

📐 Policies

- -
-{% for p in policies %} -
-
{{ p.name }} v{{ p.version }}
-
{{ p.description or 'No description' }}
-
Validadores: {{ p.validators | length }}
-
-{% endfor %} -
-{% endblock %} diff --git a/core/src/forja_core/web/templates/run.html b/core/src/forja_core/web/templates/run.html index 96ab27c..a60c02b 100644 --- a/core/src/forja_core/web/templates/run.html +++ b/core/src/forja_core/web/templates/run.html @@ -1,33 +1,38 @@ {% extends "base.html" %} {% block content %} -

▶️ Run Agent

-

Invoke an agent with full governance (guardrails + HITL + observability).

-
-
-
- - -
+
+ +

The Anvil

+
+

Choose a blade, dictate the task and strike. The Forge will execute with fire and rules.

-
- - -
+
+ +
+ + +
- - +
+ + +
+ + + +
+ +
- -
{% endblock %} diff --git a/core/src/forja_core/web/templates/tutorial.html b/core/src/forja_core/web/templates/tutorial.html new file mode 100644 index 0000000..f1832a5 --- /dev/null +++ b/core/src/forja_core/web/templates/tutorial.html @@ -0,0 +1,90 @@ +{% extends "base.html" %} + +{% block content %} +
+ +
+
+ +

Forge Tutorial

+
+

Learn the ancient craft of forging governed agents — step by step, strike by strike.

+
+ + +
+
+ 01 + STATION I — THE HEARTH +
+

Visit the Arsenal

+

+ Every agent in the Forge is a blade that has already been tempered. Inspect existing blades to understand their purpose, risk threshold, and the laws (guardrails) that bind them. +

+ Open the Arsenal → +
+ + +
+
+ 02 + STATION II — THE ANVIL +
+

Strike at the Anvil

+

+ This is where the real work happens. Choose a forged blade, give it a concrete task (the "steel"), and strike. The Forge will run the full pipeline: input guardrails → LLM reasoning → output guardrails → action proposal. +

+
+ Try a real example. Use the incident analyzer blade with a short network incident: +
+ + +
+
+ +
+ + +
+ +
+
+
+

The result below will show the real Strike Sequence, Flaws, and Proposed Edges — exactly like a production forging.

+
+ + +
+
+ 03 + STATION III — THE JUDGMENT +
+

Face the Judgment (HITL)

+

+ When an action's risk score crosses the blade's threshold, the forging pauses. A human (you) must bless or shatter the proposed edges before the agent can continue. This is the heart of governed autonomy. +

+ Enter the Judgment Chamber → +
+ + +
+
+ 04 + MASTERY +
+

Repeat and Improve

+

+ Every successful forging increases the overall heat of the Forge. Review history (when available), tune risk thresholds on your blades, and strengthen guardrails. True mastery comes from deliberate, observed repetition. +

+
+ +
+ The Forge does not forgive sloppy steel. The risk threshold is the critical temper point. If the blade glows white-hot, The Judgment must intervene. + Nothing leaves the Forge without passing through fire and hammer. +
+ +
+{% endblock %} \ No newline at end of file diff --git a/core/src/forja_core/web/ui.py b/core/src/forja_core/web/ui.py index 59441d3..d5d9e97 100644 --- a/core/src/forja_core/web/ui.py +++ b/core/src/forja_core/web/ui.py @@ -1,4 +1,4 @@ -"""HTMX UI router — montado dentro del propio forja-core (Opción A).""" +"""HTMX UI router — mounted inside forja-core (Option A).""" from __future__ import annotations @@ -10,7 +10,8 @@ from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from forja_core.api.deps import get_orchestrator, get_policy_store, get_registry, get_settings -from forja_core.api.persistence import read_execution_summaries +from forja_core.api.executions import _record_execution +from forja_core.api.persistence import append_execution, append_violation, read_execution_summaries from forja_core.domain.execution import AgentExecution router = APIRouter(prefix="", tags=["ui"]) @@ -20,12 +21,12 @@ TEMPLATES_DIR = Path(__file__).parent / "templates" templates = Jinja2Templates(directory=str(TEMPLATES_DIR)) SLOGANS = [ - "Forging agents with judgment", - "Agents forged, not guessed", - "Version. Validate. Approve.", - "Every decision well-tempered", - "Governance that protects", - "From prototype to real control", + "Every strike, a tempered decision", + "Blades forged, not guessed", + "Fire. Hammer. Judgment.", + "The anvil never lies", + "High risk demands the Judgment", + "True steel leaves the Forge", ] def get_slogan() -> str: @@ -57,7 +58,7 @@ async def agent_detail(request: Request, name: str) -> HTMLResponse: try: agent = registry.get_agent(name) except FileNotFoundError: - return HTMLResponse('
Agent not found
', status_code=404) + return HTMLResponse('
Blade not found in the Arsenal
', status_code=404) # Si viene por HTMX, devolvemos solo el fragmento (sin layout) if request.headers.get("HX-Request"): @@ -89,12 +90,13 @@ async def run_invoke( agent_name: str = Form(...), input: str = Form(...), ) -> HTMLResponse: - """Ejecuta el agente usando el orchestrator directamente (mismo proceso).""" + """Execute the agent using the orchestrator directly (same process).""" from forja_core.api.deps import get_policy_store registry = get_registry() policy_store = get_policy_store() orchestrator = get_orchestrator() + settings = get_settings() try: agent_def = registry.get_agent(agent_name) # resuelve la versión activa @@ -108,93 +110,117 @@ async def run_invoke( user_input=input, ) ) - except Exception as e: - return HTMLResponse(f'
Error: {str(e)[:300]}
', status_code=400) - # Resultado enriquecido (FASE I) - status_colors = { - "completed": "emerald", - "awaiting_approval": "amber", - "failed": "red", - "blocked_by_guardrail": "red", + # Persist terminal forgings (including successful "BLADE TEMPERED" ones) + # so they appear in the Armory / Vault of Tempered Blades. + _record_execution(settings.data_dir, str(execution.trace_id), agent_def.name, agent_def.version) + if execution.status in {"completed", "failed", "blocked_by_guardrail"}: + append_execution(settings.data_dir, execution) + for v in execution.violations: + append_violation(settings.data_dir, v) + + except Exception as e: + return HTMLResponse(f'
Forge error: {str(e)[:300]}
', status_code=400) + + # Forging result (gamified) + status_map = { + "completed": ("text-emerald-400", "bg-emerald-950/60 border-emerald-900", "BLADE TEMPERED"), + "awaiting_approval": ("text-amber-400", "bg-amber-950/60 border-amber-900", "ON THE ANVIL · JUDGMENT REQUIRED"), + "failed": ("text-red-400", "bg-red-950/60 border-red-900", "SHATTERED IN THE FIRE"), + "blocked_by_guardrail": ("text-red-400", "bg-red-950/60 border-red-900", "BLOCKED BY THE FORGE"), } - color = status_colors.get(execution.status, "zinc") + text_color, badge_style, status_label = status_map.get( + execution.status, ("text-forge-steel", "bg-forge-surface2 border-forge-iron", execution.status.upper()) + ) steps_html = "" for step in execution.decision_path: dur = f"{step.duration_ms}ms" if step.duration_ms else "" extra = "" if step.n_approved is not None: - extra = f" · {step.n_approved} acciones aprobadas" + extra = f" · {step.n_approved} blessings" if step.rejected: - extra = " · RECHAZADO" + extra = " · SHATTERED" if step.hitl: - extra = " · HITL" - steps_html += f'
{step.node}{dur}{extra}
' + extra = " · JUDGMENT" + steps_html += f'
{step.node}{dur}{extra}
' violations_html = "" if execution.violations: for v in execution.violations: - sev = "red" if v.severity == "block" else "amber" - violations_html += f'
• {v.validator}: {v.message} ({v.severity})
' + sev = "text-red-400" if v.severity == "block" else "text-amber-400" + violations_html += f'
• {v.validator}: {v.message} ({v.severity})
' actions_html = "" if execution.proposed_actions: for a in execution.proposed_actions: risk = a.risk_score - badge = "emerald" if risk < 3 else ("amber" if risk < 5 else "red") - actions_html += f'
• {a.description} (risk={risk})
' + badge = "text-emerald-400" if risk < 3 else ("text-amber-400" if risk < 5 else "text-red-400") + actions_html += f'
• {a.description} (risk={risk})
' needs_html = "" if execution.needs_human_for: - needs_html = f'
⏸️ Paused for human approval ({len(execution.needs_human_for)} action(s)). Go to Approvals.
' + needs_html = f'
This blade awaits the Judgment ({len(execution.needs_human_for)} action(s)). Enter the Chamber →
' html = f""" -
-
- Execution - {execution.status} -
-
trace_id: {execution.trace_id}
- -
-
Decision path
-
{steps_html or 'no steps'}
+
+
+
+ Forging Record + {status_label} +
+
trace {execution.trace_id}
- {f'
Violations
{violations_html}
' if violations_html else ''} +
+
Strike Sequence
+
{steps_html or 'no strikes'}
+
- {f'
Proposed actions
{actions_html}
' if actions_html else ''} + {f'
Flaws (Violations)
{violations_html}
' if violations_html else ''} + + {f'
Proposed Edges
{actions_html}
' if actions_html else ''} {needs_html} - {f'
✓ Completed with {len(execution.proposed_actions or [])} actions.
' if execution.status == 'completed' else ''} + {f'
✓ Forging complete. {len(execution.proposed_actions or [])} edges ready.
' if execution.status == 'completed' else ''}
""" return HTMLResponse(html) -@router.get("/policies", response_class=HTMLResponse) -async def policies_page(request: Request) -> HTMLResponse: - policy_store = get_policy_store() - policies = policy_store.list_policies() +# ====================== APPROVALS (HITL) ====================== + +@router.get("/tutorial", response_class=HTMLResponse) +async def tutorial_page(request: Request) -> HTMLResponse: + """Gamified step-by-step guide that teaches how to forge an agent.""" return templates.TemplateResponse( - "policies.html", - {"request": request, "title": "Policies", "policies": policies, "slogan": get_slogan()}, + "tutorial.html", + {"request": request, "title": "Tutorial", "slogan": get_slogan(), "hide_tutorial_button": True}, ) -@router.get("/history", response_class=HTMLResponse) -async def history_page(request: Request) -> HTMLResponse: +@router.get("/armory", response_class=HTMLResponse) +async def armory_page(request: Request) -> HTMLResponse: + """The Armory — collection of successfully tempered blades (completed forgings).""" data_dir = get_settings().data_dir - executions = read_execution_summaries(data_dir)[:50] + all_execs = read_execution_summaries(data_dir) + tempered = [e for e in all_execs if e.status == "completed"] + tempered.sort(key=lambda e: e.finished_at or e.started_at, reverse=True) return templates.TemplateResponse( - "history.html", - {"request": request, "title": "History", "executions": executions, "slogan": get_slogan()}, + "armory.html", + {"request": request, "title": "Armory", "tempered": tempered, "slogan": get_slogan()}, ) -# ====================== APROBACIONES (HITL) ====================== +@router.get("/deploy", response_class=HTMLResponse) +async def deploy_page(request: Request) -> HTMLResponse: + """Deployment station — where tempered agents are sent to Azure, AWS, GCP, etc.""" + return templates.TemplateResponse( + "deploy.html", + {"request": request, "title": "Deploy", "slogan": get_slogan()}, + ) + @router.get("/approvals", response_class=HTMLResponse) async def approvals_page(request: Request) -> HTMLResponse: diff --git a/docs/forja-progress.html b/docs/forja-progress.html index 5894058..7bf8c4c 100644 --- a/docs/forja-progress.html +++ b/docs/forja-progress.html @@ -3,26 +3,26 @@ - Forja — Seguimiento de Progreso + Forja — Estado Actual -
+
-
-
- 🔨 -
+
+ ⚒︎
-

Forja

-

Seguimiento de Progreso

+

Forja

+

Estado actual del proyecto (Gamificado)

- -
-
-
Visión Actual
+
+
+ + Versión actual: 3 estaciones
-

Cadena de Montaje (Assembly Line)

-

- La interfaz se ha transformado en una vista única de fábrica. - El objetivo es que el usuario entienda de un vistazo cómo se "forja" un agente, - mostrando solo los bloques que generan inputs configurables o - outputs significativos. -

- +
-

Evolución Principal

+

Resumen del Estado Actual

-
+
+

+ El proyecto ha sido simplificado a 3 estaciones principales, siguiendo una estructura clara y lógica: +

- -
-
1
-
-
-
-
Eliminación de la Navbar
-
Se eliminó completamente la navegación superior tradicional.
-
-
Paso 1
-
+
+ +
+
STATION I
+
The Hearth
+
Definición de agentes (Arsenal)
-
- - -
-
2
-
-
Paso a Vista Única de Fábrica
-
Toda la experiencia se concentra en una "cadena de montaje" visual en lugar de páginas separadas.
-
-
- - -
-
3
-
-
Eliminación de las Cajas de Fases
-
Se quitaron los contenedores grandes que englobaban cada fase. Ahora solo quedan los encabezados de fase + las estaciones sueltas.
-
-
- - -
-
4
-
-
Unificación de Fondo + Colores Llamativos en Texto
-
Todas las cajas de la línea de ensamblado usan el mismo gris. Los títulos tienen colores muy saturados y distintos (cyan, púrpura, amarillo, verde, rojo).
-
-
- - -
-
5
-
-
Limpieza de Estaciones sin Valor de I/O
-
- Se eliminaron los bloques que no generan inputs configurables ni outputs significativos: - Input Intake y - Audit & Logging. -
-
-
- -
-
- - -
-

Estado Actual de la Cadena de Montaje

- -
-
- -
-
FASE 1 — PREPARACIÓN
-
-
1. Agent Definition
-
2. Policy Application
-
+ +
+
STATION II
+
The Crucible
+
Pruebas, guardrails y Human-in-the-Loop (Agrupación de Anvil + Judgment + Armory)
- - -
-
FASE 2 — LÍNEA DE ENSAMBLADO
-
-
- 3. Input Guardrails -
-
- 4. LLM Reasoning -
-
- 5. Output Guardrails -
-
- 6. Action Proposal -
-
+ + +
+
STATION III
+
The Battle
+
Despliegue de agentes forjados (Azure, AWS, GCP, On-prem)
- - -
-
FASE 3 — SUPERVISIÓN HUMANA
-
-
7. Human Approval Gate
-
8. Finalization
-
-
-
+ +

Cambios principales realizados:

-
- Total de estaciones activas: 8 - (todas producen inputs configurables o outputs significativos) -
-
-
- - -
-
-
PRINCIPIOS APLICADOS
    -
  • Strict adherence to karpathy.md guidelines
  • -
  • Simplicity First
  • -
  • Surgical changes (solo tocar lo necesario)
  • -
  • Eliminar lo que no aporta valor al flujo visual
  • +
  • ✓ Reducción de 5 estaciones a 3 estaciones bien definidas.
  • +
  • ✓ Eliminación de etiquetas redundantes ("STATION I", "STATION II"...).
  • +
  • ✓ Títulos de estaciones ahora en naranja (ember) y tamaño grande.
  • +
  • ✓ Texto guía superior en blanco y tamaño grande (text-3xl).
  • +
  • ✓ Recuperación del Forge Creed original como elemento inspirador.
  • +
  • ✓ Eliminación de los enlaces "Go to the..." de las tarjetas para mayor limpieza.
  • +
  • ✓ Botón flotante de Tutorial simplificado y centrado.
  • +
  • ✓ Navbar con slogan: "Fire • Hammer • Judgment"
  • +
  • ✓ The Armory ya no es una estación principal (se integra conceptualmente dentro de The Crucible).
- -
-
PRÓXIMOS PASOS (SUGERIDOS)
-
-

Este documento puede servir como registro vivo del proyecto.

-

Añade aquí nuevas decisiones, experimentos visuales o cambios de rumbo cuando ocurran.

-
-
-
- Documento generado para seguimiento del proyecto Forja • - Tokyo Night Theme +
+

Próximos pasos sugeridos:

+
    +
  • • Mejorar la página de The Battle (/deploy) con más contenido real.
  • +
  • • Conectar visualmente The Crucible con las páginas de ejecución y aprobaciones.
  • +
  • • Añadir feedback visual de "éxito" cuando un agente se forja correctamente.
  • +
  • • Posiblemente añadir un estado de "agentes desplegados" en The Battle.
  • +