ForgeOS Device Agent is a Pop!_OS desktop launcher for a local autonomous Android device runtime.
The runtime is designed to:
- detect an attached phone
- create a per-device execution session
- assess transport and hardware clues
- stage real install artifacts for the chosen rebuild path
- prepare recovery and backup artifacts
- classify blockers
- keep moving automatically while the blocker is software-solvable
- stop only when a real human action, destructive approval, missing external artifact, or hard technical limit is reached
The GUI is an operator monitor. It is not the main engine.
This checkpoint is ready for:
- desktop launch
- best-effort VS Code sidecar opening
- first-run host bootstrap
- device session creation
- persistent state tracking
- initial hardware and transport assessment
- per-session recovery bundle and restore-plan generation
- staged install artifact intake under each session
- flashable artifact manifest and bundle generation
- explicit wipe-approval capture
- approved dry-run flash execution
- generic live execution for staged
fastbootimage sets oradb sideloadpackages - simplified operator monitor mode
- optional advanced-details mode
This build is intended to be shipped for a controlled supported scope:
- generic
fastbootimage installs when the session has a staged.imgset - generic
adb sideloadinstalls when the session has a staged OTA-style zip - operator-reviewed, explicitly approved wipe-and-rebuild execution
It is not yet a universal cross-OEM unattended flasher for unknown devices without further device-family integration.
Before connecting a test phone, assume the following:
- every phone is unsupported until proven otherwise
- recovery matters more than speed
- bootloader unlock, flashing, relocking, and signing decisions must be deliberate
- the current scaffold defaults to non-destructive planning
Use a test phone you can afford to lose data on.
Do not use your primary phone for first validation.
When you open ForgeOS from the Pop!_OS app menu:
- The launcher starts the ForgeOS runtime.
- ForgeOS bootstraps the local workspace.
- The main VS Code workspace opens if
codeis available. - Background watchers begin checking for
adb,fastboot, and USB-only Android visibility. - The operator monitor opens in a simplified view.
By default, focus on these panels only:
Runtime MissionAgent ExecutionAutonomous Self-Heal1. Intake And Autonomy Limits2. Proposed Outcome And Preview3. Backup And Restore4. Build Artifacts6. Install Gate
These are the two questions ForgeOS is trying to answer for you:
- what has the runtime already done
- what is the one thing you need to do next, if anything
At the top of the window, the status line now includes a spinning radioactive symbol when ForgeOS is actively working.
Use that indicator as a quick heartbeat:
- spinning
☢means ForgeOS is actively scanning, refreshing, or recomputing the session - dim
☢means ForgeOS is idle and waiting for the next device event or operator action
The header now also includes a button legend:
- blue means
vieworopen information - orange means
ForgeOS is waiting for your action - green means
doneorsaved - gray means
not available yet
The Autonomous Self-Heal panel now reports when ForgeOS detects a repeated local-worker failure, what it retried, and whether the bounded fix loop recovered the task.
ForgeOS now gives the local workers up to three autonomous fix rounds before it asks for help. If that is still not enough, it pauses and asks for permission for another batch of three through Approve 3 More Fix Loops.
When ForgeOS is simply in recommendation or research_only_path with no real machine-solvable blocker, it should now stay in honest research mode instead of generating a no-op remediation artifact.
When ForgeOS already has a managed transport such as live adb, it should no longer ask for generated adapter work just because the session is still cautious. In the same way, artifact_research should stay quiet while the build path is still explicitly research_only_path.
Use Show Advanced Details only when you want the deeper session dump, execution queue, and other lower-level diagnostics.
If a phone is already connected and ForgeOS shows it as live:
- Read
Runtime Mission. - Check
Agent Execution. - If the phone is fully connected over
adb, leave it connected and unlocked. - Set the intended user profile only if you want a different OS strategy.
- Do not approve a wipe until you are satisfied with the backup and flash plan.
If ForgeOS needs something from you, the top panels should now reduce that to one next action.
ForgeOS includes a dedicated approval panel in the GUI.
Use it like this:
- Let ForgeOS assess the phone and generate a flash plan.
- Review the flash plan and restore assumptions.
- Confirm that you have reviewed the restore path.
- Type
WIPE_AND_REBUILD. - Click
Record Wipe Approval. - Run the approved dry run first.
By default, live destructive execution is still blocked by policy in:
That policy must be changed deliberately before the GUI will allow a live wipe-and-flash attempt.
When the phone is only visible as USB or MTP, ForgeOS should:
- identify the vendor and model when possible
- show phone-side setup steps for that family
- tell you the expected next state, such as
adb unauthorizedoradb connected - give a few troubleshooting steps before you try anything destructive
When the phone is already connected through adb, the connection setup panel may be hidden in simple mode because it is no longer the current blocker.
Each session now creates a best-available pre-wipe recovery set under the device folder:
backup/backup-plan.jsonbackup/device-metadata-backup.jsonbackup/session-recovery-bundle.tar.gzrestore/restore-plan.json
What this means in practice:
backup/session-recovery-bundle.tar.gzpreserves host-side session intelligence and recovery evidencebackup/device-metadata-backup.jsonpreserves the best available live phone metadata capturerestore/restore-plan.jsonrecords how ForgeOS intends to recover safely if something goes wrong
This does not guarantee a full firmware restore for every device family. It does guarantee that ForgeOS preserves the best available session intelligence, transport facts, metadata capture, and recovery notes before a destructive step is approved.
ForgeOS now expects real install inputs to be staged per session under:
artifacts/os-source/
Supported generic install inputs:
update.zip,ota.zip, orpayload.zipforadb sideload- fastboot images such as
boot.img,system.img,vendor.img,vbmeta.img, orsuper.img
When these files are present, ForgeOS creates:
runtime/build/artifact-manifest.jsonruntime/build/flashable-artifacts.tar.gzruntime/build/README.md
The GUI 4. Build Artifacts panel shows:
- whether the artifact set is ready
- which install mode ForgeOS will use
- which files were staged
- what still needs to be provided before install can proceed
The launcher is installed into your local applications directory:
~/.local/share/applications/forgeos.desktop
If you move the repo or want to refresh the launcher:
bash scripts/install_launcher.shIf you want to start it from a terminal:
./launcher/launch_forgeos.shOr:
.venv/bin/python -m app.mainRun this before your first real test session:
bash scripts/verify_environment.shExpected good signs:
codeis foundadbis foundfastbootis foundvenv pythonis foundudev-like device pathsare present
Use this sequence with your test phone.
- Charge it above 50%.
- Use a good USB data cable.
- If Android boots normally, enable Developer Options and USB debugging.
- If possible, record the exact model, current Android version, and whether the bootloader is known to be unlockable.
Open ForgeOS from the desktop icon or run:
./launcher/launch_forgeos.shAttach the device by USB.
ForgeOS will try to detect:
adbmodefastbootmodefastbootdtransitions
If Android presents an RSA trust prompt, approve it on the phone.
You can verify transport manually:
local-tools/platform-tools/adb devices -lOr:
local-tools/platform-tools/fastboot devicesA newly detected phone creates a deterministic session under devices/:
devices/{manufacturer}-{model}-{short-fingerprint}-{date}/
Important files:
device-profile.jsonsession-state.jsonreports/assessment.jsonreports/engagement.jsonplans/master-strategies/plans/connection-plan.jsonbackup/backup-plan.jsonbackup/device-metadata-backup.jsonbackup/session-recovery-bundle.tar.gzrestore/restore-plan.jsonexecution/flash-plan.json
The first automatic state is no longer a simple ASSESS shortcut.
The runtime now moves through persisted states such as:
DEVICE_ATTACHEDDISCOVERPROFILE_SYNTHESISBACKUP_PLANPATH_SELECTBLOCKER_CLASSIFYQUESTION_GATE
Check it here:
ForgeOS currently classifies the device into one of:
actionableresearch_onlyblockedexperimental
If the device is blocked or research_only, that is a correct and safe outcome when restore or support feasibility is not proven.
ForgeOS now attempts safe, non-destructive runtime steps automatically.
That includes:
- starting the adb server
- retrying adb reconnect
- checking whether the phone is visible only as USB/MTP
- collecting hardware clues through live
adbwhen available - generating backup and restore artifacts
- classifying whether the next blocker is machine-solvable or requires you
This does not mean ForgeOS can bypass a locked screen or trust prompt.
ForgeOS includes a profile section in the GUI for each device session.
Set:
- intended user persona
- technical comfort
- top priority
- Google-services preference
- secondary OS goal
Then save the profile to recompute the recommended OS path for that exact device and intended user.
This updates:
user-profile.jsonos-goals.jsonsession-state.jsonplans/connection-plan.json
Each device has its own workspace under:
Tool executions are recorded under:
Host bootstrap reports are stored under:
Reusable policy and strategy assets live under:
ForgeOS now improves through controlled evidence capture.
- knowledge/ stores session outcomes and the support matrix
- promotion/ stores promotion rules and review-required master update candidates
This means the system can get better at recommendations over time without silently changing risky behavior.
Use a straightforward validation pass first:
- Launch ForgeOS.
- Connect the phone in normal Android mode with USB debugging enabled.
- Confirm the device appears in
adb devices -l. - Confirm ForgeOS creates a new session folder.
- Open
device-profile.jsonandsession-state.json. - Verify the session enters persisted runtime states such as
DEVICE_ATTACHED,DISCOVER,PROFILE_SYNTHESIS, andQUESTION_GATEor later. - Review
assessment.jsonand confirm the support classification makes sense.
Do not try live flashing from this first pass.
Use it to validate detection, fingerprinting, logging, naming, and session isolation.
- Try a different USB cable.
- Confirm the phone is in data mode, not charge-only mode.
- Run
adb devices -l. - Toggle USB debugging off and on.
- Reconnect the phone and approve the RSA dialog again.
That can still be useful.
Run:
local-tools/platform-tools/fastboot devicesForgeOS can still create a session from fastboot visibility, but the assessment may remain limited.
The app continues running even if code is unavailable.
Check:
command -v codeReview:
Then check audit logs in:
Right now ForgeOS is strongest at:
- environment bootstrap
- device session management
- state persistence
- safety-oriented assessment scaffolding
- repeatable per-device isolation
It is still intentionally incomplete for:
- fully automated hardware-aware OS builds across arbitrary Android devices
- broad device-family flashing adapters
- full Android source resolution
- AVB signing integration
- unattended live wipe/flash execution on unknown hardware
- modem, Wi-Fi, Bluetooth, and OTA validation
Those live integration tasks are tracked in:
Use the phone to validate the assessment pipeline first.
The fastest meaningful test is:
- Launch ForgeOS.
- Connect the phone in Android with USB debugging enabled.
- Confirm a session folder is created.
- Share the generated
device-profile.jsonandsession-state.json.
From there we can wire the next layer of live probing around your exact device rather than pretending all phones behave the same way.