The console
Console sidebar rows and the permission each needs, what the Overview shows, how a missing permission renders, and terminal sign-in approval.
The console is where you work with Penv Cloud, the hosted provider for penv: your projects and values, machine identities, the audit record, and workspace settings.
Sidebar
Machine Identities, Integrations and Settings are groups with no page of their own. Slugs: roles and permissions.
| Row | Path | Shown with |
|---|---|---|
| Overview | /dashboard | any permission |
| Projects | /projects | project:read |
| Machine Identities: All Identities | /identities | machine:read |
| Machine Identities: Connect a Platform | /identities/connect | machine:create |
| Integrations: Connections | /integrations | integration:read |
| Integrations: Dynamic Engines | /integrations/dynamic | dynamic:read |
| Integrations: Providers | /integrations/providers | integration:read |
| Audit Log | /audit | audit:read |
| Billing | /settings/billing | billing:read |
| Encryption | /settings/encryption | org:read |
| Settings: Organization | /settings/organization | org:read |
| Settings: Members | /settings/members | member:read |
| Settings: Roles | /settings/roles | role:read |
| Settings: Security | /settings/security | org:read |
| Settings: Single Sign-On | /settings/sso | sso:read |
| Settings: Danger Zone | /settings/danger | org:read |
We highlight the longest matching path: /identities/connect highlights Connect a Platform, not All Identities.
Your account menu at the bottom of the rail opens a project picker: search, your readable projects, the current project's environments, New Project, View All Projects. Only Free shows a Projects meter there, prompting an upgrade at four fifths of the limit.
Overview
Path: /dashboard, the first page you see after sign-in. Each part reads only what your permissions allow; a figure your role does not cover reads Not in your role, and one we could not read shows a dash, not a zero.
First visit
Until your workspace holds a value, you see Welcome to Penv Cloud, five steps and your plan. The next step is raised into a card with the one button that does it:
| Step | Button | Needs |
|---|---|---|
| Create a Project | Create Project | project:create |
| Create an Environment | Create Environment, in the newest project | environment:create |
| Set Your First Secret | Set a Secret, opens Set Parameters | secret:write |
| Create a Machine Identity | Create Identity, preset to the new environment and Secrets Reader | machine:create |
| Connect penv | The schema header and the penv run command | none |
A step your role cannot do says so instead of showing a button. The last step is done once a machine reads with its credential. Your plan lists the plan, projects and members against its limits, and machine identities, which are free on every plan.
Established workspace
- The header counts the things to review, each marked amber below it.
- New Identity and New Project sit at its right, when your role can create them.
- Until a machine has read, a row names the next setup step.
- For Connect penv that row starts collapsed; Show how opens the schema header and the
penv runcommand.
| Part | Content | Needs |
|---|---|---|
| Projects | Count against the Free limit, and environments | project:read |
| Members | Active members against paid seats, or the Free seat limit | member:read |
| Machines | Live identities, and credentials that expire within 14 days with no newer credential to take over | machine:read |
| Values | Keys holding a value, and how many are due for rotation; the link opens the environment with the most | project:read; the due count needs secret:write, and without it the line counts the projects holding values |
| Machine reads, 7 days | Reads served to machines per day, and how many we refused | machine:read |
| Project cards | The four most recently changed projects: environments, values, keys due, last change | project:read |
| Activity | The newest audit entries, with consecutive reads by one actor in one environment folded into one line, then identities with no read in 30 days | audit:read; idle identities need machine:read |
| Waiting on you | Open change and access requests you may decide, open secret scanning findings, syncs whose latest run failed | Approvals: secret:write there (secret:delete for a removal), or member:role_assign there for access; scanning and syncs: integration:read |
| Delivery, last 7 days | Reads per day, the slowest actions by the time we took, the newest CI runs | Delivery Insights on your plan, and machine:read; a run's repository needs audit:read |
Activity leaves out sign-ins and sign-outs, organization switches, step-up checks, machine credential exchanges, and reads and exports of the audit log; the audit log has them. A credential, trust or keypair a person adds does appear.
Showing Activity is itself a read of the log, which we record as audit.read with via: overview.
The footer states the encryption every plan gets: each value sealed with AES-256-GCM and bound to its full address. It then names who holds the wrapping key, in the words the Encryption page uses:
| Key state | Footer says |
|---|---|
| Our key | We hold the wrapping key |
| Your KMS key | Your key wraps every value |
| Re-wrap | Values are moving onto your key, or back to ours |
| Your key revoked | We refuse reads and writes |
| Key state unreadable | Nothing about custody, rather than guess |
Missing permissions
| Situation | What you see |
|---|---|
| A row needs a permission you do not hold | We hide the row |
| Every row in a group is hidden | We hide the group |
| You open the page by path anyway | "You don't have access to this" in the console shell, naming the missing permission |
| Your grant covers one project only | The row stays; the page shows that project |
| You hold no permission anywhere in the workspace | We redirect you to /no-access, listing your other workspaces |
We read your permissions from the database on every request. Removing a role takes effect on the next click, not the next sign-in.
Terminal sign-in approval
Path: /device. penv login prints an eight-character code, valid for ten minutes, and opens this page. Type the code your terminal shows; we never fill it in from a link, so comparing the two is how you know the terminal is yours. Once you enter it, you see the name the terminal gave itself (anyone starting a sign-in can choose it, so we reduce it to plain words and say so), the request's source address, and when it asked. You choose which workspace the credential may reach: the one you are signed in to by default, any other you belong to, or all of them. The credential we mint lasts 30 days from its last use, and at most 90 days. A workspace that requires single sign-on or two-factor accepts it only if you approved it from a session that met that requirement.
Approving requires step-up when your account has an authenticator (security and MFA); denying never does, so you shut down an unrecognized code in one click.
| Action | Needs | Step-up | Recorded as |
|---|---|---|---|
| Approve a terminal | a signed-in session | Yes | device.approved |
| Deny a terminal | a signed-in session | No | device.denied |
We write each entry in the workspace you chose, or once per workspace you belong to when you chose all of them.
You answer agent reveal requests at /approvals/[id]: approve a reveal.
Next: projects and environments.