+code  :: passcode for Landscape

  |hi <ship>  :: ping a ship
              :: <ship> is the ship's name
  |rekey '<key>'  :: update your ship's private keys
                  :: <key> is the contents of an UrbitOS keyfile

  ctrl-x  :: toggle between cli apps

  ctrl-d  :: shutdown your ship

  ctrl-z  :: kill urbit process (to be used only if ctrl-d doesn't work)

Ship references

  our  :: your ship's name

  (sein:title our now our)  :: your ship's sponsor

  +trouble  :: current base/home hashes and local key state of our, sponsor, and ~dopzod

  |syncs  :: status of existing desk subscriptions

  .^(@uv %cz /=base=)  :: your ship's base hash

  .^(@uv %cz /=home=)  :: your ship's home hash

  .^(* %j /=rift=/(scot %p <ship>))  :: continuity number of <ship>

  .^(* %j /=life=/(scot %p <ship>))  :: revision number of <ship>'s key

  .^([@u @ux @] %j /=deed=/<ship>/<life>)  :: <ship>'s key with revision number <life> (hex format)
  .^(* %j /=deed=/<ship>/<life>)  :: <ship>'s key with revision number <life> (decimal format)

  |knob %hole %<vol>  :: set stack trace verbosity
                      :: <vol> is "loud" or "soft"


  :: toggle to :chat-cli> to run these commands

  ;chats  :: list your ship's active chats

  ;join <ship>/<chat>  :: <ship> is the name of the ship that owns the chat
                       :: <chat> is the name of the chat

  ;leave <ship>/<chat>

  ;create <type> /<chat>  :: <type> is "channel", "village", "journal", or "mailbox" (see below)

  ;delete /<chat>

  ;invite <perm> /<chat> <ships>   :: <perm> is "r", "w", or "rw" (see below)
                                   :: <ships> is a comma-separated list of ship names

  ;banish <perm> /<chat> <ships>  :: <perm> is the permission type to revoke from <ships>

  :: channel: publicly writable
  :: village: invite-only writable
  :: journal: publicly readable, invite-only writable
  :: mailbox: publicly writeable, invite-only readable

  :: r: read permission
  :: w: write permission
  :: rw: read and write permission


  |moon  :: create moon

  |moon-breach <moon>  :: reset network status
                       :: <moon> is the moon's name

  |moon-cycle-keys <moon>  :: cycle keys without breaching


  |merge %<desk> our %home  :: clone your ship's %home desk to create a new one named <desk>
                            :: every ship has the desks "home", "base", and "kids"

  |mount /=<desk>=  :: mount a desk to Unix

  |commit %<desk>  :: save a desk's changes to Unix

  |sync %<desk> <ship> %<remote-desk>  :: sync from a ship's <remote-desk> to your <desk>
                                       :: stars and planets automatically configure "|sync %home <parent> %kids" upon first boot

  |unsync %<desk> <ship> %<remote-desk>  :: cancel an existing sync

  :goad %force  :: recompile all apps

Convert Azimuth points & @p's

  `@`<ship>  :: @p → AZP
             :: <ship> is any ship name

  `@p`<azp>  :: AZP → @p
             :: <azp> in Hoon notation, e.g. 3183008865 is

Ames debugging

  :: Check whether your ship can contact them at all:

    |hi ~receiving-ship 
        :: If this is successful that means your ship can contact the ship,
        :: but it doesn't necessarily mean all your ship's messages are going through
        :: since they might be on different flows (Urbit only guarantees ordering 
        :: within a single flow).

    |hi ~sponsor 
        :: try contacting your ship's sponsors and the receiving ship's sponsors 

  :: Check if we're actually trying to send messages:

        :: If your ship is retrying a message, there will be an entry with a duct 
        :: that includes /a/pump/~ship/N where N is the bone number. 
        :: If your ship is trying to talk on several bones (eg multiple 
        :: subscriptions or pokes on different ducts), there may be more than one.

        :: compare to the times in +timers. If this is significantly 
        :: after those times, then behn is stuck. We don't know why this 
        :: happens, but vere should kick it 10 minutes after the last timer 
        :: fired. You can accelerate this by setting any timer. The easiest 
        :: way is to run `-time ~s1` at the dojo.

    +keys ~ship  
        :: run this on both ships for each other and make sure they line up

    |ames-verb %snd  
        :: check if your ship is trying to resend the packet. Should see %dead, 
        :: usually with an rto of 30 seconds (our max). Check if your ship is 
        :: getting acks (hear/done) or duplicate acks. If so, that's where 
        :: you want to investigate.

  :: Otherwise, this will tell you which routes your ship is trying to send on:

    |ames-verb %snd %rot  
        :: If it's been stuck for a while, this should be the ship and 
        :: its sponsor tree up until a ship we have a direct route to 
        :: (usually a galaxy or a common sponsor between the two ships).

  :: On the receiving ship, run:

    |ames-verb %rcv
        :: This will tell you if it's sending acknowledgments (done/hear) 
        :: and if they're duplicates. If it's not sending them, investigate.  

  :: If the receiving ship is sending acknowledgements run:

    |ames-verb %rcv %rot
        :: This will tell you what routes it's using to try to send 
        :: back the acknowledgment

  :: If one side is sending and other isn't receiving (in either 
  :: direction) check the intervening sponsors that it says it's   
  :: routing through by running:

    |ames-verb %for
        :: This will tell you every time your ship forwards a packet for someone.